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 作業を維持し、非 UI スレッドで非 UI 作業を維持することを常にお勧めしますが、それは HoneyComb Android バージョンの登場により法律になりました。

3. UI スレッドと非 UI スレッドの同期に使用できます。Thread with a Handler

4.痛みのない スレッディングAsyncTaskとして知られているこの機能は、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 に答える