1

これは、イメージビューに触れるたびに私のコードです。アプリは約5秒待ってからクラッシュします

私はインターネットの許可を持っています

サーバー側には、GETを読み取ってデータベースに挿入するphpページがあります

public class Home extends Activity {
ImageView lightbut;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);
    ImageView lightbut = (ImageView) findViewById(R.id.light);
    lightbut.setClickable(true); 
    lightbut.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.d("== My activity ===","OnClick is called");
         // Creating HTTP client
            HttpClient httpClient = new DefaultHttpClient();

            // Creating HTTP Post
            HttpGet httpPost = new HttpGet("http://192.168.0.102/HR/index.php?command=ligthsoff");
            try {
                HttpResponse response = httpClient.execute(httpPost);


            } catch (ClientProtocolException e) {
                // writing exception to log
                e.printStackTrace();

            } catch (IOException e) {
                // writing exception to log
                e.printStackTrace();
            }
        }
    });
}
4

1 に答える 1

3

logcat は非常に役立ちますが、おそらくUI. すべてのネットワーク コードThreadAsyncTask. これにより、バックグラウンドでネットワーク処理を簡単にUI実行し、必要に応じて で実行される関数を更新できますUI

AsyncTask ドキュメント

基本的な構造を示す回答を次に示します。基本的に、などから を呼び出してAsyncTaskから、タスクが最初に開始されたときに呼び出されるネットワーク操作を実行し、他の方法で を更新できます。UIonClick()doInBackground()UI

私が参照した例を使用すると、ネットワーク内のすべてのように見えるすべてのネットワークのものを、リンクの例onClick()のメソッド内に配置するだけです。doInBackground()次に、あなたonClick()は次のようなことをします

lightbut.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
       TalkToServer task = new TalkToServer(); // could pass params to constructor here but might not be needed in this situation
       task.execute();  // could pass in params for `doInBackground()` such as url, etc... but again maybe not needed for this situation 
}
于 2013-08-22T18:45:43.300 に答える