2016-04-03 268 views
-2

我正在实施一个电子商务应用程序,其中我试图使用sqlite将选定的项目添加到购物车(这里是我的数据库)。我收到空指针异常。当我点击添加到购物车按钮时,我的应用程序崩溃。Android应用程序崩溃:SQLite空指针异常

这里是我的logcat

04-04 00:52:22.626 17150-17150/com.example.rahul.smartshopping E/AndroidRuntime: FATAL EXCEPTION: main 
                      Process: com.example.rahul.smartshopping, PID: 17150 
                      java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase$CursorFactory, android.database.DatabaseErrorHandler)' on a null object reference 
                       at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:269) 
                       at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223) 
                       at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:187) 
                       at com.example.rahul.smartshopping.helper.DatabaseHandler.getQuantity(DatabaseHandler.java:168) 
                       at com.example.rahul.smartshopping.fragments.SearchResultsAdapter$MyPersonalClickListener.onClick(SearchFragment.java:455) 
                       at android.view.View.performClick(View.java:5205) 
                       at android.view.View$PerformClick.run(View.java:21162) 
                       at android.os.Handler.handleCallback(Handler.java:739) 
                       at android.os.Handler.dispatchMessage(Handler.java:95) 
                       at android.os.Looper.loop(Looper.java:148) 
                       at android.app.ActivityThread.main(ActivityThread.java:5422) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

这里是我的数据库处理程序:

package com.example.rahul.smartshopping.helper; 

public class DatabaseHandler extends SQLiteOpenHelper { 

// All Static variables 
// Database Version 
private static final int DATABASE_VERSION = 1; 

// Database Name 
private static final String DATABASE_NAME = "mart"; 

// Cart table name 
private static final String TABLE_CART = "cart"; 

// Cart Table Columns names 
private static final String PRODUCT_ID = "product_id"; 
private static final String PRODUCT_NAME = "product_name"; 
private static final String PRODUCT_CATEGORY_ID = "category_id"; 
private static final String PRODUCT_PRICE = "product_price"; 
private static final String PRODUCT_QUANTITY = "product_quantity"; 
private static final String PRODUCT_WEIGHT = "product_weight"; 
private static final String PRODUCT_TOTAL_PRICE = "product_total_price"; 

public DatabaseHandler(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 

// Creating Tables 
@Override 
public void onCreate(SQLiteDatabase db) { 
    String CREATE_CART_TABLE = "CREATE TABLE " + TABLE_CART + "(" 
      + PRODUCT_ID + " LONG PRIMARY KEY," + PRODUCT_NAME + " TEXT," + PRODUCT_CATEGORY_ID + " INTEGER," 
      + PRODUCT_PRICE + " DOUBLE," + PRODUCT_QUANTITY + " INTEGER, " + PRODUCT_WEIGHT + "DOUBLE, " + PRODUCT_TOTAL_PRICE + "DOUBLE " + ")"; 
    db.execSQL(CREATE_CART_TABLE); 
} 

// Upgrading database 
@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    // Drop older table if existed 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_CART); 

    // Create tables again 
    onCreate(db); 
} 

/** 
* All CRUD(Create, Read, Update, Delete) Operations 
*/ 

// Adding new contact 
public void addProduct(CartConfig cart) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(PRODUCT_ID, cart.getProductID()); // Product Id 
    values.put(PRODUCT_NAME, cart.getProductName()); // Product Name 
    values.put(PRODUCT_CATEGORY_ID, cart.getProductCategoryID()); 
    values.put(PRODUCT_PRICE, cart.getProductPrice()); 
    values.put(PRODUCT_QUANTITY, cart.getProductQuantity()); 
    values.put(PRODUCT_WEIGHT, cart.getProductWeight()); 
    values.put(PRODUCT_TOTAL_PRICE, cart.getProductTotalPrice()); 

    // Inserting Row 
    db.insert(TABLE_CART, null, values); 
    db.close(); // Closing database connection 
} 

