listView加载图像时的Android错误



i有从服务器中的加载图像作为图标列表的列表适配器。我想我的适配器没有关键问题,但是即使我已经编辑了代码,我仍然会出错。我使用Asynctask类从服务器加载数据。这里我的适配器代码:

    public class ListAdapterImage extends BaseAdapter{
    private Activity activity;
    private Runnable runnable;
    private ArrayList<HashMap<String, String>> data;
    private static LayoutInflater inflater=null;
    public ImageLoader imageLoader;
    public ListAdapterImage (Activity a, ArrayList<HashMap<String, String>> data) {
        activity = a;
        this.data=data;
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        imageLoader=new ImageLoader(activity.getApplicationContext());
    }
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return data.size();
    }
    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return data.get(position);
    }
    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }
    @Override
    public View getView(int position, View v, ViewGroup parent) {
         View vi=v;
            if(v==null)
                vi = inflater.inflate(R.layout.list_row, null);
            TextView Pk_Merchant_ID = (TextView) vi.findViewById(R.id.tv_id);
            TextView Descriptions = (TextView) vi.findViewById(R.id.tv_groupname);
            TextView Address = (TextView) vi.findViewById(R.id.tv_merchantname);
            ImageView imgythumb = (ImageView) vi.findViewById(R.id.list_images);
            HashMap<String, String> datas = new HashMap<String, String>();
                datas = data.get(position);
            Pk_Merchant_ID.setText(datas.get("Pk_Merchant_ID"));
            Descriptions.setText(datas.get("Descriptions"));
            Address.setText(datas.get("Address"));
            imageLoader.DisplayImage(datas.get("Path_PhotoProfile"), imgythumb);
        return vi;
    }
}

在我的logcat中,有些错误:

11-10 22:52:02.732: E/AndroidRuntime(26274): FATAL EXCEPTION: main
11-10 22:52:02.732: E/AndroidRuntime(26274): java.lang.NullPointerException
11-10 22:52:02.732: E/AndroidRuntime(26274):    at com.example.adapter.ListAdapterImage.<init>(ListAdapterImage.java:30)
11-10 22:52:02.732: E/AndroidRuntime(26274):    at com.example.main.ResultRestoActivity$LoadData$1.run(ResultRestoActivity.java:271)
11-10 22:52:02.732: E/AndroidRuntime(26274):    at android.app.Activity.runOnUiThread(Activity.java:3743)
11-10 22:52:02.732: E/AndroidRuntime(26274):    at com.example.main.ResultRestoActivity$LoadData.onPostExecute(ResultRestoActivity.java:258)
11-10 22:52:02.732: E/AndroidRuntime(26274):    at com.example.main.ResultRestoActivity$LoadData.onPostExecute(ResultRestoActivity.java:1)
11-10 22:52:02.732: E/AndroidRuntime(26274):    at android.os.AsyncTask.finish(AsyncTask.java:417)
11-10 22:52:02.732: E/AndroidRuntime(26274):    at android.os.AsyncTask.access$300(AsyncTask.java:127)
11-10 22:52:02.732: E/AndroidRuntime(26274):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
11-10 22:52:02.732: E/AndroidRuntime(26274):    at android.os.Handler.dispatchMessage(Handler.java:99)
11-10 22:52:02.732: E/AndroidRuntime(26274):    at android.os.Looper.loop(Looper.java:130)
11-10 22:52:02.732: E/AndroidRuntime(26274):    at android.app.ActivityThread.main(ActivityThread.java:3691)
11-10 22:52:02.732: E/AndroidRuntime(26274):    at java.lang.reflect.Method.invokeNative(Native Method)
11-10 22:52:02.732: E/AndroidRuntime(26274):    at java.lang.reflect.Method.invoke(Method.java:507)
11-10 22:52:02.732: E/AndroidRuntime(26274):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
11-10 22:52:02.732: E/AndroidRuntime(26274):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
11-10 22:52:02.732: E/AndroidRuntime(26274):    at dalvik.system.NativeStart.main(Native Method)

在我的活动中,我在onPostExecute中设置了适配器:

    @Override
    protected void onPostExecute(String s) {
        pDialog.dismiss();
        runOnUiThread(new Runnable() {
            @Override
            public void run() {  
                adapter = new ListAdapterImage(null, listData);
                lv.setAdapter(adapter);
            }
        });
    }

需要您所有的帮助和评论。感谢您的进步。

您在这里经过null ..

adapter = new ListAdapterImage(null, listData);

,然后在此代码中

public ListAdapterImage (Activity a, ArrayList<HashMap<String, String>> data) {
    activity = a;
    this.data=data;
    //Problem
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    imageLoader=new ImageLoader(activity.getApplicationContext());
}

通过adapter = new ListAdapterImage(yourActivityName.this, listData);

最新更新