是什么导致此按钮崩溃?

时间:2012-07-28 11:04:42

标签: java android

我正在编写一个应用程序,允许我通过单击按钮通过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

    }
}

4 个答案:

答案 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();