运行方法onclick崩溃在android [英] run method onclick crash in android
问题描述
我目前正在编写一个简单的在Android上的消息应用程序。我有一个类中的服务器 runServer
,运行完美。然后我在我的 mainActivity
中的一个方法中有一个客户端。我有一个按钮
,它有一个 onclick =startClient
。但每当我运行点击按钮
,我得到一个错误。
03-11 13:01:40.622:E / AndroidRuntime(718):java.lang.IllegalStateException:
找不到方法startClient(View)在活动类com.example.datorkomprojekt.MainActivity
on onClick处理程序在视图类android.widget.Button与id'connect'
我可以如何解决这个问题?
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){
}
线程线程= new Thread();
thread.start();
}
}
服务器类
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){}
}
}
私人类TalkToClient实现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 );
}
}
XML布局
< 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 = 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 v)
..这将是方法的签名
UPDATE:
因为每个人都发布相同的答案,我想我更好地提高我的答案有点。虽然单行解决了你的问题如果你有空闲的时间,你可以看到以下链接..在那里你可以找到清楚的概念,不同的方式来处理点击事件
< a href =http://www.remwebdevelopment.com/dev/a69/Different-Ways-To-Handle-Clicks.html =nofollow> http://www.remwebdevelopment.com/dev/a69/ Different-Ways-To-Handle-Clicks.html
http://smartcloudblog.blogspot.com/2011/09/android-onclicklisteners-vs.html
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 mymainActivity
. I have abutton
, which has anonclick="startClient"
. but whenever i run an click on thebutton
, 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 methodUPDATE:
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
这篇关于运行方法onclick崩溃在android的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!