第二个 activity 无法从意图中读取 getExtras

Second activity can't read getExtras from intent

如果我单击它,我将尝试使用 intents 从新的 activity 中的 recyclerView 项目(Firestore 作为数据库)获取值。不知道这是否是最好的方法,但我已经做到了。

在我的第二个 activity 中,我只在要填充的 textView 中得到 Null。

我已经尝试使用 Toasts 对其进行测试。您会看到有两条 Toast 消息。 mainActivity (UltraLiquors) 中的第一个显示我要正确提取的数据(ID、产品和价格),但详细信息中的第二个 activity 只显示“null”,所以我假设有一个我的 getExtras 有问题 activity。我只是不知道该去哪里找了。

请多多指教,这几天我真的很苦恼。

这是我的 mainActivity (UltraLiquors.class)

public class UltraLiquors extends AppCompatActivity {

private FirebaseFirestore ultra_liquor_db = FirebaseFirestore.getInstance();
private CollectionReference promo_oneRef = ultra_liquor_db.collection("ultra_liquors");
private static final int ACTIVITY_NUM = 2;

private UltraLiquorsRecyclerAdapter ultra_liquors_adapter;

private static final String TAG = "Ultra Liquors";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_ultra_liquors);
    setUpPromoOneRecyclerView();
    //setupBottomNavigationView();
    setTitle("Ultra Liquors");
    Context context;
}

private void setUpPromoOneRecyclerView() {
    Query query = promo_oneRef.whereEqualTo("promo_number", "1").orderBy("department");

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

    ultra_liquors_adapter = new UltraLiquorsRecyclerAdapter(options);

    RecyclerView promo_one_recyclerView = findViewById(R.id.recycler_view_ultra_liquors);
    //recyclerView.setHasFixedSize(true);
    promo_one_recyclerView.setLayoutManager(new LinearLayoutManager(this));
    promo_one_recyclerView.setAdapter(ultra_liquors_adapter);


    ultra_liquors_adapter.setOnItemClickListener(new UltraLiquorsRecyclerAdapter.OnItemClickListener() {
        @Override
        public void onItemClick(DocumentSnapshot documentSnapshot, int position) {
            Ultra_liquors note = documentSnapshot.toObject(Ultra_liquors.class);
            String id = documentSnapshot.getId();
            String product = (String) documentSnapshot.get("product");
            String price = (String) documentSnapshot.get("price");
            String path = documentSnapshot.getReference().getPath();
            Toast.makeText(UltraLiquors.this,
                   "Position: " + position + " ID: " + product + price, Toast.LENGTH_SHORT).show();
            Intent intent = new Intent(UltraLiquors.this, ViewProduct.class);
            intent.putExtra("Product", product);
            intent.putExtra("Price", price);
            startActivity(intent);
        }
    });

}

@Override
protected void onStart() {
    super.onStart();
    ultra_liquors_adapter.startListening();
}

@Override
protected void onStop() {
    super.onStop();
    ultra_liquors_adapter.stopListening();
}

}

这里是我想从意图中提取数据的 detailActivity (ViewProduct):

public class ViewProduct extends AppCompatActivity {

private String edit_product_ID;
//private String edit_product_Product;
private String edit_product_Price;

private TextView productView, priceView;
private TextView mSave, mDelete;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view_product);
Intent intent = getIntent();
String product;
String price;

product = String.valueOf(getIntent().getExtras().get("product"));
price = String.valueOf(getIntent().getExtras().get("price"));

    Toast.makeText(this, "The Product ID: " + edit_product_ID +
            " Product Name " + product + " Product Price " + price, Toast.LENGTH_LONG).show();

    TextView productView = findViewById(R.id.product);
    productView.setText(product);
    TextView priceView = findViewById(R.id.price);
    priceView.setText(price);
    mSave = (TextView) findViewById(R.id.save);
    mDelete = (TextView) findViewById(R.id.delete);

  }}

我在Java或Android方面还不是最好的,所以请耐心等待。

您正在使用:

 intent.putExtra("Product", product);
 intent.putExtra("Price", price);

但是你试图通过以下方式获取它们:

product = String.valueOf(getIntent().getExtras().get("product"));
price = String.valueOf(getIntent().getExtras().get("price"));

看看这些值有何不同?

您需要使用相同的大小写,因为它区分大小写,因此请使用类似:

product = String.valueOf(getIntent().getExtras().get("Product"));
price = String.valueOf(getIntent().getExtras().get("Price"));