// Getting single product 
CartConfig getProduct(long id) { 
    SQLiteDatabase db = this.getReadableDatabase(); 

    Cursor cursor = db.query(TABLE_CART, new String[] { PRODUCT_ID, 
        PRODUCT_NAME, PRODUCT_CATEGORY_ID, PRODUCT_PRICE, PRODUCT_QUANTITY, PRODUCT_WEIGHT, PRODUCT_TOTAL_PRICE }, PRODUCT_ID + "=?", 
      new String[] { String.valueOf(id) }, null, null, null, null); 
    if (cursor != null) 
     cursor.moveToFirst(); 

    CartConfig cart = new CartConfig(Long.parseLong(cursor.getString(0)), cursor.getString(1), 
      Integer.parseInt(cursor.getString(2)), Double.parseDouble(cursor.getString(3)), Integer.parseInt(cursor.getString(4)), 
      Double.parseDouble(cursor.getString(5)), Double.parseDouble(cursor.getString(6))); 
    // return contact 
    return cart; 
} 

// Getting All Products 
public List<CartConfig> getAllProducts() { 
    List<CartConfig> productList = new ArrayList<CartConfig>(); 
    // Select All Query 
    String selectQuery = "SELECT * FROM " + TABLE_CART; 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    // looping through all rows and adding to list 
    if (cursor.moveToFirst()) { 
     do { 
      CartConfig cart = new CartConfig(); 
      cart.setProductID(Long.parseLong(cursor.getString(0))); 
      cart.setProductName(cursor.getString(1)); 
      cart.setProductCategoryID(Integer.parseInt(cursor.getString(2))); 
      cart.setProductPrice(Double.parseDouble(cursor.getString(3))); 
      cart.setProductQuantity(Integer.parseInt(cursor.getString(4))); 
      cart.setProductWeight(Double.parseDouble(cursor.getString(5))); 
      cart.setProductTotalPrice(Double.parseDouble(cursor.getString(6))); 
      // Adding product to list 
      productList.add(cart); 
     } while (cursor.moveToNext()); 
    } 

    // return product list 
    return productList; 
} 

// Updating single Product 
public int updateProduct(CartConfig cart) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(PRODUCT_ID, cart.getProductID()); // Product Id 
    values.put(PRODUCT_NAME, cart.getProductName()); // Product Name 
    values.put(PRODUCT_CATEGORY_ID, cart.getProductCategoryID()); 
    values.put(PRODUCT_PRICE, cart.getProductPrice()); 
    values.put(PRODUCT_QUANTITY, cart.getProductQuantity()); 
    values.put(PRODUCT_WEIGHT, cart.getProductWeight()); 
    values.put(PRODUCT_TOTAL_PRICE, cart.getProductTotalPrice()); 

    // updating row 
    return db.update(TABLE_CART, values, PRODUCT_ID + " = ?", 
      new String[] { String.valueOf(cart.getProductID()) }); 
} 

// Deleting single product 
public void deleteProduct(CartConfig cart) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    db.delete(TABLE_CART, PRODUCT_ID + " = ?", 
      new String[]{String.valueOf(cart.getProductID())}); 
    db.close(); 
} 


// Getting Products Count 
public int getProductsCount() { 
    String countQuery = "SELECT * FROM " + TABLE_CART; 
    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = db.rawQuery(countQuery, null); 
    cursor.close(); 

    // return count 
    return cursor.getCount(); 
} 

public Cursor getQuantity(long id) { 
    SQLiteDatabase db = this.getReadableDatabase(); 
    String quantity = "SELECT " + PRODUCT_QUANTITY +"FROM " + TABLE_CART + " WHERE " + PRODUCT_ID +" = " + id; 
    Cursor c = db.rawQuery(quantity, null); 
    db.close(); 
    return c; 
} 

public void updateQuantity(int tempQty, Double price, Double tempValue, long id) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    String update = "UPDATE " + TABLE_CART + "SET " + tempQty+1 + "," + PRODUCT_TOTAL_PRICE + " = " + price + tempValue + 
      "WHERE " + PRODUCT_ID + " = " + id; 
} 

}

