Как предотвратить «Предоставленный путь к документу не должен быть нулевым». Firestore? - PullRequest
1 голос
/ 02 октября 2019

У меня проблема, когда я хочу, чтобы onBackPressed перешел к предыдущему действию (ViewData.class), но я не могу этого сделать. Есть ли решение для устранения проблемы? Проблема:

 Caused by: java.lang.NullPointerException: Provided document path must not be null.
    at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:906)
    at com.google.firebase.firestore.CollectionReference.document(com.google.firebase:firebase-firestore@@21.1.1:103)
    at id.MuhammadRafi.StockCount.ViewData.onStart(ViewData.java:200)
    at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1236)
    at android.app.Activity.performStart(Activity.java:6006)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2288)

ViewData.java:

@Override
protected void onStart() {
    super.onStart();

    documentID = getIntent().getStringExtra("documentID");

    collectionReference.document(documentID).collection("Products").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
        @Override
        public void onComplete(@NonNull Task<QuerySnapshot> task) {
            if(task.isSuccessful()) {

                itemsList.clear();

                for(DocumentSnapshot documentSnapshot : task.getResult()) {
                    Items items = documentSnapshot.toObject(Items.class);
                    itemsList.add(items);

                    productListAdapter.notifyDataSetChanged();
                }
            }
        }
    });
}

MainActivity.java:

public void onBackPressed() {
    Intent moveView = new Intent(ScanActivity.this, ViewData.class);
    startActivity(moveView);
    finish();
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()){
        case android.R.id.home:
            onBackPressed();
            return true;
    }
    return super.onOptionsItemSelected(item);
}

Ответы [ 2 ]

2 голосов
/ 02 октября 2019

Если вы хотите вернуться к предыдущему занятию, нет необходимости

startActivity(moveView);
finish();

в вашем onBackPressed(). то, что вы делаете, это запускает другой экземпляр этого действия и отправляет данные, которые вы хотите отправить обратно.

Вместо этого сделайте startActivityForResult() в вашем ViewData.class и в вашем onBackPressed() в MainActivity

public void onBackPressed() {
    Intent moveView = getIntent();
    //Here your can add whatever values you want to send back to your activity
    moveView.putExtra("some_key",value)
    setResult(Activity.RESULT_OK,moveView);
    finish();
}

тогда в вашем ViewData.class переопределении onActivityResult() есть место, где вы будете получать данные, отправленные текущей деятельностью. См. Получение результата от действия Проблема с Firestore заключается в том, что вы не инициализировали правильный путь, возможно, из-за того, что вы запускаете новый экземпляр ViewData.class

0 голосов
/ 02 октября 2019

NullPointerException: предоставленный путь к документу не должен быть нулевым

выше ошибка вызвана этой строкой:

documentID = getIntent().getStringExtra("documentID");

здесь documentID является нулевым.

И для возвратав предыдущее действие просто удалите метод onBackPressed или переопределите его следующим образом:

@Override
public void onBackPressed() {
    super.onBackPressed();
}

И в onCreate () вашего текущего действия добавьте эту строку, чтобы заставить работать значок навигации назад -

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