0

そのため、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;         
    }

}

onPostExecute は次のとおりです。

private class DownloadTheImages extends AsyncTask<Void, Void, List<SingleData>> {

    private Context _ctx;

    public DownloadTheImages(Context ctx) {
        _ctx = ctx;
    }

     protected void onPostExecute(List<SingleData> result) {             

         ListView mainLV = (ListView)findViewById(android.R.id.list);
         mainLV.setAdapter(new RequestAdapter(_ctx, R.layout.single_row, result));

     }

    protected List<SingleData> doInBackground(Void... params) {
              ..... 
             ....
              }
       }

およびLOGCAT:

10-20 15:02:55.166: E/AndroidRuntime(761): FATAL EXCEPTION: main
10-20 15:02:55.166: E/AndroidRuntime(761): java.lang.NullPointerException
10-20 15:02:55.166: E/AndroidRuntime(761):  at com.mimiedesign.dingle.PictureStreamViewer$DownloadTheImages.onPostExecute(PictureStreamViewer.java:103)
10-20 15:02:55.166: E/AndroidRuntime(761):  at com.mimiedesign.dingle.PictureStreamViewer$DownloadTheImages.onPostExecute(PictureStreamViewer.java:1)
10-20 15:02:55.166: E/AndroidRuntime(761):  at android.os.AsyncTask.finish(AsyncTask.java:417)
10-20 15:02:55.166: E/AndroidRuntime(761):  at android.os.AsyncTask.access$300(AsyncTask.java:127)
10-20 15:02:55.166: E/AndroidRuntime(761):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)

手がかりはありますか?... ありがとう..

これらは新しいエラーです:

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)
4

2 に答える 2

0

これらの行がこの問題の原因です。

     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() に移動し、Adapter をインスタンス化する前に結果を初期化します。次に、onPostExecute で「結果」ArrayList に値を追加し、adapter.notifyDatasetChanged() を呼び出します。onPostExecute() または onProgressUpdate() でビューを見つけないようにします。

于 2012-10-20T15:24:10.727 に答える
0

onPostExecute が機能することを理解する方法は、doInBackground() から渡された結果オブジェクトを受け取ることです。したがって、その結果を doinbackground に返してから RequestAdapter に渡す場合を除き、NullPointer を取得します。結果メンバーをどこで初期化していますか? OnCreateで?

 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;
}
于 2012-10-20T15:24:16.683 に答える