【问题标题】:sendMessage() is not definedsendMessage() 未定义
【发布时间】:2016-07-19 13:05:29
【问题描述】:

我正在尝试创建一个示例来了解处理程序是如何工作的。如下面的代码所示,我创建了一个永远运行的 workerThread 并递增变量 i。内 run() 方法,我想将递增变量的值传递给 TextView,如 Handler 类的主体所示。

问题是,有“new Handler()”和“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
        }
    }
}
}

【问题讨论】:

标签: android handler android-handler


【解决方案1】:

使用Message.obtain()获取Message对象

虽然 Message 的构造函数是公开的,但获得其中之一的最佳方法 这些是调用 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);
        }
    }
}

【讨论】:

    猜你喜欢
    • 2020-04-11
    • 2013-02-09
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    相关资源
    最近更新 更多