这里是我的搜索Fragment.java类

package com.example.rahul.smartshopping.fragments; 

public class SearchFragment extends Fragment { 

View myFragmentView; 
SearchView search; 
ImageButton buttonBarcode; 
ImageButton buttonAudio; 
Typeface type; 
ListView searchResults; 
String found = "N"; 

//This arraylist will have data as pulled from server. This will keep cumulating. 
ArrayList<Product> productResults = new ArrayList<Product>(); 
//Based on the search string, only filtered products will be moved here from productResults 
ArrayList<Product> filteredProductResults = new ArrayList<Product>(); 

public SearchFragment() { 
    // Required empty public constructor 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Context context = getActivity(); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    //get the context of the HomeScreen Activity 
    final WelcomeActivity activity = (WelcomeActivity) getActivity(); 

    //define a typeface for formatting text fields and listview. 

    type = Typeface.createFromAsset(activity.getAssets(), "fonts/book.ttf"); 
    myFragmentView = inflater.inflate(R.layout.fragment_search, container, false); 

    search = (SearchView) myFragmentView.findViewById(R.id.searchView1); 
    search.setQueryHint("Start typing to search..."); 

    searchResults = (ListView) myFragmentView.findViewById(R.id.listview_search); 
    buttonBarcode = (ImageButton) myFragmentView.findViewById(R.id.imageButton2); 
    buttonAudio = (ImageButton) myFragmentView.findViewById(R.id.imageButton1); 

    //this part of the code is to handle the situation when user enters any search criteria, how should the 
    //application behave? 

    buttonBarcode.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View v) 
     { 
      startActivityForResult(new Intent(activity, Barcode.class),1); 
     } 
    }); 

    buttonAudio.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View v) 
     { 
      Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
      // Specify free form input 
      intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, 
        RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
      intent.putExtra(RecognizerIntent.EXTRA_PROMPT,"Please start speaking"); 
      intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1); 
      intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.ENGLISH); 
      startActivityForResult(intent, 2); 
     } 
    }); 


    //this part of the code is to handle the situation when user enters any search criteria, how should the 
    //application behave? 

    search.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() { 

     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      // TODO Auto-generated method stub 

      //Toast.makeText(activity, String.valueOf(hasFocus),Toast.LENGTH_SHORT).show(); 
     } 
    }); 

    search.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 

     @Override 
     public boolean onQueryTextSubmit(String query) { 
      // TODO Auto-generated method stub 

      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String newText) { 

      if (newText.length() > 3) { 

       searchResults.setVisibility(myFragmentView.VISIBLE); 
       myAsyncTask m = (myAsyncTask) new myAsyncTask().execute(newText); 
      } else { 

       searchResults.setVisibility(myFragmentView.INVISIBLE); 
      } 


      return false; 
     } 

    }); 
    return myFragmentView; 
} 

//this captures the result from barcode and populates in the searchView. 
@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    //this requestCode is for handling the barcode activity. 
    if(requestCode==1) 
    { 
     String barcode=data.getStringExtra("BARCODE"); 
     if (barcode.equals("NULL")) 
     { 
      //that means barcode could not be identified or user pressed the back button 
      //do nothing 
     } 
     else 
     { 
      search.setQuery(barcode, true); 
      search.setIconifiedByDefault(false); 
     } 
    } 

    //this requestCode is for speechRecognizer. Only this part of the code needs to be added for 
    //the implementation of voice to text functionality. 

    if (requestCode == 2) { 
     ArrayList<String> results; 
     results = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); 
     //Toast.makeText(this, results.get(0), Toast.LENGTH_SHORT).show(); 

     //if the name has an ' then the SQL is failing. Hence replacing them. 
     String text = results.get(0).replace("'",""); 
     search.setQuery(text, true); 
     search.setIconifiedByDefault(false); 
    } 

} 

//this filters products from productResults and copies to filteredProductResults based on search text 

