Как вставить значение 1 в столбец в sq-lite через switch compact - PullRequest
0 голосов
/ 05 ноября 2019

Я хочу вставить значение 1 в столбец SQLite при нажатии кнопки switch compact в представлении карты внутри recyclerView ... но когда я нажал на switchCompact, получаю исключение NullPointeException. введите описание изображения здесь Заранее спасибо .. Я новичок в Android

orderListAdapter.java

    public void onBindViewHolder(@NonNull final orderListHolder holder, final int position) {
    final orderbook orderbook = orderbookList.get(position);
    holder.orderno.setText(orderbook.orderNo + " ");
    holder.customerName.setText(orderbook.customerName);
    holder.itemName.setText(orderbook.itemName);
    holder.workCompleteSwicth.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
            if(holder.workCompleteSwicth.isChecked()) {
                myDb.InsertWorkComplete(1);
            }


        }
    });

DatabaseHelper.java

public void InsertWorkComplete( int isWorkComplete)
{
    SQLiteDatabase db=this.getWritableDatabase();
   ContentValues contentValues=new ContentValues();


 contentValues.put(COLUMN_ISWORKCOMPLETE,isWorkComplete);

     db.update(TABLE_NAME, contentValues, null, null);



}

logcat: -

Process: com.example.android.saffrondesigner, PID: 5359
    java.lang.NullPointerException
        at com.example.android.saffrondesigner.orderListAdapter$1.onCheckedChanged(orderListAdapter.java:60)
        at android.widget.CompoundButton.setChecked(CompoundButton.java:127)
        at androidx.appcompat.widget.SwitchCompat.setChecked(SwitchCompat.java:1060)
        at androidx.appcompat.widget.SwitchCompat.toggle(SwitchCompat.java:1055)
        at android.widget.CompoundButton.performClick(CompoundButton.java:99)
        at android.view.View$PerformClick.run(View.java:18797)
        at android.os.Handler.handleCallback(Handler.java:808)
        at android.os.Handler.dispatchMessage(Handler.java:103)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:5299)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645)
        at dalvik.system.NativeStart.main(Native Method)

Ответы [ 2 ]

0 голосов
/ 05 ноября 2019

Прежде всего, не выполняйте работу, связанную с базой данных, на адаптере, я предоставлю вам решение, в котором вы можете выполнить работу, связанную с базой данных, над действием над фрагментом. Сначала создайте один интерфейс в вашем адаптере,

interface WorkCompleteInteraction {
        void onWorkComplete(int position, OrderBook orderbook);
    }

получите ваш интерфейс в конструкторе,

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
    private WorkCompleteInteraction interaction;
    private Context mContext;

    public MyAdapter(WorkCompleteInteraction interaction, Context mContext) {
        this.interaction = interaction;
        this.mContext = mContext;
    }

Отправьте обратный вызов вашей деятельности / фрагменту,

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        final orderbook orderbook = orderbookList.get(position);
        if (interaction != null) {
            interaction.onWorkComplete(position, orderbook);
        }
    }

Инициализируйте свой адаптер в упражнении / фрагменте,

MyAdapter adapter = new MyAdapter(this,this);

Реализуйте свой интерфейс в своем действии,

public class TestActivity extends AppCompatActivity implements MyAdapter.WorkCompleteInteraction {

Наконец переопределите свой метод,

    @Override
    public void onWorkComplete(int position, OrderBook orderbook) {
        //do your database related work here
    }
0 голосов
/ 05 ноября 2019

здесь

public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
            if(holder.workCompleteSwicth.isChecked()) {
                myDb.InsertWorkComplete(1);
            }

я думаю, просто измените holder.workCompleteSwicth.isChecked() на

`public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                if(b) {
                    myDb.InsertWorkComplete(1);
                    //u can setChecked of switch her ex: model.setChecked(true);
                }`

, если это не работает, можете ли вы опубликовать ошибку в своем logcat

...