run method onclick crash in android

不打扰是莪最后的温柔 提交于 2020-01-15 11:15:23

问题


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>

回答1:


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




回答2:


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.




回答3:


Change this:

public void startClient() {

with:

public void startClient(View view) {

The methon onClick take a parameter, the View.




回答4:


Change public void startClient() to public void startClient(View v).



来源:https://stackoverflow.com/questions/15339399/run-method-onclick-crash-in-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!