public void filterProductArray(String newText) { 

    String pName; 

    filteredProductResults.clear(); 
    for (int i = 0; i < productResults.size(); i++) { 
     pName = productResults.get(i).getProductName().toLowerCase(); 
     if (pName.contains(newText.toLowerCase()) || 
       productResults.get(i).getProductBarcode().contains(newText)) { 
      filteredProductResults.add(productResults.get(i)); 

     } 
    } 

} 

//in this myAsyncTask, we are fetching data from server for the search string entered by user. 
class myAsyncTask extends AsyncTask<String, Void, String> { 
    JSONParser jParser; 
    JSONArray productList; 
    String url = new String(); 
    String textSearch; 
    ProgressDialog pd; 


    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     productList = new JSONArray(); 
     jParser = new JSONParser(); 
     pd = new ProgressDialog(getActivity()); 
     pd.setCancelable(false); 
     pd.setMessage("Searching..."); 
     pd.getWindow().setGravity(Gravity.CENTER); 
     pd.show(); 
     Log.e("On PreExecute", "Hey"); 
    } 

    @Override 
    protected String doInBackground(String... sText) { 

     url = "http://192.168.0.5:8080/android/db_search_product.php?pname='" + sText[0] + "'"; 
     Log.e("URL", "" + url); 
     String returnResult = getProductList(url); 
     this.textSearch = sText[0]; 
     Log.e("Return result", "" + returnResult); 
     return returnResult; 

    } 

    public String getProductList(String url) { 

     Product tempProduct = new Product(); 
     String matchFound = "N"; 
     //productResults is an arraylist with all product details for the search criteria 
     //productResults.clear(); 
     Log.e("get Product details", "Hey"); 
     try { 
      Log.e("try block", ""); 
      JSONObject json = jParser.getJSONFromUrl(url); 
      Log.e("JSONObject", "" + json.toString()); 

      productList = json.getJSONArray("product"); 
      Log.e("productList", "" + productList.toString()); 

      //parse date for dateList 
      for (int i = 0; i < productList.length(); i++) { 
       tempProduct = new Product(); 

       JSONObject obj = productList.getJSONObject(i); 

       /*tempProduct.setProductCode(obj.getString("ProductCode")); 
       tempProduct.setProductName(obj.getString("ProductName")); 
       tempProduct.setProductGrammage(obj.getString("ProductGrammage")); 
       tempProduct.setProductBarcode(obj.getString("ProductBarcode")); 
       tempProduct.setProductDivision(obj.getString("ProductCatCode")); 
       tempProduct.setProductDepartment(obj.getString("ProductSubCode")); 
       tempProduct.setProductMRP(obj.getString("ProductMRP")); 
       tempProduct.setProductBBPrice(obj.getString("ProductBBPrice"));*/ 
       //my values 
       Log.e("Product id",""+obj.getString("product_id")); 
       Log.e("Category id",""+obj.getString("category_id")); 
       Log.e("Product name", ""+obj.getString("product_name")); 
       tempProduct.setProductID(obj.getString("product_id")); 
       tempProduct.setProductName(obj.getString("product_name")); 
       tempProduct.setCategoryID(obj.getString("category_id")); 
       tempProduct.setProductPrice(obj.getString("price")); 
       tempProduct.setProductWeight(obj.getString("weight")); 
       Log.e("Temp product", "" + tempProduct.toString()); 

       Log.e("PID", ""+tempProduct.getProductID()); 
       Log.e("CID", "" + tempProduct.getCategoryID()); 
       Log.e("PName", "" + tempProduct.getProductName()); 

       //check if this product is already there in productResults, if yes, then don't add it again. 
       matchFound = "N"; 

       for (int j = 0; j < productResults.size(); j++) { 

        if (productResults.get(j).getProductID().equals(tempProduct.getProductID())) { 
         matchFound = "Y"; 
        } 
       } 

       if (matchFound == "N") { 
        productResults.add(tempProduct); 
       } 

      } 

      return ("OK"); 

     } catch (Exception e) { 
      e.printStackTrace(); 
      Log.e("Exception", e.toString()); 
      return ("Exception Caught"); 
     } 
    } 

    @Override 
    protected void onPostExecute(String result) { 

     Log.e("On PostExecute", "Hey"); 

     super.onPostExecute(result); 

     if (result.equalsIgnoreCase("Exception Caught")) { 
      Toast.makeText(getActivity(), "Unable to connect to server,please try later", Toast.LENGTH_LONG).show(); 

      pd.dismiss(); 
     } else { 


      //calling this method to filter the search results from productResults and move them to 
      //filteredProductResults 
      filterProductArray(textSearch); 
      searchResults.setAdapter(new SearchResultsAdapter(getActivity(), filteredProductResults)); 
      pd.dismiss(); 
     } 
    } 

} 

}

