Отображение данных в RecyclerView из firebase: ОШИБКА: невозможно преобразовать объект типа java .lang.String в - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь отобразить содержимое моей таблицы / списка Firebase под названием «Активы» в представлении переработчика. Но я получаю сообщение об ошибке:

com.google.firebase.database.DatabaseException: Невозможно преобразовать объект типа java .lang.String в тип com.example.zakatone. Активы

Я попытался просмотреть все связанные классы, но не могу найти ошибку.

Вот так выглядят мои данные в Firebase:

Database screenshot

Активы. java

package com.example.zakatone;

public class Assets {
private String assetname;
private String assetamount;

public Assets() {
}


public String getAssetname() {
    return assetname;
}

public void setAssetname(String assetname) {
    this.assetname = assetname;
}

public String getAssetamount() {
    return assetamount;
}

public void setAssetamount(String assetamount) {
    this.assetamount = assetamount;
}


}

MyAdapter. java

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {

private Context context;
private ArrayList<Assets> assets;

MyAdapter(Context c, ArrayList<Assets> a)
{
    context = c;
    assets = a;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    return new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.cardview,parent, false));
}

@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
    holder.name.setText(assets.get(position).getAssetname());
    holder.amount.setText(assets.get(position).getAssetamount());

}

@Override
public int getItemCount() {
    return assets.size();
}

class MyViewHolder extends RecyclerView.ViewHolder{

    TextView name, amount;
    public MyViewHolder(@NonNull View itemView) {
        super(itemView);
        name = itemView.findViewById(R.id.name);
        amount = itemView.findViewById(R.id.amount);
    }
}

}

Здесь я пытаюсь отобразить свои данные: обзор. java

reference = FirebaseDatabase.getInstance().getReference().child("Assets");
    recyclerView = findViewById(R.id.myRecycler);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));


    reference = FirebaseDatabase.getInstance().getReference().child("Assets");
    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                list = new ArrayList<Assets>();
                for(DataSnapshot dataSnapshot1: dataSnapshot.getChildren()){
                    Assets a = dataSnapshot1.getValue(Assets.class);
                    list.add(a);
                }
                adapter = new MyAdapter(overview.this,list);
                recyclerView.setAdapter(adapter);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Toast.makeText(overview.this, "Something Fishy", Toast.LENGTH_SHORT).show();
        }
    });

Я хочу отобразить данные следующим образом: enter image description here

Я получаю ошибку в обзоре. java класс в строке:

Assets a = dataSnapshot1.getValue(Assets.class);

Пожалуйста, помогите мне, поскольку на странице обзора ничего не отображается на странице момент Я предполагаю, что при доступе к таблице базы данных произошла ошибка, но я не уверен.

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Сначала у вас есть два поля assetName и assetAmount. В Java всегда используйте camelCase, первое слово в нижнем регистре и второе слово начинаются с заглавной буквы.

Поскольку у вас есть эти два поля, вам также необходимо иметь их в базе данных, чтобы иметь возможность сопоставить объект с базой данных. Поэтому при сохранении вам нужно изменить структуру следующим образом:

Assets
   randomId
       assetName : name
       assetAmount : amt
   randomId
       assetName : name
       assetAmount : amt

При получении обращайтесь к узлу Assets и не используйте для l oop для итерации, так как вы получите значения типа String, а не типа Assets

0 голосов
/ 04 мая 2020

Попробуйте редактировать так

((Assets) getActivity()).getValue;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...