2016-07-19 5 views
-1

처리기가 작동하는 방법을 알기 위해 예제를 만들려고합니다. 코드 belwo에서 볼 수 있듯이, 나는 끊임없이 실행되고 변수 i를 증가시키는 workerThread를 만들었습니다. run() 메서드 내에서 Handler 클래스의 본문에 표시된대로 증가 된 변수의 값을 TextView에 전달하려고합니다.sendMessage()가 정의되지 않았습니다.

이 문제는 라인이있는 "handler.sendMessage (m)"나에게이 문제

를 해결하는 방법을 알려 주시기 바랍니다 빨간색

으로 표시됩니다 "새로운 핸들러()"하고있다,

입니다 MainActivity

public class MainActivity extends AppCompatActivity { 

private final static String TAG = MainActivity.class.getClass().getSimpleName(); 
private TextView mtvIncr = null; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    this.mtvIncr = (TextView) findViewById(R.id.tvValue); 
    new WorkerThread().start(); 
} 

Handler handler =new Handler() {//ERROR 
    @Override 
    public void handleMessage(Message msg) { 
     int sentInt = msg.getData().getInt("what"); 
     mtvIncr.setText("r:"+Integer.toString(sentInt)); 
    } 
}; 

class WorkerThread extends Thread { 

    private int i = 0; 
    android.os.Handler mHandler = null; 

    @Override 
    public void run() { 
     super.run(); 

     Looper.prepare(); 

     while(true) { 
      Log.d(TAG, SubTag.bullet("WorkerThread", "i: " + (i++))); 
      SystemClock.sleep(1000); 

      Message m = new Message(); 
      Bundle b = new Bundle(); 
      b.putInt("what", i); // for example 
      m.setData(b); 
      handler.sendMessage(m);//ERROR 
     } 
    } 
} 
} 
+1

가능한 복제 (HTTP : // 유래 .com/questions/36215126/myhandler-obtainmessage-is-not-in-service-in-class-in-android) –

+0

나는 또한 같은 질문이라고 믿는다. – W0rmH0le

답변

0

사용 Message.obtain()는 메시지 객체를 얻을 수

,

Message 생성자가 public 인 경우 중 하나를 가져 오는 가장 좋은 방법은 Message.obtain() 또는 Handler.obtainMessage() 메서드 중 하나를 호출하여 재활용 객체 풀에서 가져 오는 것입니다 .

그리고 obj 속성 msg.obj = b;

OBJ를 사용 수신자에게 전송하는 임의의 객체.

정보에서 :

https://developer.android.com/reference/android/os/Message.html

예 :

Handler handler =new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     int sentInt = ((Bundle)msg.obj).getInt("what"); 
     mtvIncr.setText("r:"+Integer.toString(sentInt)); 
    } 
}; 


class WorkerThread extends Thread { 

    private int i = 0; 
    android.os.Handler mHandler = null; 

    @Override 
    public void run() { 
     super.run(); 

     Looper.prepare(); 

     while(true) { 
      Log.d(TAG, SubTag.bullet("WorkerThread", "i: " + (i++))); 
      SystemClock.sleep(1000); 

      Message msg = Message.obtain(); 
      Bundle b = new Bundle(); 
      b.putInt("what", i); // for example 
      msg.obj = b; 
      handler.sendMessage(msg); 
     } 
    } 
} 
[myHandler.obtainMessage()가 안드로이드에서 서비스 클래스에서 허용되지 않습니다]의
관련 문제