2017-03-20 3 views
-2

Wenn ich Daten in SQLite-Datenbank in der Logcat einfügen, wird der Null-Objekt-Verweis aufgefordert. Aber mit dem gleichen Code, den ich in einem anderen Programm verwende, kann es funktionieren. Kann ich einen Vorschlag haben, um diese Frage zu lösen?Android Null Objektreferenz beim Einfügen von Daten in SQLite-Datenbank

das ist mein dBCONTROL

public void addProduct(Product product) { 
    SQLiteDatabase db=this.getWritableDatabase(); 
    ContentValues cv=new ContentValues(); 

    cv.put(Code,product.getProductCode()); 
    cv.put(Description,product.getProductName()); 
    cv.put(MenuDepartment,product.getMenuDepartment()); 
    cv.put(CondimentGroup,product.getCondimentGroup1()); 
    cv.put(ModifierGroup,product.getModifierGroup1()); 
    //inserting row 
    db.insert(mproduct, null, cv); 
    //close the database to avoid any leak 
    db.close(); 
} 

dies ist, wie ich Daten einfügen, wenn die Schaltfläche klicken.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.layout_printer_test_demo); 
    innitView(); 

} 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.layout_printer_test_demo); 
    innitView(); 

} 


private void innitView() { 


    new BitmapUtils(this); 
    b_table = (Button) findViewById(R.id.b_table); 
    b_additem = (Button)findViewById(R.id.additem); 
    findViewById(R.id.additem).setOnClickListener(this); 
    findViewById(R.id.b_exit).setOnClickListener(this); 
    b_additem.setOnClickListener(this); 
    b_table.setOnClickListener(this); 

    info = (TextView) findViewById(R.id.info); 

    callback = new ICallback.Stub() { 

     @Override 
     public void onRunResult(final boolean success) throws RemoteException { 
     } 

     @Override 
     public void onReturnString(final String value) throws RemoteException { 
      Log.i(TAG,"printlength:" + value + "\n"); 
     } 

     @Override 
     public void onRaiseException(int code, final String msg) throws RemoteException { 
      Log.i(TAG,"onRaiseException: " + msg); 
      runOnUiThread(new Runnable(){ 
       @Override 
       public void run() { 
        info.append("onRaiseException = " + msg + "\n"); 
       }}); 

     } 
    }; 

    setButtonEnable(false); 

    Intent intent=new Intent(); 
    intent.setPackage("woyou.aidlservice.jiuiv5"); 
    intent.setAction("woyou.aidlservice.jiuiv5.IWoyouService"); 
    startService(intent); 
    bindService(intent, connService, Context.BIND_AUTO_CREATE); 
} 

private void setButtonEnable(boolean flag){ 


    b_table.setEnabled(flag); 
    b_additem.setEnabled(flag); 

} 


@Override 
public void onClick(View v) { 
     switch (v.getId()) { 

     case R.id.b_table: 
      //打印表格 
      printTable(); 
      break; 
     case R.id.additem: 
       additem(); 
      break; 

     } 
} 

public void additem(){ 
     try { 

        DBControl db = new DBControl(context);<------the logcat show the error at here 
        db.addProduct(new Product("10001", "Nasi Lemak", "A", "C1", "M1")); 
        db.addProduct(new Product("10002", "STEAM LOTUS LEAF GLUTINOUS RICE", "A", "C1", "M1")); 
        db.addProduct(new Product("10003", "EIGHT TREASURE GLUTINOUS RICE", "B", "C2", "M2")); 
        db.addProduct(new Product("10004", "CHICKEN PORRIDGE & DRIED SCALLOP", "B", "C2", "M2")); 
        db.addProduct(new Product("10005", "FISH PORRIDGE", "C", "C3", "M3")); 
        db.addProduct(new Product("10006", "LAKSA", "C", "C3", "M3")); 
      }catch(SQLiteException e){ 
         e.printStackTrace(); 
      } 
} 

logcat

java.lang.NullPointerException: Attempt to invoke virtual method 'void com.test.printertestdemo.DBControl.addProduct(com.test.printertestdemo.Constructor.Product)' on a null object reference 
        at com.test.printertestdemo.PrinterTestDemoAct.additem(PrinterTestDemoAct.java:181) 
        at com.test.printertestdemo.PrinterTestDemoAct.onClick(PrinterTestDemoAct.java:173) 
        at android.view.View.performClick(View.java:4848) 
        at android.view.View$PerformClick.run(View.java:20262) 
        at android.os.Handler.handleCallback(Handler.java:815) 
        at android.os.Handler.dispatchMessage(Handler.java:104) 
        at android.os.Looper.loop(Looper.java:194) 
        at android.app.ActivityThread.main(ActivityThread.java:5637) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:372) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
+0

Sind Sie sicher, dass dies der Code ist, den Sie tatsächlich ausführen? Protokollieren Sie den Wert von "db" nach dem Aufruf von "new DBControl". –

+0

@ CL.yes dieser Code tatsächlich funktioniert, wenn ich den Code debuggen ich bekomme DBControl ist null –

+0

'DBControl db = neue DBControl (Kontext);' Ganz offensichtlich haben Sie keinen gültigen Kontext hier. –

Antwort

0

auf auf erstellen, die auf Aufruf der Methode Artikel Pass Kontext

addItem(context); 

in Ihrer Methode hinzufügen Parameter Context Kontext

Context context = getContext(); 

definieren; dann wird es funktionieren.

Wenn das nicht funktioniert, dann

verwenden
Activity context = getActivity(); 

in ersten Schritt. Hoffnung Es hilft.

Verwandte Themen