DrWooolie DrWooolie - 6 months ago 16
Android Question

run method onclick crash in android

I am currently working on writing a simple message application on Android. I have the server in a class called

runServer
, which runs perfectly. Then i have a client in a method in my
mainActivity
. I have a
button
, which has an
onclick="startClient"
. but whenever i run an click on the
button
, i get an error.

03-11 13:01:40.622: E/AndroidRuntime(718): java.lang.IllegalStateException:
Could not find a method startClient(View) in the activity class com.example.datorkomprojekt.MainActivity
for onClick handler on view class android.widget.Button with id 'connect'


What can I do to solve this?

MainActivity

public class MainActivity extends Activity {

private Socket socket;
private ObjectInputStream ois;
private DataOutputStream dos;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

runOnUiThread(new Runnable(){
public void run(){
EditText et = (EditText) findViewById(R.id.message_id);
String message = et.getText().toString();
EditText et1 = (EditText) findViewById(R.id.messages);
et1.append(message);
}
});
}

public void startClient() {
socket = new Socket();
InetSocketAddress ipPort = new InetSocketAddress("10.0.2.15", 4444);
try {
socket.connect(ipPort);
dos = new DataOutputStream(socket.getOutputStream());
} catch (Exception e) {
}
Thread thread = new Thread();
thread.start();
}

}


server class

public class RunServer {

private ServerSocket server;
private Socket socket;
private DataInputStream dis;
private int port;

public RunServer(int port){
this.port = port;
Thread connectThread = new Thread( new Connect() );
connectThread.start();
}

private class Connect implements Runnable {

public void run() {

try {
server = new ServerSocket(port);
System.out.println("Server running");
while (true) {
socket = server.accept();
Thread clientThread = new Thread( new TalkToClient( socket ) );
clientThread.start();
System.out.println("someone connected");
}
} catch (IOException ex) {
Logger.getLogger(RunServer.class.getName()).log(Level.SEVERE, null, ex);
}
try {
server.close();
} catch( Exception e ) {}
}
}

private class TalkToClient implements Runnable{

private Socket socket;
public TalkToClient( Socket socket ) {
this.socket = socket;
}

public void run() {

String clientMsg;
try {
dis = new DataInputStream(socket.getInputStream());
while ((clientMsg = dis.readUTF()) != null) {
if (clientMsg.length() > 0) {

}
}
} catch (Exception e) {
System.out.println(e);
}

}

}

public static void main(String[] args) {
new RunServer(4444);
}

}


XML layout

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bakgrund"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="@string/ip"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/white" />

<EditText
android:id="@+id/ip_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/textView1"
android:background="@color/white"
android:ems="10"
android:hint="@string/get_ip"
android:inputType="numberDecimal" >

<requestFocus />
</EditText>

<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/ip_id"
android:text="@string/port"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/white" />

<EditText
android:id="@+id/port_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/textView2"
android:background="@color/white"
android:ems="10"
android:hint="@string/get_port"
android:inputType="number" />

<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/port_id"
android:layout_below="@+id/port_id"
android:text="@string/message"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/white" />

<EditText
android:id="@+id/message_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/textView3"
android:background="@color/white"
android:ems="10"
android:hint="@string/get_message" />

<Button
android:id="@+id/connect"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/message_id"
android:text="@string/connect"
android:textColor="@color/white"
android:onClick="startClient" />

<Button
android:id="@+id/send"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/connect"
android:layout_alignBottom="@+id/connect"
android:layout_toRightOf="@+id/connect"
android:text="@string/send"
android:textColor="@color/white" />

<TextView
android:id="@+id/status_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/connect"
android:layout_below="@+id/send"
android:layout_marginTop="23dp"
android:text="@string/status"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/white" />

<EditText
android:id="@+id/messages"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/status_id"
android:background="@color/white"
android:ems="10"
android:inputType="textMultiLine" />

</RelativeLayout>

Answer

public void startClient(View v) .. this will be the signature of the method

UPDATE:

as everybody is posting the same answer I think I better improve my answer a bit. Although the single line has solved your problem If you get free time you can see the following links .. There you can find clear concept about different ways to handle click events

http://www.remwebdevelopment.com/dev/a69/Different-Ways-To-Handle-Clicks.html

http://smartcloudblog.blogspot.com/2011/09/android-onclicklisteners-vs.html