2017-08-22 1 views
-1

Ich habe einen recyclerviewholder, der edittext Felder enthält.NullPointerException beim Aufrufen der SQLite-Update-Methode in TextChangedListener. Android

In den Edittext-Feldern versuche ich, einen bestimmten SQLite-Wert mithilfe von TextChangedListener zu aktualisieren, sodass SQLite-Werte automatisch aktualisiert werden, ohne eine Schaltfläche zu drücken. Aber es wirft eine Nullpointer

Mein OnCreateView

SQLiteCBLCAdapter sqliteCBLCAdapter; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    view = inflater.inflate(R.layout.fragment_tab_cart, container, false); 
    ButterKnife.setDebug(true); 
    ButterKnife.bind(this, view); 
    sqliteCBLCAdapter = new SQLiteCBLCAdapter(getContext()); 

    return view; 
} 

Das ist mein onTextChangedListener Methode

@Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     try { 
      if (!s.equals("")) { 
       String newQuantity = s.toString(); 
       sqliteCBLCAdapter.updateQuantity(orderName, newQuantity); 

      } else { 
       // irrelevant to the question 
      } 
     } catch (NumberFormatException e) { 
      holder.tv_currentPrice_atc.setText("0"); 
     } 
    } 

Und das ist mein updateQuantity Methode.

public void updateQuantity(String orderName, String newQuantity) { 
     SQLiteDatabase sqLiteDatabase = sqLiteCBLC.getWritableDatabase(); 
     String updateQuery = "UPDATE "+SQLiteCBLC.TABLE_NAME+" SET "+SQLiteCBLC.COL_QUANTITY+" = "+newQuantity+" WHERE "+SQLiteCBLC.COL_ORDNAME+" = '"+orderName+"'"; 
     sqLiteDatabase.execSQL(updateQuery); 
    } 

Dies ist meine Protokolle

java.lang.NullPointerException: Attempt to invoke virtual method 'void com.steven.frio.systemanalysisanddesign.sqlite.SQLiteCBLCAdapter.updateQuantity(java.lang.String, java.lang.String)' on a null object reference 
                         at com.steven.frio.systemanalysisanddesign.FragmentTabCart$2.onTextChanged(FragmentTabCart.java:204) 
                         at android.widget.TextView.sendOnTextChanged(TextView.java:8189) 
                         at android.widget.TextView.setText(TextView.java:4485) 
                         at android.widget.TextView.setText(TextView.java:4339) 
                         at android.widget.EditText.setText(EditText.java:89) 
                         at android.widget.TextView.setText(TextView.java:4314) 
                         at com.steven.frio.systemanalysisanddesign.FragmentTabCart$1.addButtonClick(FragmentTabCart.java:138) 
                         at com.steven.frio.systemanalysisanddesign.recycleradapters.RAdapterAddToCart$1.onClick(RAdapterAddToCart.java:80) 
                         at android.view.View.performClick(View.java:5620) 
                         at android.view.View$PerformClick.run(View.java:22300) 
                         at android.os.Handler.handleCallback(Handler.java:754) 
                         at android.os.Handler.dispatchMessage(Handler.java:95) 
                         at android.os.Looper.loop(Looper.java:160) 
                         at android.app.ActivityThread.main(ActivityThread.java:6237) 
                         at java.lang.reflect.Method.invoke(Native Method) 
                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:877) 
                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 

Wenn sqliteCBLCAdapter innerhalb des textchangedlistener/Mutter Methode des Zuhörers initialisiert es diese Ausnahme wirft

Process: com.steven.frio.systemanalysisanddesign, PID: 22921 
                        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.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223) 
                         at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163) 
                         at com.steven.frio.systemanalysisanddesign.sqlite.SQLiteCBLCAdapter$SQLiteCBLC.<init>(SQLiteCBLCAdapter.java:115) 
                         at com.steven.frio.systemanalysisanddesign.sqlite.SQLiteCBLCAdapter.<init>(SQLiteCBLCAdapter.java:21) 
                         at com.steven.frio.systemanalysisanddesign.FragmentTabCart.editTextWatchers(FragmentTabCart.java:189) 
                         at com.steven.frio.systemanalysisanddesign.recycleradapters.RAdapterAddToCart.onBindViewHolder(RAdapterAddToCart.java:75) 
                         at com.steven.frio.systemanalysisanddesign.recycleradapters.RAdapterAddToCart.onBindViewHolder(RAdapterAddToCart.java:30) 
                         at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6356) 
+0

'sqliteCBLCAdapter' ist nicht initialisiert. – SripadRaj

+0

möglicherweise orderName oder newQuantity Nullwert übergeben .. bitte anfügen Debug oder Drucken Protokoll und prüfen, welchen Wert zu aktualisieren –

+0

@GunduBandagar Ich erstellte ein Protokoll, das den Wert drucken wird, erfasst es den Wert aber wenn die Methode sqliteCBLCAdapter.updateQuantity (orderName, newQuantity); wird aufgerufen werden es wirft Nullzeiger Ausnahme, obwohl es richtig instanziiert ist – StevenF

Antwort

0

Stellen Sie sicher, Ihre Datenbank korrekt initialisiert wird.

SQLiteCBLCAdapter sqliteCBLCAdapter = new SQLiteCBLCAdapter (context); 
+0

Sie müssen getActivity() anstelle von Kontext verwenden –

+0

hat nicht funktioniert. :( – StevenF

+0

sqliteCBLCAdapter = new SQLiteCBLCAdapter (getContext()); diese Zeile obere als Ansicht bewegen = ...;?. –

Verwandte Themen