I have a fairly confusing problem. I'm trying to run a basic chat client via Android. I've set it up within 3 classes of my main project. Problem is, for some odd reason, my ChatConnect.java (which handles actual chat messaging) isn't seeming to pop up as an Activity for AndroidManifest.xml, which is causing some serious issues - AKA I need to use a Layout (specifically game.xml) in my ChatConnect class and it refuses to load as a result of not being defined as an activity in the manifest. Anyways, here's my three classes.
Yes, I realize StrictMode is horribly awful. However, I also can't get the chat client to work without it, even with said permissions in manifest. I've tried cleaning my project.
All help is greatly appreciated!
ChatConnect.java
package com.example.AndroidRPGNew.multiplayer;
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.example.AndroidRPGNew.Main;
import com.example.AndroidRPGNew.R;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class ChatConnect extends Activity implements Runnable {
// Begin displaying messages to game.xml. Display to chatView via new lines.
// Ability to send message via chatMessageSend - Sends chat message data from chatMessage text field
// Once connected, log to chat. Allow for multicolors, etc.
private Socket socket;
public String userId;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.game);
SharedPreferences settings = getSharedPreferences(Main.PREFS_NAME, 0);
userId = settings.getString("userId", "unknown");
run();
}
public ChatConnect(Socket s){
socket = s;
}
public void run(){
try{
final Scanner chat = new Scanner(System.in);
final Scanner in = new Scanner(socket.getInputStream());
final PrintWriter out = new PrintWriter(socket.getOutputStream());
Button sendMessage = (Button) findViewById(R.id.chatMessageSend); // ERROR HERE: ALTHOUGH IT IS SUPPOSED TO BE IN GAME.XML CONTENT VIEW, THIS CAUSES A NULLPOINTER!
sendMessage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TextView input = (TextView) findViewById(R.id.chatMessage);
String inputMsg = input.toString();
out.println(inputMsg);
out.flush();
if(in.hasNext()){
System.out.println(in.nextLine());
}
}
});
while(true){
String input = chat.nextLine();
out.println(input);
out.flush();
if(in.hasNext()){
System.out.println(in.nextLine());
}
}
}
catch(Exception e){
e.printStackTrace();
}
}
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.AndroidRPGNew"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="16"/>
<application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
<activity android:name="com.example.AndroidRPGNew.Main"
android:label="@string/app_name"
android:screenOrientation="landscape"
android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name="com.example.AndroidRPGNew.SettingsHandler"
android:screenOrientation="landscape"
android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen">
</activity>
<activity android:name="com.example.AndroidRPGNew.StoreHandler"
android:screenOrientation="landscape"
android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen">
</activity>
<activity android:name="com.example.AndroidRPGNew.Loading"
android:screenOrientation="landscape"
android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen">
</activity>
<activity android:name="com.example.AndroidRPGNew.MusicInitiator"
android:screenOrientation="landscape"
android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen">
</activity>
<activity android:name="com.example.AndroidRPGNew.multiplayer.AccountCreate"
android:screenOrientation="landscape"
android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen">
</activity>
<activity android:name="com.example.AndroidRPGNew.multiplayer.AccountSetup"
android:screenOrientation="landscape"
android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen">
</activity>
<activity android:name="com.example.AndroidRPGNew.multiplayer.MultiplayerMenu"
android:screenOrientation="landscape"
android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen">
</activity>
<activity android:name="com.example.AndroidRPGNew.multiplayer.SQLConnection"
android:screenOrientation="landscape"
android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen">
</activity>
<activity android:name="com.example.AndroidRPGNew.multiplayer.ServerConnect"
android:screenOrientation="landscape"
android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen">
</activity>
<activity android:name="com.example.AndroidRPGNew.multiplayer.ChatConnect"
android:screenOrientation="landscape"
android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen">
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.NETWORK" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
</manifest>
ServerConnect.java
package com.example.AndroidRPGNew.multiplayer;
import android.app.Activity;
import android.os.Bundle;
import android.os.StrictMode;
import android.util.Log;
import com.example.AndroidRPGNew.R;
import java.net.Socket;
/**
* Created by fccardiff on 9/18/14.
*/
public class ServerConnect extends Activity {
// Establish connection to server, with IP from MultiplayerMenu
// Initiate ChatConnect
String userId = null;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
setContentView(R.layout.game);
// TODO: KEEP THE ABOVE TWO LINES ONLY TEMPORARILY - FIND A FIX!
connect();
}
public void connect() {
final int port = 2525;
final String IP = MultiplayerMenu.getIP();
try {
Socket s = new Socket(IP, port);
Log.w("Server:", "Connected to " + IP + ":" + port);
ChatConnect client = new ChatConnect(s);
Thread thread = new Thread(client);
thread.start();
} catch (Exception serverNotFound) {
serverNotFound.printStackTrace();
}
}
}
Android Activity
classes must have a default constructor that takes no parameters. Your ChatConnect
class has this constructor:
public ChatConnect(Socket s){
socket = s;
}
But the system is looking for one like this:
public ChatConnect(){
}
and not finding one, which is why it's crashing.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With