Не удается преобразовать объект типа java.lang.Long в type (modelclass)

#java #android

#java #Android

Вопрос:

Я работаю над приложением для Android, до сих пор оно работало нормально. Я установил адаптер в welcometojungleactivity.class , Мой класс адаптера — plantlistadapter, он работал нормально, даже если я завершил свою работу в этом классе и работал над каким-то другим классом, я не знаю, как неожиданно возникла проблема.

welcometojungleactivity.java (Содержащий RecyclerView)

     FirebaseRecyclerAdapter<plantsWord, plantslistAdapter> mFirebaseRecyclerAdapter = new FirebaseRecyclerAdapter<plantsWord, plantslistAdapter>(
            plantsWord.class, R.layout.item_plantslist, plantslistAdapter.class, mPlantsDatabaseReference
    ) {
        @Override
        protected void populateViewHolder(plantslistAdapter viewHolder, plantsWord model, int position) {
            viewHolder.setDetails(getApplicationContext(), model.getplantImageURL(), model.getplantLocation(), model.getplantName(), model.getplantType());
        }

        @NonNull
        @Override
        public plantslistAdapter onCreateViewHolder(ViewGroup parent, int viewType) {
            plantslistAdapter mplantslistAdapter = super.onCreateViewHolder(parent, viewType);
            mplantslistAdapter.setOnClickListener(new plantslistAdapter.ClickListener() {
                @Override
                public void onItemClick(View view, int position) {
                }

                @Override
                public void onItemlongclick(View view, int position) {
                }
            });

            return mplantslistAdapter;
        }
    };
    mplantsreRecyclerView.setAdapter(mFirebaseRecyclerAdapter);
 

//plantlistAdapter.java

 public class plantslistAdapter extends RecyclerView.ViewHolder {
        private View mView;
    public plantslistAdapter(View itemView) {
        super(itemView);
    }

public void setDetails(Context context, String plantImage,  String plantLocation, String plantName, String plantType){
    ImageView imgpreview = mView.findViewById(R.id.plantlist_imgpreview);
    TextView location = mView.findViewById(R.id.plantlist_location);
    TextView plantname = mView.findViewById(R.id.plantlist_plantname);
    TextView planttype = mView.findViewById(R.id.plantlist_planttype);
    Glide.with(context).load(plantImage).into(imgpreview);

    location.setText(plantLocation);
    plantname.setText(plantName);
    planttype.setText(plantType);
        }
       }
 

Это моя ошибка

 com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.Long to type phyla.admin.com.phyla.plantsWord
        at com.google.android.gms.internal.firebase_database.zzkt.zzb(Unknown Source)
        at com.google.android.gms.internal.firebase_database.zzkt.zza(Unknown Source)
        at com.google.firebase.database.DataSnapshot.getValue(Unknown Source)
        at com.firebase.ui.database.FirebaseRecyclerAdapter.parseSnapshot(FirebaseRecyclerAdapter.java:147)
        at com.firebase.ui.database.FirebaseRecyclerAdapter.getItem(FirebaseRecyclerAdapter.java:136)
        at com.firebase.ui.database.FirebaseRecyclerAdapter.onBindViewHolder(FirebaseRecyclerAdapter.java:176)
        at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6781)
        at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6823)
        at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5752)
        at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6019)
        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5858)
        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5854)
        at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2230)
        at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1557)
        at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1517).......
 

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

Ответ №1:

Мне нужно было бы узнать больше о том, что здесь происходит, но похоже, что вы пытаетесь использовать длинный тип где-то, где есть код для преобразования числового (вероятно, целочисленного) типа в пользовательский тип «word». Здесь интересно использование «Word». Я часто видел, что в языках программирования «Word» представляет собой 16-битное целое число без знака, используемое для хранения битовых шаблонов, а не фактическое числовое значение. Возможно, что длинный тип просто имеет слишком большую точность для хранения в этом значении. Если вы уверены, что значение здесь всегда должно быть <2 ^ 31, я бы предложил преобразовать его в int перед использованием. Некоторые системы по умолчанию используют длинные значения для целых значений, поэтому возможно, что это «сработало на вашем компьютере», но не работает в других ситуациях.

Опять же, я не знаю систему, с которой вы работаете, так что это чистая спекуляция.

Комментарии:

1. Я нашел решение своей проблемы, на самом деле я ошибочно поместил целочисленное значение вдоль узлов других значений, таких как (plantId, plantImgUrl и т. Д.) Когда Firebase пытается получить данные из моего класса plantWord, он сравнивает несколько значений с одним целым числом.. Кстати, спасибо за вашу помощь!!!