android子线程没有运行完,android假如主线程依赖子线程A的执行结果,如何让A执行完成,之后主线程再往下执行呢?...

本文探讨了在Android中如何使用Volley框架进行网络请求,并解决外部类先于内部类执行的问题。通过创建回调方法和使用Handler实现线程间的通信,确保在网络响应到达后才执行外部类的方法。同时,建议了解观察者模式和Handler机制以优化异步编程实践。
摘要由CSDN通过智能技术生成

/*

String ObjectResult="原先的结果";

//使用VOLLY框架(与问题无关)

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest (url, null , new Listener<JSONObject>(

) {

//匿名内部类中的方法

@Override

public void onResponse(JSONObject response) {

ObjectResult = response.toString();

Log.i("TAG", "内部类:"+ObjectResult);

}

});

queue.add(jsonObjectRequest);

Log.i("TAG","外部类:"+ObjectResult);

*/

这段程序中执行过程中,是先执行了”Log.i(“TAG”,”外部类:”+ObjectResult);”再执行了匿名内部类中的方法。现在我希望用子线程控制其先执行匿名内部类,之后再执行外部类的操作,具体的方法是什么?

谢谢了!

你内部类中的方法是要在获得reponse之后才能执行。要达成你的目的,必须自己实现一个回调方法。比如像这样,

@Override

public void onResponse(JSONObject response) {

ObjectResult = response.toString();

callback.dosomething(ObjectResult);//自己实现的回调方法

}

强烈建议你看下观察者模式。以我的看法,观察者模式的设计思路非常适合构造回调方法。至于具体的实现,你就要看一下ls的handler。

抛开你这段代码不看,单根据你的标题来回答:

android假如主线程依赖子线程A的执行结果,如何让A执行完成,之后主线程再往下执行呢?

需要在子线程执行完成的地方,通过主线程的Handler发送一条消息;主线程收到消息后执行:

public class MainActivity extends Activity {

private Handler uiHandler = new Handler(){

// 覆写这个方法,接收并处理消息。

@Override

public void handleMessage(Message msg) {

switch (msg.what){

case 1:

break;

}

}

};

class ChildThread extends Thread{

@Override

public void run() {

try{

// 子线程执行完毕的地方,利用主线程的handler发送消息

Message msg = new Message();

msg.what = 1;

uiHandler.sendMessage(msg);

}catch (InterruptedException e){

e.printStackTrace();

}

}

}

PS:主线程是UI线程,不要试图让UI线程等待某个结果,之后再往下执行,这会导致UI卡顿。

UI线程是一直循环的,我们需要通过消息机制通知UI线程去做一些事情。

更多的可以参考:

Android中Handler的使用

安利我的一篇笔记 : ) Android_Message_Handler_消息处理机制总结笔记

你好, 我现在也遇到了同样的,

我想要在外部类的方法中药一个返回值,内部类是网络请求获取的json,

现在的问题也是先执行了外部类的方法,

请问你现在解决了么

网络请求设置成同步的不就可以了

950-390_%E7%94%BB%E6%9D%BF-1.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值