Android 自定义的handler handleMessage方法不调用

自己写的一个类继承自handler。

想的是从服务器读一张图片,然后用Bitmap存一下,通过handler传给主线程来显示图片

 private static class LoadHandler extends Handler {
        WeakReference reference;
        public static final int LOAD_PIC = 1;

        public LoadHandler(WeakReference<articleDetail> reference) {
            this.reference = reference;
        }

        @Override
        public void handleMessage(@NonNull Message msg) {//方法没有调用
            articleDetail ad = (articleDetail) reference.get();
            switch (msg.what) {
                case LOAD_PIC:
                    ad.down_bitmap = (Bitmap) msg.obj;
                    Log.d("loadPIC","load over");
                    break;
            }
        }
    }

在activity中声明变量  这个activity运行在主线程中·

这一个activity是从上一个activity跳转过来的

public class articleDetail extends AppCompatActivity {
    private TextView author, time;
    private ImageButton back;
    private CircledownloadProgressBar bar;
    private HyperTextView rtext_view;
    private Bitmap down_bitmap;
    private Article article;
    private LoadHandler mhandler = new LoadHandler(new WeakReference<>(articleDetail.this));

发送Message是在从网上下载图片的一个方法里

  private void Down_pic(String path) {

        new Thread(new Runnable() {

            @Override
            public void run() {
                OkHttpClient okHttpClient = new OkHttpClient();
                RequestBody body = new FormBody.Builder()
                        .add("type", ServiceType.down_pic)
                        .add("path", path)
                        .build();
                Request request = new Request.Builder()
                        .url(getString(R.string.down_fileAdress))
                        .post(body)
                        .build();
                okHttpClient.newCall(request).enqueue(new Callback() {
                    @Override
                    public void onFailure(@NonNull Call call, @NonNull IOException e) {

                    }

                    @Override
                    public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
                        InputStream inputStream = response.body().byteStream();
                        Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
                        Message msg = Message.obtain();
                        msg.obj = bitmap;
                        msg.what = LoadHandler.LOAD_PIC;
                        Boolean is = mhandler.sendMessage(msg);
                        Log.d("sendMsg", is.toString());
                    }
                });
            }
        }).start();

    }

handleMessage方法不执行

sendMessage返回的值是true

打断点debug也进不去handleMessage方法  

求大佬帮忙看看  非常感谢!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,针对你的问题,我可以给出一些参考。在Android开发中,Handler是一个常用的类,用于在多线程环境下进行消息传递和处理。在创建一个Handler实例时,需要传入一个Looper对象,该对象负责管理消息队列并将消息分发给对应的Handler进行处理。 以下是一个示例代码,展示如何自定义Handler并传入Looper对象进行实例化: ```java public class MyHandler extends Handler { public MyHandler(Looper looper) { super(looper); } @Override public void handleMessage(Message msg) { // 处理消息 } } ``` 在上述代码中,我们创建了一个名为`MyHandler`的自定义Handler类,并在其构造函数中传入了一个Looper对象。在`handleMessage`方法中,我们可以对收到的消息进行处理。 在实际使用时,我们可以在主线程中创建一个Handler实例,并将其关联到主线程的Looper对象上,以便在主线程中处理消息。示例代码如下: ```java public class MainActivity extends AppCompatActivity { private MyHandler mHandler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 获取主线程的Looper对象 Looper looper = Looper.getMainLooper(); // 创建Handler实例,并关联到主线程的Looper对象上 mHandler = new MyHandler(looper); } } ``` 在上述代码中,我们获取了主线程的Looper对象,并将其传入自定义Handler类中进行实例化。这样,我们就可以在主线程中使用该Handler实例来处理消息了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值