首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从Firestore获取订单id并将其传递给我的适配器类?

如何从Firestore获取订单id并将其传递给我的适配器类?
EN

Stack Overflow用户
提问于 2021-07-17 22:28:08
回答 1查看 38关注 0票数 0

我需要从Firestore获取一个订单id,并将该id传递给我的查询,但我正在异步获取订单id。所以我不得不在Firebase回调方法中初始化我的适配器。问题是我的onStart和onStop方法正在侦听适配器,然后抛出NullPointException。

代码语言:javascript
复制
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_to_cart);

        // Navigate to men section
        fromAddToCartToForHim = findViewById(R.id.fromAddToCartToForHim);
        fromAddToCartToForHim.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(AddToCart.this, HimActivity.class);
                startActivity(intent);
                finish();
            }
        });


        //Navigate to Women section
        fromAddToCartToForHer = findViewById(R.id.fromAddToCartToForHer);
        fromAddToCartToForHer.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(AddToCart.this, WomenActivity.class);
                startActivity(intent);
                finish();
            }
        });


        // Navigate to Household section

        fromAddToCartToForHouseHold = findViewById(R.id.fromAddToCartToForHouseHold);
        fromAddToCartToForHouseHold.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(AddToCart.this, HouseHoldActivity.class);
                startActivity(intent);
                finish();
            }
        });


        // SetUpRecyclerView func

        setUpRecycleView();


    }
代码语言:javascript
复制
private void setUpRecycleView() {


        // GET CURRENT ORDER ID

        orderRef.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull @NotNull Task<QuerySnapshot> task) {
                if (task.isComplete()) {

                    QuerySnapshot snapshot = task.getResult();

                    assert snapshot != null;
                    for (DocumentSnapshot snapshots : snapshot.getDocuments()) {

                        String user_id = snapshots.getString("user_id");
                        Boolean status = snapshots.getBoolean("status");

                        if (user_id.equals(getUserId()) && !status) {

                            // User has existing Order
                            // Check if order is pending or completed

                            String orderId = snapshots.getId();

                            Query query = orderRef
                                    .document(orderId)
                                    .collection("orderlist")
                                    .orderBy("category").orderBy("priority", Query.Direction.ASCENDING);

                            FirestoreRecyclerOptions<OrderList> options = new FirestoreRecyclerOptions.Builder<OrderList>()
                                    .setQuery(query, OrderList.class)
                                    .build();


                            addToCartAdaptor = new AddToCartAdaptor(options);

                            recyclerView = findViewById(R.id.recyclerviewAddToCart);
                            recyclerView.setHasFixedSize(true);
                            recyclerView.setLayoutManager(new LinearLayoutManager(AddToCart.this));
                            recyclerView.setAdapter(addToCartAdaptor);
                        }
                    }
                }


            }
        });
    }
代码语言:javascript
复制
enter code here

 @Override
    protected void onStart() {
        super.onStart();
        addToCartAdaptor.startListening(); Error happens here
    }

    @Override
    protected void onStop() {   `enter code here`
        super.onStop();

        addToCartAdaptor.stopListening();
    }

下面是我得到的错误

代码语言:javascript
复制
W/example.neptun: Accessing hidden method Lcom/msic/qarth/PatchStore;->createDisableExceptionQarthFile(Ljava/lang/Throwable;)Z (blacklist, JNI)
E/example.neptun: [qarth_debug:]  get PatchStore::createDisableExceptionQarthFile method fail.
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.neptune, PID: 2884
    java.lang.NullPointerException: Attempt to invoke virtual method 'void com.example.neptune.Adapters.AddToCartAdaptor.startListening()' on a null object reference
        at com.example.neptune.AddToCart.onStart(AddToCart.java:150)
        at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1419)
        at android.app.Activity.performStart(Activity.java:7479)
        at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3454)
        at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:180)
        at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:165)
        at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:142)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2199)
        at android.os.Handler.dispatchMessage(Handler.java:112)
        at android.os.Looper.loop(Looper.java:216)
        at android.app.ActivityThread.main(ActivityThread.java:7625)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)
I/Process: Sending signal. PID: 2884 SIG: 9
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-18 01:03:52

当您使用以下代码行时:

代码语言:javascript
复制
addToCartAdaptor = new AddToCartAdaptor(options);

在"onComplete()“方法中,这意味着它总是紧跟在onStart之后运行,因为从orderRef引用中获取数据需要一些时间。您可以做的是,在onComplete()方法外部创建(默认) Query、FirestoreRecyclerOptions和AddToCartAdaptor对象,一旦在回调中获得数据,只需使用从数据库获得的数据更新"options“对象。通过这种方式,您只在数据可用时才将数据提供给"options“对象。

这也意味着你再也得不到NullPointerException了,因为addToCartAdaptor已经初始化了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68421426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档