我的代码可能有什么问题?我使用HashMap
在数据库中更容易更新,但每当我尝试将数据从数据库提取到FirebaseRecyclerAdapter
时,我都会收到错误。
我搜索了许多类似的问题,尝试了他们的解决方案,但没有工作。
以下是例外
com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.project.android.designlibdemo.model.RecipeModel
Getter和setter
public class RecipeModel {
private String name;
public RecipeModel(){
}
public RecipeModel(String name){
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
ViewHolder类
public class ViewHolderRecipe extends RecyclerView.ViewHolder {
String LOG_TAG = ViewHolderRecipe.class.getSimpleName();
public View view;
private TextView ingredient_txt;
public ViewHolderRecipe(View itemView) {
super(itemView);
view = itemView;
ingredient_txt = itemView.findViewById(R.id.ingredient_list);
}
public void setRecipeName(String recipe){
ingredient_txt.setText(recipe);
}
我如何将数据发送到数据库
Map postRecipeMap = new HashMap();
final DatabaseReference sendRecp = FirebaseDatabase.getInstance().getReference().child
("Post").child("PostRecipe").push();
sendRecp.updateChildren(postRecipeMap)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
mProgressDialog.dismiss();
AlertDialog.Builder alertDialogBuilder = new android.support.v7.app
.AlertDialog.Builder(PostingRecipeActivity.this);
alertDialogBuilder.setTitle("Successfully");
alertDialogBuilder.setMessage("You can click next");
alertDialogBuilder.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
//Launch PostDetailActivity
Intent i = new Intent(PostingRecipeActivity.this, ContentIngredientList.class);
final String reportKey = sendRecp.getKey();
i.putExtra(ContentIngredientList.EXTRA_FIR_KEY, reportKey);
mProgressDialog.dismiss();
startActivity(i);
}
});
AlertDialog aDialog = alertDialogBuilder.create();
aDialog.show();
}
我如何检索数据
public class ContentIngredientList extends AppCompatActivity {
public static final String EXTRA_FIR_KEY = "recipeKey";
private FirebaseRecyclerAdapter<RecipeModel, ViewHolderRecipe> mAdapter;
//private RecyclerView mIngredient_list;
String LOG_TAG = PostingRecipeActivity.class.getSimpleName();
private String recipeKey;
public ContentIngredientList(){
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.content_ingredient_list);
// Get post key from intent
recipeKey = getIntent().getStringExtra(EXTRA_FIR_KEY);
if (recipeKey == null) {
throw new IllegalArgumentException("Must pass EXTRA_POST_KEY");
}
DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference().child("Post").child
("PostRecipe").child(recipeKey);
RecyclerView mRcyclerViewIngredient = findViewById(R.id.ingredient_list_recycler);
//mIngredient_list = findViewById(R.id.ingredient_list);
Log.e(LOG_TAG, "url" + mDatabase.getRef()) ;
// [END create_database_reference]
// mDirectionList.setHasFixedSize(true);
mRcyclerViewIngredient.setLayoutManager(new LinearLayoutManager(this));
// mIngredient_list.setHasFixedSize(true);
//mIngredient_list.setLayoutManager(new LinearLayoutManager(this));
mAdapter = new FirebaseRecyclerAdapter<RecipeModel, ViewHolderRecipe>(RecipeModel.class,
R.layout.ingredient_posting, ViewHolderRecipe.class, mDatabase) {
@Override
protected void populateViewHolder(ViewHolderRecipe viewHolder, RecipeModel model, int position) {
viewHolder.setRecipeName(model.getName());
}
};
mRcyclerViewIngredient.setAdapter(mAdapter);
}
}
答案 0 :(得分:1)
要获取帖子接收列表,那么您的数据库应该是:
DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference().child("Post").child
("PostRecipe").child(recipeKey);
而是:
DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference().child("Post").child
("PostRecipe");
您正在引用特定的PostRecipe,然后当Firebase UI尝试获取对象时,它只找到了字符串名称。