android - 空指针异常按钮setOnClickListener(new OnClickListener()

标签 android android-listview

在列表行中显示按钮,并希望允许用户使用该按钮将列表项添加到购物车,但是每当我加载列表时出现错误,不幸的是,应用程序已停止,如果我未在代码中使用按钮则不会出现任何错误。

所以这是我的问题,当我尝试使用button时,我的代码有什么问题?

这是我正在得到错误的行:

    mImgAddCart.setOnClickListener(new OnClickListener() {


Logcat:

07-01 05:57:03.733: E/AndroidRuntime(779): FATAL EXCEPTION: main
07-01 05:57:03.733: E/AndroidRuntime(779): java.lang.NullPointerException
07-01 05:57:03.733: E/AndroidRuntime(779):  at com.example.sample.ItemsActivity$MyAsyncTask.onPostExecute(ItemsActivity.java:191)
07-01 05:57:03.733: E/AndroidRuntime(779):  at com.example.sample.ItemsActivity$MyAsyncTask.onPostExecute(ItemsActivity.java:1)
07-01 05:57:03.733: E/AndroidRuntime(779):  at android.os.AsyncTask.finish(AsyncTask.java:631)
07-01 05:57:03.733: E/AndroidRuntime(779):  at android.os.AsyncTask.access$600(AsyncTask.java:177)
07-01 05:57:03.733: E/AndroidRuntime(779):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
07-01 05:57:03.733: E/AndroidRuntime(779):  at android.os.Handler.dispatchMessage(Handler.java:99)
07-01 05:57:03.733: E/AndroidRuntime(779):  at android.os.Looper.loop(Looper.java:137)
07-01 05:57:03.733: E/AndroidRuntime(779):  at android.app.ActivityThread.main(ActivityThread.java:5041)
07-01 05:57:03.733: E/AndroidRuntime(779):  at java.lang.reflect.Method.invokeNative(Native Method)
07-01 05:57:03.733: E/AndroidRuntime(779):  at java.lang.reflect.Method.invoke(Method.java:511)
07-01 05:57:03.733: E/AndroidRuntime(779):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
07-01 05:57:03.733: E/AndroidRuntime(779):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
07-01 05:57:03.733: E/AndroidRuntime(779):  at dalvik.system.NativeStart.main(Native Method)
07-01 05:57:07.172: E/Trace(806): error opening trace file: No such file or directory (2)


LazyAdapter.java:

     public class LazyAdapter extends BaseAdapter {

    private Activity activity;
    private ArrayList<HashMap<String, String>> data;
    private static LayoutInflater inflater=null;
    public ImageLoader imageLoader; 
    String itemTitle, itemCost;

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

    public int getCount() {
        return data.size();
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View vi=convertView;
        if(convertView==null)
            vi = inflater.inflate(R.layout.listrow_items, null);

        final TextView title = (TextView)vi.findViewById(R.id.title); 
        final TextView cost = (TextView)vi.findViewById(R.id.cost); 
        ImageView thumb_image = (ImageView) vi.findViewById(R.id.list_image);


        HashMap<String, String> item = new HashMap<String, String>();
        item = data.get(position);

        // Setting all values in listview
        title.setText(item.get(ItemsActivity.KEY_TITLE));
        cost.setText(item.get(ItemsActivity.KEY_COST));
        imageLoader.DisplayImage(item.get(com.example.sample.ItemsActivity.KEY_THUMB_URL), thumb_image);

        //Button mImgAddCart
        Button mImgAddCart = (Button) vi.findViewById(R.id.btn_add_to_order);
            mImgAddCart.setOnClickListener(new OnClickListener() {

                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    itemTitle = title.getText().toString();
                    itemCost = cost.getText().toString();                  

                    if (Constants.sItem_Detail.size() <= 0) {
                        HashMap<String, String> sTempObj = new HashMap<String, String>();
                        sTempObj.put(KEY_TITLE, itemTitle);
                        sTempObj.put(KEY_COST, itemCost);
                        Constants.sItem_Detail.add(sTempObj);               
                        }                   

                    AlertDialog.Builder alertdialog = new AlertDialog.Builder(
                            ItemsActivity.this);
                    alertdialog.setTitle(getResources()
                            .getString(R.string.app_name));
                    alertdialog.setMessage("Item Added to Cart");

                    alertdialog.setPositiveButton("OK",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int which) 
                                {
                                    activity.finish();
                                }
                            });     
                    alertdialog.show();             
                }
            });

        return vi;
    }
}


线:

sTempObj.put(KEY_TITLE, itemTitle);


获得:

KEY_TITLE cannot be resolved to a variable


线:

AlertDialog.Builder alertdialog = new AlertDialog.Builder(ItemsActivity.this);


获得:

No enclosing instance of the type ItemsActivity is accessible in scope


线:

alertdialog.setTitle(getResources().getString(R.string.app_name));


获得:

The method getResources() is undefined for the type new View.OnClickListener(){}

最佳答案

您的LazyAdapter类代码应如下所示:

public class LazyAdapter extends BaseAdapter {

    private Activity activity;
    private ArrayList<HashMap<String, String>> data;
    private static LayoutInflater inflater=null;
    public ImageLoader imageLoader; 
    String itemTitle, itemCost;
    TextView title, cost;

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

    public int getCount() {
        return data.size();
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View vi=convertView;
        if(convertView==null)
            vi = inflater.inflate(R.layout.listrow_items, null);

        title = (TextView)vi.findViewById(R.id.title); 
        cost = (TextView)vi.findViewById(R.id.cost); 
        ImageView thumb_image = (ImageView) vi.findViewById(R.id.list_image);


        HashMap<String, String> item = new HashMap<String, String>();
        item = data.get(position);

        // Setting all values in listview
        title.setText(item.get(ItemsActivity.KEY_TITLE));
        cost.setText(item.get(ItemsActivity.KEY_COST));
        imageLoader.DisplayImage(item.get(com.example.sample.ItemsActivity.KEY_THUMB_URL), thumb_image);

        //Button mImgAddCart
        Button mImgAddCart = (Button) vi.findViewById(R.id.btn_add_to_order);
            mImgAddCart.setOnClickListener(new OnClickListener() {

                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    itemTitle = title.getText().toString();
                    itemCost = cost.getText().toString();                  

                    if (Constants.sItem_Detail.size() <= 0) {
                        HashMap<String, String> sTempObj = new HashMap<String, String>();
                        sTempObj.put(com.example.sample.ItemsActivity.KEY_TITLE, itemTitle);
                        sTempObj.put(com.example.sample.ItemsActivity.KEY_COST, itemCost);
                        Constants.sItem_Detail.add(sTempObj);               
                        }                  

        return vi;
    }
}

关于android - 空指针异常按钮setOnClickListener(new OnClickListener(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17398379/

相关文章:

android - 为什么我无法通过 Android ICS 中的 FileReader 正确读取/proc/net/xt_qtaguid/stats

android - 获取自定义Listview Android中的总行数

Android ListView选择动画

android - React Native, Native Android Module 在 View 中添加 TextView

java - 不适用于参数

android - 如何通过获取它的位置从 SDCard 中删除音频文件

android - 是否可以在 xml 中设置 listView maxHeight?

android - 从 fragment 类主 Activity 调用自定义 ListView 适配器

android - 设置与 System.currentTimeMillis() 的时间差

android - 后台粘性并发标记清除 GC 已释放