【问题标题】:Second activity can't read getExtras from intent第二个活动无法从意图中读取 getExtras
【发布时间】:2021-02-07 15:30:42
【问题描述】:

如果我单击它,我正在尝试通过使用意图从新活动中的 recyclerView 项目(Firestore 作为数据库)中获取值。不知道这是否是最好的方法,但我到目前为止。

在我的第二个活动中,我只在要填充的 textViews 中得到 Null。

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

请多多关照和帮助,这几天我真的一直在苦苦挣扎。

这是我的 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();
}

}

这是我想从 Intent 中提取数据的 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 方面还不是最好的,所以请耐心等待。

【问题讨论】:

    标签: java android firebase android-intent android-recyclerview


    【解决方案1】:

    您正在使用:

     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"));
    

    【讨论】:

      猜你喜欢
      • 2018-09-28
      • 2016-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多