Java 单击RecyclerView后,当我想在新活动中显示详细信息时出错。使用火基

Java 单击RecyclerView后,当我想在新活动中显示详细信息时出错。使用火基,java,android,firebase,android-recyclerview,Java,Android,Firebase,Android Recyclerview,我希望ViewProduct活动显示在recyclerView上单击的项目的详细信息。我稍后的目标是将textView更改为editText来编辑产品,但现在我希望它能显示出来 我的问题是用Firebase特定产品的数据填充textView 你会看到有一条祝酒词被注释掉了,它起作用并显示了位置,所以我知道我在正确的轨道上。现在,如果我单击该项目,应用程序就会崩溃,出现错误: 无法启动活动组件信息 尝试在空对象引用上调用虚拟方法“java.lang.String java.lang.Object.

我希望
ViewProduct
活动显示在
recyclerView
上单击的项目的详细信息。我稍后的目标是将
textView
更改为
editText
来编辑产品,但现在我希望它能显示出来

我的问题是用Firebase特定产品的数据填充
textView

你会看到有一条祝酒词被注释掉了,它起作用并显示了位置,所以我知道我在正确的轨道上。现在,如果我单击该项目,应用程序就会崩溃,出现错误:

无法启动活动组件信息

尝试在空对象引用上调用虚拟方法“java.lang.String java.lang.Object.toString()”

我现在只需要用Firebase的数据填充
textfield
s

这是我的RecyclerAdapter中的项目视图:

            itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int position = getAdapterPosition();
                //Toast.makeText(context,"Position"+ position, Toast.LENGTH_SHORT).show();
                if (position != RecyclerView.NO_POSITION && listener != null) {
                    //listener.onItemClick(getSnapshots().getSnapshot(position), position);
                    listener.onItemClick(getSnapshots().getSnapshot(position),(position));
                    Intent intent = new Intent(itemView.getContext(), ViewProduct.class);
                    intent.putExtra("product_ID:", position);
                    itemView.getContext().startActivity(intent);

                }
            }
        });
下面是我的ViewProduct活动,我想在其中查看详细信息: 公共类ViewProduct扩展了AppCompatActivity{

private String edit_product_ID;

private TextView mProduct, mPrice;
private TextView mSave, mDelete;

private DatabaseReference product_ref;



@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view_product);

product_ref = FirebaseDatabase.getInstance().getReference().child("ultra_liquors");

edit_product_ID = getIntent().getExtras().get("product_ID").toString();


    //Toast.makeText(this, "The Product ID:" + edit_product_ID, Toast.LENGTH_SHORT).show();

    mProduct = (TextView) findViewById(R.id.product);
    mPrice = (TextView) findViewById(R.id.price);
    mSave = (TextView) findViewById(R.id.save);
    mDelete = (TextView) findViewById(R.id.delete);

    RetrieveProductInfo();

}

private void RetrieveProductInfo() {
    product_ref.child(edit_product_ID).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if ((dataSnapshot.exists()) && (dataSnapshot.hasChild(edit_product_ID))) {
                String product_name = dataSnapshot.child("product").getValue().toString();
                String product_price = dataSnapshot.child("price").getValue().toString();

                mProduct.setText(product_name);
                mPrice.setText(product_price);
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });
}

有意添加这一行

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

我想这就是问题所在。试试看,让我知道!

intent.putExtra(“product_ID:,position);中的字符串后面有一个冒号符号。这会导致
getExtras().get(…)
返回null.null.toString()抛出错误

错误发生在哪一行代码上?请同时编辑您的问题并将您的数据库结构添加为JSON文件或至少一个屏幕截图。ViewProduct line 45 edit_product_ID=getIntent().getExtras().get(“product_ID”).toString();
intent.putExtra(“product_ID:,position)
应替换为
intent.putExtra(“产品ID”,位置);
您有一个“:”-字符串中的符号很抱歉,它也是这样,但我看到了一个错误@Andreas指出的,现在至少它显示了新的活动,但它没有用Firebase的数据填充文本视图。谢谢你。你得到了值吗?就像你在第144行看到的那样,我创建了一条toast消息(现在是Cancell ou),这起作用了,它显示了toast中的位置,因此我说我认为我走对了方向。//toast.makeText(context,“position”+position,toast.LENGTH\u SHORT)。show();我认为数据是空的,这就是它没有显示的原因。尝试记录getSnapshots()的值。getSnapshot(position)如果(dataSnapshot.exists()存在,则定位并尝试添加RetrieveProductInfo()中的日志我不知道该怎么做,所以可能需要一些帮助。谢谢你到目前为止的帮助。谢谢。我正在取得进展。现在至少它正在打开活动,但它没有填充文本视图。你确定调用.setText的代码行确实被调用了吗?不,没有。但在那之前,我似乎没有被调用从Firebase获取数据。老实说,我不知道该怎么做,所以可能需要一些帮助或一个指向好教程的指针。可能有很多原因。我会先在onCancelled中添加一个日志输出。类似于log.d(“firebaseError”,error.getMessage());另外,在onDataChange方法中,在if之后添加一个else语句来记录输出,以确认它是否被触发。据我所知,还要确保您的firebase数据库的设置为:
“ultra_Liquirs”:{:{:{product:,price:}
您与firebase的设置可能错误,或者您的测试设备(您的手机或模拟器)可能未连接到internet。日志可能会给您一个指示。我还建议尝试在几行上使用断点调试代码,以查看所有值是否都设置为预期值