Как вызвать столбец удаления базы данных SQLite ("db.delete") вне класса, в котором была создана база данных - PullRequest
0 голосов
/ 16 октября 2019

Мне необходимо использовать кнопку, определенную во фрагменте CheckInFragment.java, для удаления данных из базы данных, определенной за пределами фрагмента. В настоящее время метод deleteCheckIn находится в CheckInList.java, который необходимо вызывать для кнопки удаления, определенной во фрагменте, с помощью OnClickListener.

В настоящее время я не могу ссылаться или использовать / создавать этот метод внутри фрагмента.

Я пытался ссылаться на метод внутри фрагмента, но поскольку он требует аргументов, хранящихся только в CheckInList.javaэто было неудачно. Я попытался напрямую вызвать mDataBase.delete без использования метода, однако в качестве предыдущей попытки он не может быть вызван без этих аргументов.

CheckInList.java

...

public class CheckInList {
    private static CheckInList sCheckInList;
    private Context mContext;
    public SQLiteDatabase mDataBase;

    public static CheckInList get(Context context) {
        if (sCheckInList == null) {
            sCheckInList = new CheckInList(context);
        }
        return sCheckInList;
    }

    public CheckInList(Context context) {
        mContext = context.getApplicationContext();
        mDataBase = new CheckInBaseHelper(mContext).getWritableDatabase();
    }

    //REQUIRED METHOD TO BE CALLED
    public void deleteCheckIn(CheckIn c) {
        mDataBase.delete(DATABASE_NAME,  CheckInTable.Cols.UUID + "=" + c, null);
    }
...

// CheckInFragment.java

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_checkin, container, false);

...

mDeleteButton = (Button) getView().findViewById(R.id.checkin_delete);
        mDeleteButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //call delete method here
            }
        });

        return v;
    }
...

// CheckIn.java (согласно комментариям)

public class CheckIn  {
    private UUID mId;
    private String mTitle;
    private String mPlace;
    private String mDetails;
    private Date mDate;
    private double mLatitude;
    private double mLongitude;

...
   public UUID getId() {
        return mId;
    }
...

   public CheckIn() {
        this(UUID.randomUUID());
    }

    public CheckIn(UUID id) {
        mId = id;
        mDate = new Date();
    }
...

Я хотел бы найти способ использовать deleteCheckIn при нажатии кнопки mDeleteButton.

Любая помощь приветствуется!

Ответы [ 3 ]

0 голосов
/ 16 октября 2019
public class CheckInList {
    ...
    // While implementing Singleton, the constructor must be private
    private CheckInList(Context context) {
        mContext = context.getApplicationContext();
        mDataBase = new CheckInBaseHelper(mContext).getWritableDatabase();
    }
    ...
}

mDeleteButton = (Button) getView().findViewById(R.id.checkin_delete);
    mDeleteButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            CheckInList.get(v.getContext()).deleteCheckIn(/* Send the parameter here */);
        }
    });

    return v;
}
0 голосов
/ 16 октября 2019

Вы должны были получить доступ к экземпляру класса и вызвать метод для удаления в фоновом потоке.

mDeleteButton.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
    CheckInList dao = CheckInList.get(v.getContext());
    v.postDelayed(new Runnable() {
      dao.deleteCheckIn(yourCheckInObjectInstance);
    });
  }
});
0 голосов
/ 16 октября 2019

Внутри обработчика setOnClickListener создайте переменную CheckInList _this = this и используйте ее для доступа к общедоступной и нестатической mDataBase

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...