class SearchResultsAdapter extends BaseAdapter { 
    private LayoutInflater layoutInflater; 

    private ArrayList<Product> productDetails = new ArrayList<Product>(); 
    int count; 
    Typeface type; 
    Context context; 

    //constructor method 
    public SearchResultsAdapter(Context context, ArrayList<Product> product_details) { 

     layoutInflater = LayoutInflater.from(context); 

     this.productDetails = product_details; 
     this.count = product_details.size(); 
     this.context = context; 
     type = Typeface.createFromAsset(context.getAssets(), "fonts/book.ttf"); 

    } 

    @Override 
    public int getCount() { 
     return count; 
    } 

    @Override 
    public Object getItem(int arg0) { 
     return productDetails.get(arg0); 
    } 

    @Override 
    public long getItemId(int arg0) { 
     return arg0; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     ViewHolder holder; 
     Product tempProduct = productDetails.get(position); 

     if (convertView == null) { 
      convertView = layoutInflater.inflate(R.layout.list_search, null); 
      holder = new ViewHolder(); 
      holder.product_name = (TextView) convertView.findViewById(R.id.product_name); 
      holder.product_mrp = (TextView) convertView.findViewById(R.id.product_mrp); 
      holder.product_mrpvalue = (TextView) convertView.findViewById(R.id.product_mrpvalue); 
      holder.product_weight = (TextView) convertView.findViewById(R.id.product_weight); 
      holder.product_weight_value = (TextView) convertView.findViewById(R.id.product_weight_value); 
      holder.product_category_id = (TextView) convertView.findViewById(R.id.product_category_id); 
      holder.getProduct_category_id_value = (TextView) convertView.findViewById(R.id.product_category_id_value); 
      holder.addToCart = (Button) convertView.findViewById(R.id.add_cart); 

      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 


     holder.product_name.setText(tempProduct.getProductName()); 
     holder.product_name.setTypeface(type); 

     holder.product_mrp.setTypeface(type); 

     holder.product_mrpvalue.setText(tempProduct.getProductPrice()); 
     holder.product_mrpvalue.setTypeface(type); 

     holder.product_weight.setTypeface(type); 

     holder.product_weight_value.setText(tempProduct.getProductWeight()); 
     holder.product_weight_value.setTypeface(type); 

     holder.product_category_id.setTypeface(type); 

     holder.getProduct_category_id_value.setText(tempProduct.getCategoryID()); 
     holder.getProduct_category_id_value.setTypeface(type); 

     holder.addToCart.setOnClickListener(new MyPersonalClickListener("button_addtocart", tempProduct, context)); 

     return convertView; 
    } 

这是一个定制的监听器

public class MyPersonalClickListener extends Activity implements View.OnClickListener 
    { 

     String button_name; 
     Product prod_name; 
     int tempQty; 
     double tempValue; 
     SQLiteDatabase sqLite; 
     DatabaseHandler db; 
     Context context; 

     //constructor method 
     public MyPersonalClickListener(String button_name, Product prod_name, Context context) 
     { 
      this.prod_name = prod_name; 
      this.button_name = button_name; 
      this.context = context; 
     } 

     @Override 
     public void onClick(View v) 
     { 

      // in this section, we are going to add items to cart 
      //if the item is already there in cart, then increase the quantity by 1, else add the item to cart 
      //if the quantity of the item has reached 10, then do nothing ---this is just a specific logic where 
      //i did not want any item with quantity more than 10, but if you choose not to, then just comment out 
      //the code. 
      //sqLite=context.openOrCreateDatabase("mart", context.MODE_PRIVATE, null); 
      db = new DatabaseHandler(this); 
      Log.e("ProductID", "" + prod_name.getProductID()); 

      //Cursor cc = sqLite.rawQuery("SELECT quantity FROM CART WHERE product_id ="+Long.parseLong(prod_name.getCategoryID()), null); 
      Cursor cc = db.getQuantity(Long.parseLong(prod_name.getCategoryID())); 

      if (cc.getCount()== 0) 
      { 
       //product not already there in cart..add to cart 
       /*sqLite.execSQL("INSERT INTO CART (product_id, category_id, product_name, quantity"+ 
         ", price, total_price, weight) VALUES("+ 
         prod_name.getProductID()+",'"+ prod_name.getCategoryID()+ "','" + 
         prod_name.getProductName()+"','"+ 1 +"',"+ 
         Integer.parseInt(prod_name.getProductPrice())+","+ Integer.parseInt(prod_name.getProductPrice())+","+ 
         Integer.parseInt(prod_name.getProductWeight())+")");*/ 
       db.addProduct(new CartConfig(Long.parseLong(prod_name.getProductID()), prod_name.getProductName(), 
         Integer.parseInt(prod_name.getCategoryID()), Double.parseDouble(prod_name.getProductPrice()), 
         1,Double.parseDouble(prod_name.getProductWeight()), 
         Double.parseDouble(prod_name.getProductValue()))); 

       Toast.makeText(context,"Item "+prod_name.getProductName()+" added to Cart", Toast.LENGTH_LONG).show(); 
      } 
      else 
      { 

       //product already there in cart 
       if(cc.moveToFirst()) 
       { 
        do{ 
         tempQty=cc.getInt(0); 
         tempValue = cc.getInt(1); 
        }while(cc.moveToNext()); 
       } 

       if (tempQty < 10) 
       { 
        /*sqLite.execSQL("UPDATE CART SET quantity = "+ (tempQty+1)+",total_price = "+ 
          (Integer.parseInt(prod_name.getProductPrice())+tempValue)+" WHERE product_id ="+ 
          prod_name.getProductID());*/ 
        db.updateQuantity(tempQty, Double.parseDouble(prod_name.getProductPrice()), tempValue, Long.parseLong(prod_name.getCategoryID())); 

        Toast.makeText(context,"Item "+prod_name.getProductName()+" added to Cart", Toast.LENGTH_LONG).show(); 
       } 
      } 

      sqLite.close(); 

     } 

    } 

    static class ViewHolder { 
     TextView product_name; 
     TextView product_mrp; 
     TextView product_mrpvalue; 
     //TextView product_bb; 
     //TextView product_bbvalue; 
     //TextView product_savings; 
     //TextView product_savingsvalue; 
     //TextView qty; 
     //TextView product_value; 
     TextView product_weight; 
     TextView product_weight_value; 
     TextView product_category_id; 
     TextView getProduct_category_id_value; 
     Button addToCart; 

    } 
} 
+0

您发布了太多的信息,而不是帮助我们来帮助您,让我们对错误的位置感到困惑....清理一下位置 –

+0

尝试'db = new DatabaseHandler(this,null.null, 1);'而不是'db = new DatabaseHandler(this);'in MyPersonalClickListener ** – MikeT

+0

不确定如何或为什么扩展一个简单的点击侦听器的Activity –

回答

3

这是你的问题:

new MyPersonalClickListener(...) 

class MyPersonalClickListener extends Activity 

您不能通过new实例化活动。他们没有正确设置,你不能使用这样的实例,你想要的东西Activity,比如用作Context

取下extends Activity并使用你已经传入context成员变量,你需要一个Context如传递给你的DatabaseHandler构造。