我正在编写一个应用程序,允许我通过单击按钮通过TCP / IP发送命令。但是,当我单击模拟器中的按钮时,它会返回一条消息,指出按钮已停止工作。我想知道是否有人能在我的代码中发现错误。
CODE:
package button.test;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
public class ButtonActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void onClick(View view) throws UnknownHostException, IOException
{
Socket socket = new Socket("192.168.2.92", 60128);
try{
dataOutputStream.Object BUFFER = null;
write(BUFFER);
String buffer="ISCP000000100000000701000000!1PWR010D";
OutputStream os=socket.getOutputStream();
os.write(buffer.getBytes());
} catch(IOException e)
{
//error code
}
}
private void write(Object BUFFER) {
// TODO Auto-generated method stub
}
}
答案 0 :(得分:1)
1。您错过了声明按钮并初始化...
<强>例如强>
public class ButtonActivity extends Activity {
Button mbutt;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mbutt = (Button)findViewById(R.id.Button_Click);
}
- 请注意您必须仅在setContentView()之后初始化视图,否则您的视图无法获取ID 并且会使您的应用崩溃。
2。始终建议保持UI在UI线程上工作,非UI工作在非UI线程上,但成为法律随着HoneyComb android版本的到来。
3。您可以使用Thread with a Handler
来同步用户界面和非用户界面线程。
4。 AsyncTask
这就是所谓的无痛线程,特别是在Android中为此引入。
有关线程,处理程序和AsyncTask的教程,请参阅此链接:
http://www.vogella.com/articles/AndroidPerformance/article.html
答案 1 :(得分:0)
看起来套接字连接工作需要很长时间。建议将此功能放在AsyncTask中。
答案 2 :(得分:0)
您尚未在onCreate()
答案 3 :(得分:0)
如果要为xml充气,则无需声明按钮。 您的问题是您在主线程上运行网络连接,这是自api 11以来不允许的。使用asynctask或线程。
e.g。
new Thread() {
public void run() {
Socket socket = new Socket("192.168.2.92", 60128);
try{
dataOutputStream.Object BUFFER = null;
write(BUFFER);
String buffer="ISCP000000100000000701000000!1PWR010D";
OutputStream os=socket.getOutputStream();
os.write(buffer.getBytes());
} catch(IOException e)
{
//error code
}
}
}.start();