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>
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
When you define the click method of a button in XML, the button itself is passed as a parameter to the method.
You have a startClient()
method, but Android is looking for a startClient(View v)
method. Change your method to match this signature and it will work.
将public void startClient()
更改为public void startClient(View v)
。
Change this:
public void startClient() {
with:
public void startClient(View view) {
The methon onClick take a parameter, the View.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.