android doinbackground toast,无法在未调用Looper.prepare()的线程内创建处理程序

最好的选择是使用RxAndroid(用于特异性结合RxJava)用于P在MVP给负责FO数据。

首先Observable从现有方法返回。private Observable getObservableItems() {

return Observable.create(subscriber -> {

for (PojoObject pojoObject: pojoObjects) {

subscriber.onNext(pojoObject);

}

subscriber.onCompleted();

});}

像这样使用这个Observable -getObservableItems().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer () {

@Override

public void onCompleted() {

// Print Toast on completion

}

@Override

public void onError(Throwable e) {}

@Override

public void onNext(PojoObject pojoObject) {

// Show Progress

}});}

-------------------------------------------------- -------------------------------------------------- ------------------------------

我知道我有点晚了但是这里去了。Android基本上适用于两种线程类型,即UI线程和后台线程。根据android文档 -不要从UI线程外部访问Android UI工具包来解决此问题,Android提供了几种从其他线程访问UI线程的方法。以下列出了可以提供帮助的方法:Activity.runOnUiThread(Runnable)  View.post(Runnable)  View.postDelayed(Runnable, long)

现在有各种方法可以解决这个问题。

我将通过代码示例解释它:

runOnUiThreadnew Thread(){

public void run()

{

myactivity.this.runOnUiThread(new Runnable()

{

public void run()

{

//Do your UI operations like dialog opening or Toast here

}

});

}}.start();

LOOPER用于为线程运行消息循环的类。默认情况下,线程没有与之关联的消息循环; 创建一个,在运行循环的线程中调用prepare(),然后循环()让它处理消息,直到循环停止。class LooperThread extends Thread {

public Handler mHandler;

public void run() {

Looper.prepare();

mHandler = new Handler() {

public void handleMessage(Message msg) {

// process incoming messages here

}

};

Looper.loop();

}}

的AsyncTaskAsyncTask允许您在用户界面上执行异步工作。它在工作线程中执行阻塞操作,然后在UI线程上发布结果,而不需要您自己处理线程和/或处理程序。public void onClick(View v) {

new CustomTask().execute((Void[])null);}private class CustomTask extends AsyncTask {

protected Void doInBackground(Void... param) {

//Do some work

return null;

}

protected void onPostExecute(Void param) {

//Print Toast or open dialog

}}

处理器Handler允许您发送和处理与线程的MessageQueue关联的Message和Runnable对象。Message msg = new Message();new Thread(){

public void run()

{

msg.arg1=1;

handler.sendMessage(msg);

}}.start();Handler handler = new Handler(new Handler.Callback() {

@Override

public boolean handleMessage(Message msg) {

if(msg.arg1==1)

{

//Print Toast or open dialog

}

return false;

}});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值