Android 安卓可以';t在未调用Looper.loop的内部创建处理程序
我正在从facebook获取好友列表,并在列表视图中填充它工作正常,但现在我正在尝试添加进度条,直到列表视图填充,但出现异常我已尝试搜索,但未找到问题的解决方案,以下是我的代码:Android 安卓可以';t在未调用Looper.loop的内部创建处理程序,android,listview,progressdialog,Android,Listview,Progressdialog,我正在从facebook获取好友列表,并在列表视图中填充它工作正常,但现在我正在尝试添加进度条,直到列表视图填充,但出现异常我已尝试搜索,但未找到问题的解决方案,以下是我的代码: public class FriendsProgress extends AsyncTask<Object, Void, Boolean> { @Override protected Boolean doInBackground(Object... Params)
public class FriendsProgress extends AsyncTask<Object, Void, Boolean>
{
@Override
protected Boolean doInBackground(Object... Params)
{
try
{
getFriendList();
friendAdapter = new FriendAdapter(Friends.this, R.layout.activity_friends, friendsList);
Friends.this.runOnUiThread(new Runnable()
{
@Override
public void run()
{
list.setAdapter(friendAdapter);
//list.setOnItemClickListener(EditStaff.this);
}
});
}
catch (Exception e)
{
System.out.println("StaffProgess Exception Caught:"+e.getMessage());
}
return Boolean.TRUE;
}
@Override
protected void onPreExecute()
{
friendsProgress=new ProgressDialog(Friends.this);
friendsProgress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
friendsProgress.setIndeterminate(true);
friendsProgress.setMessage("Loading...");
friendsProgress.setOwnerActivity(Friends.this);
friendsProgress.show();
}
@Override
protected void onPostExecute(Boolean Result)
{
friendsProgress.dismiss();
friendAdapter.notifyDataSetChanged();
}
}
public class-FriendsProgress扩展异步任务
{
@凌驾
受保护的布尔doInBackground(对象…参数)
{
尝试
{
getFriendList();
friendAdapter=新的friendAdapter(Friends.this,R.layout.activity\u Friends,friendsList);
Friends.this.rununuithread(新Runnable()
{
@凌驾
公开募捐
{
list.setAdapter(friendAdapter);
//list.setOnItemClickListener(EditStaff.this);
}
});
}
捕获(例外e)
{
System.out.println(“捕获StaffProges异常:“+e.getMessage()”);
}
返回Boolean.TRUE;
}
@凌驾
受保护的void onPreExecute()
{
friendsProgress=新建进度对话框(Friends.this);
friendsProgress.setProgressStyle(ProgressDialog.STYLE_微调器);
friendsProgress.setUndeterminate(true);
setMessage(“正在加载…”);
friendsProgress.setOwnerActivity(Friends.this);
friendsProgress.show();
}
@凌驾
受保护的void onPostExecute(布尔结果)
{
friendsProgress.disclose();
friendAdapter.notifyDataSetChanged();
}
}
下面是getFriendsList函数的实现:
public void getFriendList(){
Request request = Request.newMyFriendsRequest(Session.getActiveSession(), new Request.GraphUserListCallback() {
@Override
public void onCompleted(List<GraphUser> users, Response response) {
// TODO Auto-generated method stub
for(int i=0; i<users.size();i++)
{
GraphUser user = users.get(i);
Friend objFriend = new Friend();
objFriend.setFriendID(user.getId());
objFriend.setFriendName(user.getName());
Drawable dd =Friends.LoadImageFromWebOperations("http://graph.facebook.com/" + objFriend.getFriendID() + "/picture");
objFriend.setFriendPic(dd);
//objFriend.setFriendPic("http://graph.facebook.com/" + objFriend.getFriendID() + "/picture");
friendsList.add(objFriend);
//friendAdapter.notifyDataSetChanged();
Log.d("Friend's Id", objFriend.getFriendID());
Log.d("Friend's Name", objFriend.getFriendName());
//Log.d("Friend's Pic", objFriend.getFriendPic());
Log.d("Friend's List Count", Integer.toString(friendsList.size()));
}
}
});
Request.executeBatchAsync(request);
public void getFriendList(){
Request Request=Request.newMyFriendsRequest(Session.getActiveSession(),new Request.GraphUserListCallback()){
@凌驾
未完成公共作废(列出用户、响应){
//TODO自动生成的方法存根
对于(int i=0;i您不应该实例化适配器
并将其链接到doInBackground()
方法中的列表视图
,因为它在工作线程上运行,并且不允许在工作线程上执行任何连接到Android视图的操作。相反,您可能希望移动此代码
friendAdapter = new FriendAdapter(Friends.this, R.layout.activity_friends, friendsList);
Friends.this.runOnUiThread(new Runnable()
{
@Override
public void run()
{
list.setAdapter(friendAdapter);
//list.setOnItemClickListener(EditStaff.this);
}
});
到onPostExecute()
方法。这肯定是一个设计更好的解决方案。希望这有帮助。试试这个
ProgressDialog dialog;
protected void onPreExecute()
{
dialog = new ProgressDialog(Friends.this);
dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
dialog.setMax(100);
dialog.show();
}
在onPostExecute()方法中运行Ui线程,如下所示:
runOnUiThread(new Runnable() {
@Override
public void run() {
friendAdapter = new FriendAdapter(Friends.this, R.layout.activity_friends, friendsList);
list.setAdapter(friendAdapter);
friendsProgress.dismiss();
friendAdapter.notifyDataSetChanged();
}
});
这个问题非常模糊;您遇到了什么样的异常?您试图解决什么问题?我们看这堵代码墙是不合理的;您需要缩小问题的范围。移动列表。setAdapter(friendAdapter);在onPostExecute中,并从doInBackground中删除runOnUiThread