Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
listview上的Android异步任务_Android_Android Asynctask_Listadapter - Fatal编程技术网

listview上的Android异步任务

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

因此,在onPostExecute方法期间填充listActivity时出现问题。 SingleData的结果列表是正确的。。。然后我使用自定义适配器绑定到android.R.id.list

但它给了我错误。。。我真的不明白为什么。。。 下面是适配器的代码..:

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;
}