/*
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,
现在的问题也是先执行了外部类的方法,
请问你现在解决了么
网络请求设置成同步的不就可以了