listview上的Android异步任务
因此,在onPostExecute方法期间填充listActivity时出现问题。 SingleData的结果列表是正确的。。。然后我使用自定义适配器绑定到android.R.id.list 但它给了我错误。。。我真的不明白为什么。。。 下面是适配器的代码..:listview上的Android异步任务,android,android-asynctask,listadapter,Android,Android Asynctask,Listadapter,因此,在onPostExecute方法期间填充listActivity时出现问题。 SingleData的结果列表是正确的。。。然后我使用自定义适配器绑定到android.R.id.list 但它给了我错误。。。我真的不明白为什么。。。 下面是适配器的代码..: private class RequestAdapter extends ArrayAdapter<SingleData> { private int _resource; private LayoutIn
private class RequestAdapter extends ArrayAdapter<SingleData> {
private int _resource;
private LayoutInflater _inflater;
private Context _context;
public RequestAdapter(Context context, int textViewResourceId,
List<SingleData> objects) {
super(context, textViewResourceId, objects);
_resource = textViewResourceId;
_context = context;
_inflater = LayoutInflater.from(_context);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = (ListView)_inflater.inflate(_resource,null);
SingleData sdd = getItem(position);
ImageView iv = (ImageView)convertView.findViewById(R.id.imagePlaceHolder_IV);
iv.setImageBitmap(sdd.thumbIMG);
TextView tv = (TextView)convertView.findViewById(R.id.createdAt_TV);
tv.setText(sdd.timeStamp);
// TODO Auto-generated method stub
return convertView;
}
}
有线索吗?。。。谢谢
以下是较新的错误:
10-20 16:32:56.615: E/AndroidRuntime(1487): at android.widget.AbsListView.obtainView(AbsListView.java:1430)
10-20 16:32:56.615: E/AndroidRuntime(1487): at android.widget.ListView.makeAndAddView(ListView.java:1745)
10-20 16:32:56.615: E/AndroidRuntime(1487): at android.widget.ListView.fillDown(ListView.java:670)
10-20 16:32:56.615: E/AndroidRuntime(1487): at android.widget.ListView.fillFromTop(ListView.java:727)
10-20 16:32:56.615: E/AndroidRuntime(1487): at android.widget.ListView.layoutChildren(ListView.java:1598)
10-20 16:32:56.615: E/AndroidRuntime(1487): at android.widget.AbsListView.onLayout(AbsListView.java:1260)
10-20 16:32:56.615: E/AndroidRuntime(1487): at android.view.View.layout(View.java:7175)
10-20 16:32:56.615: E/AndroidRuntime(1487): at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
10-20 16:32:56.615: E/AndroidRuntime(1487): at android.view.View.layout(View.java:7175)
10-20 16:32:56.615: E/AndroidRuntime(1487): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254)
10-20 16:32:56.615: E/AndroidRuntime(1487): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130)
10-20 16:32:56.615: E/AndroidRuntime(1487): at android.widget.LinearLayout.onLayout(LinearLayout.java:1047)
10-20 16:32:56.615: E/AndroidRuntime(1487): at android.view.View.layout(View.java:7175)
10-20 16:32:56.615: E/AndroidRuntime(1487): at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
10-20 16:32:56.615: E/AndroidRuntime(1487): at android.view.View.layout(View.java:7175)
10-20 16:32:56.615: E/AndroidRuntime(1487): at android.view.ViewRoot.performTraversals(ViewRoot.java:1140)
10-20 16:32:56.615: E/AndroidRuntime(1487): at android.view.ViewRoot.handleMessage(ViewRoot.java:1859)
这些线路导致了此问题
RequestAdapter adapter; // This will be member variable
ListView mainLV = (ListView)findViewById(android.R.id.list);
mainLV.setAdapter(new RequestAdapter(_ctx, R.layout.single_row, result));
在onCreate()中移动这些行并在实例化适配器之前初始化结果,然后在onPostExecute中向'result'ArrayList添加值并调用Adapter.notifyDatasetChanged()。避免在onPostExecute()或onProgressUpdate()中查找视图。我理解onPostExecute工作的方式是它接受从doInBackground()传入的结果对象。因此,除非您在doinbackground中返回该结果,然后以这种方式将其传递给RequestAdapter,否则您将获得null指针。您在哪里初始化结果成员?在一次创建中
protected List<SingleData> doInBackground(Void... reuslt) {
.....
....
///Do some stuff
return result;
}
}
private class DownloadTheImages extends AsyncTask<Void, Void, List<SingleData>> {
private Context _ctx;
public DownloadTheImages(Context ctx) {
_ctx = ctx;
}
protectedlist doInBackground(Void…reuslt){
.....
....
///做点什么
返回结果;
}
}
私有类下载图像扩展异步任务{
私有上下文;
公众下载图片(上下文ctx){
_ctx=ctx;
}
我在DoinBackground的末尾传递了一个返回列表。在调试部分,断点在调用onPostExecute内部的适配器之前给了我21个正确的objct,因此列表被正确地传递给了onPostExecute…我想..哦,好吧,我有点困惑,因为我没有看到你的DoinBackground的代码。正如下面的人所说的我会膨胀我的listview,在onCreate而不是onPostExec中实例化和设置我的适配器…你为什么这样做呢?但是现在按照这些建议,我一开始活动就出现了错误10-20 15:48:04.885:E/AndroidRuntime(997):java.lang.RuntimeException:无法启动活动组件信息{com.mimiedesign.dingle/com.mimiedesign.dingle.PictureStreamViewer}:java.lang.NullPointerException 10-20 15:48:04.885:E/AndroidRuntime(997):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)10-20 15:48:04.885:E/AndroidRuntime(997):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)10-20 15:48:04.885:E/AndroidRuntime(997):在android.app.ActivityThread.access$1500(ActivityThread.java:117)ListView mainLV=(ListView)findViewById(android.R.id.list);listOfRequests=newArrayList();adapter=newRequestAdapter(_context,R.layout.single_行,listOfRequests);mainlev.setAdapter(adapter);新下载图片(_context.execute());现在它给了我一个错误,在开始的setAdapter方法上…我猜这是因为在适配器的getView中没有检查doing getItem所依据的obecjt是否为null或空…有什么建议如何检查吗?在设置适配器之前,您需要初始化结果ArrayList,您正在这样做吗?listOfRequests=new ArrayList();这是在getView()中出现异常之前做出的。谢谢你,骗子。问题是listAcivity类不需要对列表的引用,它只需要一个SetListAdapter(如果你不使用自定义列表),但我不知道…当然,它仍然不起作用…但出于其他原因,我正在制作…我现在将发布它。。。
RequestAdapter adapter; // This will be member variable
ListView mainLV = (ListView)findViewById(android.R.id.list);
mainLV.setAdapter(new RequestAdapter(_ctx, R.layout.single_row, result));
protected List<SingleData> doInBackground(Void... reuslt) {
.....
....
///Do some stuff
return result;
}
}
private class DownloadTheImages extends AsyncTask<Void, Void, List<SingleData>> {
private Context _ctx;
public DownloadTheImages(Context ctx) {
_ctx = ctx;
}