Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Manifest - "Has No Default Constructor" With Activity/Runnable Class

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();
        }
    }
}
like image 945
Finn C Avatar asked Sep 19 '14 00:09

Finn C


1 Answers

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.

like image 90
drewhannay Avatar answered Oct 20 '22 02:10

drewhannay