作者whow (somebody)
看板AndroidDev
标题[问题] facebook的request使用notify/wait取资料
时间Fri Oct 18 04:12:05 2013
((FaceBook SDK版本3.0
Facebook的request应该是用另外一个thread去执行的
所以无法在发出request的下一行直接使用回传的资料(会有NullException之类的
因此我想说使用notify()跟wait()的方法
在request发出後
main thread中先让要回传资料call wait()
notify则写在request的Oncomplete()
预期的效果应该是让main thread先用wait放到伫列
等到request完成後忽叫notify再回到main thread执行
这样才能後续将得到资料的list做成listview
但实际的状况是程式就卡住了 卡在wait()那里
观念上应该哪里有错 跪请各位指导了
附上程式码
friendslist = new ArrayList<FriendInfo>();
getfriendinfo(); //此函式包含facebook的request
synchronized(friendslist){
try {
friendslist.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void getfriendinfo() {
Bundle aa = new Bundle();
aa.putString("fields", "picture,id,name");
new RequestAsyncTask(new Request(session, "me/friends", aa
, HttpMethod.GET, new Request.Callback(){
@Override
public void onCompleted(Response response) {
/*
这部分是将从facebook取得的资料存到
friendslist 程式码略
*/
synchronized(friendslist){
friendslist.notify();
}
}
})).execute();
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.164.131.70
1F:→ hellogg1:就我理解 android由main thread负责管理画面 而您让listv 10/18 04:33
2F:→ hellogg1:iew进入wait那当然画面就当掉 10/18 04:33
所以main thread是不能够进入wait的吗?
我想说後来会call notify 应该会唤醒main thread
总的来说 我想找一个方法使我可以确定已经确定从facebook取得资料
这样才能在main thread改UI
不知道有没有其他机制可以做到这件事呢@@?
也有试过把wait另外开一个Thread 再用join去等她执行结束
但也是会当掉
以下程式码
Thread tt = new Thread(new Runnable(){
public void run(){
synchronized(friendslist){
try{
friendslist.wait();
}catch(InterruptException e){}
}
}
});
tt.start();
try{
tt.join();
}catch(InterruptException e){}
※ 编辑: whow 来自: 218.164.131.70 (10/18 05:02)
3F:→ popcorny:因为notify的地方应该也是在main thread,但是因为你的 10/18 09:03
4F:→ popcorny:wait卡住main thread了,其实不需要用wait/notify 10/18 09:03
5F:→ popcorny:而且一般UI程式设计,都会不希望main(UI) thread卡住的 10/18 09:04
6F:推 KeySabre:那个RequestAsyncTask继承AsyncTask不是吗? 10/18 13:10
7F:→ KeySabre:那就把你想给main thread做的事 放到onPostExecute 10/18 13:11
8F:→ whow:嗯我记得当初好像是因为一些原因所以没选择写在一起 10/18 20:29
9F:→ whow:我先搜寻一下原因 有问题再来回报 谢谢各位大大!! 10/18 20:30