Android 如何将DocumentReference传递给DetailActivity?
我使用Firebase存储数据,Master/Detail活动显示文档列表,当用户单击其中任何一个时,Detail活动应显示该文档的数据 问题是我无法将Android 如何将DocumentReference传递给DetailActivity?,android,firebase,android-recyclerview,google-cloud-firestore,master-detail,Android,Firebase,Android Recyclerview,Google Cloud Firestore,Master Detail,我使用Firebase存储数据,Master/Detail活动显示文档列表,当用户单击其中任何一个时,Detail活动应显示该文档的数据 问题是我无法将DocumentReference(Firebase提供的类)发送到具有intent的DetailActivity。由于DocumentReference不可序列化,因此putExtra() 这是我的相关代码: ListActivity.java OnClickListener用于列表项,在my RecyclerView上的onBindViewH
DocumentReference
(Firebase提供的类)发送到具有intent的DetailActivity。由于DocumentReference
不可序列化,因此putExtra()
这是我的相关代码:
ListActivity.java
OnClickListener用于列表项,在my RecyclerView上的onBindViewHolder
内
final View.OnClickListener mOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
Expense item = (Expense) view.getTag();
if (item != null) {
Context context = view.getContext();
Intent intent = new Intent(context, DetailActivity.class);
intent.putExtra(DetailFragment.ARG_ITEM_ID, item);
context.startActivity(intent);
}
else {
Log.e(TAG, "item is null");
}
}
};
DetailFragment.java
Expense.java
而不是传递
文档引用
传递集合和文档的名称
,并在详细活动中重构文档引用
:
public class Expense implements Serializable {
public DocumentReference id;
private String TAG = "Expense";
private Timestamp timestamp;
private float amount;
private String description;
.......
public void setId(DocumentReference id) { this.id = id; }
......
public class Expense implements Serializable {
//add these instead of DocumentReference
public String CollectionName;
public String DocumentName;
private String TAG = "Expense";
private Timestamp timestamp;
private float amount;
private String description;
........
.......
public void setCollectionName(String name) { this.CollectionName= name; }
public void setDocumentName(String name) { this.DocumentName= name; } ......
.............
Context context = view.getContext();
Intent intent = new Intent(context, DetailActivity.class);
//add these
item.setCollectionName("YOUR_COLLECTION_NAME");
item.setDocumentName("YOUR_DOCUMENT_NAME");
intent.putExtra(DetailFragment.ARG_ITEM_ID, item);
context.startActivity(intent);
...............
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments().containsKey(ARG_ITEM_ID)) {
Log.d(TAG, getArguments().getSerializable(ARG_ITEM_ID).toString());
Expense item = (Expense) getArguments().getSerializable(ARG_ITEM_ID);
//reconstruct the document reference
FirebaseFirestore db = FirebaseFirestore.getInstance();
DocumentReference docRef = db.collection(item.CollectionName).document(item.DocumentName);
Log.d(TAG, "Received="+item.toString());
}
}
这个:
public class Expense implements Serializable {
public DocumentReference id;
private String TAG = "Expense";
private Timestamp timestamp;
private float amount;
private String description;
.......
public void setId(DocumentReference id) { this.id = id; }
......
public class Expense implements Serializable {
//add these instead of DocumentReference
public String CollectionName;
public String DocumentName;
private String TAG = "Expense";
private Timestamp timestamp;
private float amount;
private String description;
........
.......
public void setCollectionName(String name) { this.CollectionName= name; }
public void setDocumentName(String name) { this.DocumentName= name; } ......
.............
Context context = view.getContext();
Intent intent = new Intent(context, DetailActivity.class);
//add these
item.setCollectionName("YOUR_COLLECTION_NAME");
item.setDocumentName("YOUR_DOCUMENT_NAME");
intent.putExtra(DetailFragment.ARG_ITEM_ID, item);
context.startActivity(intent);
...............
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments().containsKey(ARG_ITEM_ID)) {
Log.d(TAG, getArguments().getSerializable(ARG_ITEM_ID).toString());
Expense item = (Expense) getArguments().getSerializable(ARG_ITEM_ID);
//reconstruct the document reference
FirebaseFirestore db = FirebaseFirestore.getInstance();
DocumentReference docRef = db.collection(item.CollectionName).document(item.DocumentName);
Log.d(TAG, "Received="+item.toString());
}
}
变成:
public class Expense implements Serializable {
public DocumentReference id;
private String TAG = "Expense";
private Timestamp timestamp;
private float amount;
private String description;
.......
public void setId(DocumentReference id) { this.id = id; }
......
public class Expense implements Serializable {
//add these instead of DocumentReference
public String CollectionName;
public String DocumentName;
private String TAG = "Expense";
private Timestamp timestamp;
private float amount;
private String description;
........
.......
public void setCollectionName(String name) { this.CollectionName= name; }
public void setDocumentName(String name) { this.DocumentName= name; } ......
.............
Context context = view.getContext();
Intent intent = new Intent(context, DetailActivity.class);
//add these
item.setCollectionName("YOUR_COLLECTION_NAME");
item.setDocumentName("YOUR_DOCUMENT_NAME");
intent.putExtra(DetailFragment.ARG_ITEM_ID, item);
context.startActivity(intent);
...............
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments().containsKey(ARG_ITEM_ID)) {
Log.d(TAG, getArguments().getSerializable(ARG_ITEM_ID).toString());
Expense item = (Expense) getArguments().getSerializable(ARG_ITEM_ID);
//reconstruct the document reference
FirebaseFirestore db = FirebaseFirestore.getInstance();
DocumentReference docRef = db.collection(item.CollectionName).document(item.DocumentName);
Log.d(TAG, "Received="+item.toString());
}
}
在发送意向中的项目之前:
public class Expense implements Serializable {
public DocumentReference id;
private String TAG = "Expense";
private Timestamp timestamp;
private float amount;
private String description;
.......
public void setId(DocumentReference id) { this.id = id; }
......
public class Expense implements Serializable {
//add these instead of DocumentReference
public String CollectionName;
public String DocumentName;
private String TAG = "Expense";
private Timestamp timestamp;
private float amount;
private String description;
........
.......
public void setCollectionName(String name) { this.CollectionName= name; }
public void setDocumentName(String name) { this.DocumentName= name; } ......
.............
Context context = view.getContext();
Intent intent = new Intent(context, DetailActivity.class);
//add these
item.setCollectionName("YOUR_COLLECTION_NAME");
item.setDocumentName("YOUR_DOCUMENT_NAME");
intent.putExtra(DetailFragment.ARG_ITEM_ID, item);
context.startActivity(intent);
...............
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments().containsKey(ARG_ITEM_ID)) {
Log.d(TAG, getArguments().getSerializable(ARG_ITEM_ID).toString());
Expense item = (Expense) getArguments().getSerializable(ARG_ITEM_ID);
//reconstruct the document reference
FirebaseFirestore db = FirebaseFirestore.getInstance();
DocumentReference docRef = db.collection(item.CollectionName).document(item.DocumentName);
Log.d(TAG, "Received="+item.toString());
}
}
DetailFragment.java中的:
public class Expense implements Serializable {
public DocumentReference id;
private String TAG = "Expense";
private Timestamp timestamp;
private float amount;
private String description;
.......
public void setId(DocumentReference id) { this.id = id; }
......
public class Expense implements Serializable {
//add these instead of DocumentReference
public String CollectionName;
public String DocumentName;
private String TAG = "Expense";
private Timestamp timestamp;
private float amount;
private String description;
........
.......
public void setCollectionName(String name) { this.CollectionName= name; }
public void setDocumentName(String name) { this.DocumentName= name; } ......
.............
Context context = view.getContext();
Intent intent = new Intent(context, DetailActivity.class);
//add these
item.setCollectionName("YOUR_COLLECTION_NAME");
item.setDocumentName("YOUR_DOCUMENT_NAME");
intent.putExtra(DetailFragment.ARG_ITEM_ID, item);
context.startActivity(intent);
...............
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments().containsKey(ARG_ITEM_ID)) {
Log.d(TAG, getArguments().getSerializable(ARG_ITEM_ID).toString());
Expense item = (Expense) getArguments().getSerializable(ARG_ITEM_ID);
//reconstruct the document reference
FirebaseFirestore db = FirebaseFirestore.getInstance();
DocumentReference docRef = db.collection(item.CollectionName).document(item.DocumentName);
Log.d(TAG, "Received="+item.toString());
}
}
嗨,尼基!我把这个问题标为重复问题,因为它已经有答案了。所以,请检查副本,看看如何解决这个问题。