0

我正在编写一个应用程序,允许我通过单击按钮通过 TCP/IP 发送命令。但是,当我单击模拟器中的按钮时,它会返回一条消息,说明该按钮已停止工作。我想知道是否有人能在我的代码中发现错误。

代码:

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

4 回答 4

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 线程上,而 Non-UI 工作在 Non-UI 线程上,但随着 HoneyComb android 版本的到来,这成为了一种规律。

3.您可以使用Thread with a Handler 同步UI和非UI线程。

4. AsyncTask所谓的Painless Threading是在android 中专门为此引入的。

有关线程、处理程序和 AsyncTask的教程,请参阅此链接:

http://www.vogella.com/articles/AndroidPerformance/article.html

于 2012-07-28T11:14:19.237 回答
0

看起来套接字连接工作需要很长时间。建议将此功能放在 AsyncTask 中。

于 2012-07-28T11:07:56.103 回答
0

你还没有声明你的按钮onCreate()

于 2012-07-28T11:08:13.903 回答
0

如果您正在膨胀 xml,则无需声明按钮。您的问题是您在主线程上运行网络连接,这是自 api 11 以来不允许的。为此使用 asynctask 或线程。

例如

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();
于 2012-07-28T11:18:16.583 回答