2017-01-05 9 views
0

私の学習Androidスレッドの一部として、私は以下のコードを実行しました。メッセージがアンドロイドのスレッドに送信されない

package simple.learning.com.samplethread; 

import android.os.Handler; 
import android.os.Looper; 
import android.os.Message; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 


public class MainActivity extends AppCompatActivity { 

    MyThread myThread; 
    Button button; 

    private static class MyThread extends Thread { 
     public Handler mHandler; 

     public void run() { 
      Log.d ("TESTME", " iNSIDE RUN.."); 
      Looper.prepare(); 
      mHandler = new Handler() { 

       public void HandleMessage (Message msg) { 
        Log.d("TESTME", "iNSIDE HandleMessage"); 
        if (msg.what == 0) { 
         someWork(); 
        } 
       } 
      }; 

      Looper.loop(); 

     } 

     public void someWork() 
     { 
      while (true) { 
       Log.d("TESTME", "Inside someWork "); 
      } 
     } 

    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     myThread = new MyThread(); 
     myThread.start(); 


     Button btn = (Button) findViewById(R.id.button1); 
     assert btn != null; 
     btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (myThread.mHandler != null) { 
        Log.d("TESTME", " bUTTON pRESSED.."); 
        Message msg = myThread.mHandler.obtainMessage(0); 
        myThread.mHandler.sendMessage(msg); 
       } 

      } 
     }); 
    } 
} 

ボタンをクリックすると、msgがメッセージキューに投稿されることが期待されます。しかし、私は出力が表示されません。どんな助けもありがとう。

+0

最後に表示されたログは何ですか? –

答えて

1

あなたはいくつかのメソッドを追加した実際のものを上書きするのではなく、handleMessageをオーバーライドする際に小さな間違いをしました。以下は実際の解決策です:

private static class MyThread extends Thread { 
    public Handler mHandler; 

    public void run() { 
     Log.d("TESTME", " iNSIDE RUN.."); 
     Looper.prepare(); 
     mHandler = new Handler() { 

      @Override 
      public void handleMessage(Message msg) { 
       Log.d("TESTME", "iNSIDE HandleMessage"); 
       if (msg.what == 0) { 
        someWork(); 
       } 
      } 
     }; 

     Looper.loop(); 

    } 

    public void someWork() { 
     while (true) { 
      Log.d("TESTME", "Inside someWork "); 
     } 
    } 

} 
+0

ああ..あなたは@override私は右を逃した意味ですか? – DrunkenMaster

+0

また、メソッドに間違った名前を付けました。 –

関連する問題