私は私のリストデータを取得する問題を抱えています。私は、データクラスを持っています。
public class MedicineUsageData {
String companyName;
String productName;
String drugSubstance;
String expireDate;
String barcodeNum;
String serialNum;
String partyNum;
String userName;
int userAge;
public MedicineUsageData() {
}
public MedicineUsageData(String companyName, String productName, String drugSubstance, String expireDate, String barcodeNum, String serialNum, String partyNum, String userName, int userAge) {
this.companyName = companyName;
this.productName = productName;
this.drugSubstance = drugSubstance;
this.expireDate = expireDate;
this.barcodeNum = barcodeNum;
this.serialNum = serialNum;
this.partyNum = partyNum;
this.userName = userName;
this.userAge = userAge;
}
public String getCompanyName() {
return companyName;
}
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public String getdrugSubstance() {
return drugSubstance;
}
public void setdrugSubstance(String drugSubstance) {
this.drugSubstance = drugSubstance;
}
public String getExpireDate() {
return expireDate;
}
public void setExpireDate(String expireDate) {
this.expireDate = expireDate;
}
public String getBarcodeNum() {
return barcodeNum;
}
public void setBarcodeNum(String barcodeNum) {
this.barcodeNum = barcodeNum;
}
public String getSerialNum() {
return serialNum;
}
public void setSerialNum(String serialNum) {
this.serialNum = serialNum;
}
public String getPartyNum() {
return partyNum;
}
public void setPartyNum(String partyNum) {
this.partyNum = partyNum;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getUserAge() {
return userAge;
}
public void setUserAge(int userAge) {
this.userAge = userAge;
}
}
私は、このオブジェクトのリストを作成しました。
List<MedicineUsageData> medicineUsageDataList = new ArrayList<>();
その後、私のボタンのリスナーに私は別の活動に、このリストを渡すためにJSONファイルを作成します。
String medicineUsageJson = gson.toJson(medicineUsageDataList);
Intent recyclerIntent = new Intent(MainScreenActivity.this,RecyclerViewActivity.class);
recyclerIntent.putExtra("medicineList", medicineUsageJson);
startActivity(recyclerIntent);
その後、他の活動に私は、JSONデータを取得し、再びリストに変換します。
medicineList = gson.fromJson(getIntent().getStringExtra("medicineList"), List.class);
それから私は私のアダプタを呼び出し、medicineListを送信します。
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MedicineUsageDataViewHolder> {
public static class MedicineUsageDataViewHolder extends RecyclerView.ViewHolder {
CardView cv;
TextView medicineName;
TextView expireDate;
MedicineUsageDataViewHolder(View itemView) {
super(itemView);
cv = (CardView)itemView.findViewById(R.id.MedicineInfo);
medicineName = (TextView)itemView.findViewById(R.id.medicine_name);
expireDate = (TextView)itemView.findViewById(R.id.expire_date);
}
}
List<MedicineUsageData> medicineList;
RecyclerAdapter(List<MedicineUsageData> medicineList){
this.medicineList = medicineList;
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
}
@Override
public RecyclerAdapter.MedicineUsageDataViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.medicine_usage_data, viewGroup, false);
RecyclerAdapter.MedicineUsageDataViewHolder mvh = new RecyclerAdapter.MedicineUsageDataViewHolder(v);
return mvh;
}
@Override
public void onBindViewHolder(RecyclerAdapter.MedicineUsageDataViewHolder medicineUsageDataViewHolder, int i) {
medicineUsageDataViewHolder.medicineName.setText(medicineList.get(i).getproductName);
medicineUsageDataViewHolder.expireDate.setText(medicineList.get(i).getexpireDate);
//medicineUsageDataViewHolder.medicineName.setText("bug is");
//medicineUsageDataViewHolder.expireDate.setText("here");
}
@Override
public int getItemCount() {
return medicineList.size();
}
}
私はこのコードでのTextViewのセットテキストを試してみてください。
medicineUsageDataViewHolder.medicineName.setText(medicineList.get(i).getproductName);
medicineUsageDataViewHolder.expireDate.setText(medicineList.get(i).getexpireDate);
しかし、この時点で私のアプリケーションのクラッシュ。私はそれが動作します。このいずれかで、このコードを変更した場合。
//medicineUsageDataViewHolder.medicineName.setText("bug is");
//medicineUsageDataViewHolder.expireDate.setText("here");
だから私は私の主な問題は、medicineList.get(I)の部分だと思います。それは問題ではありませんので、「getproductName」メソッドは文字列を返します。私はまた、toString()メソッドを使用しようとするが、それはどちらかそれを修正しませんでした。
私はたくさんのことを試してみましたが、私はすべてのエラーを見ることはできませんここに私の問題を見ることができません。私のデータには同期の問題が存在しない、完全に来ます。私は、問題がされているかわかりません。
ここに私のデータは、私がデバッグモードでそれを確認しています。
私はそれを文字列にリストデータを変換して表示するために試してみて、それが動作します。しかし、それは私の現在の希望状況ではありません。
medicineUsageDataViewHolder.medicineName.setText(medicineList.toString());
ここでは、この行の実行の結果です。データのすべてが正しいです。しかし、私はそれが私の望んでいた状況ではないと言うと。私は、などEXPIREDATEのようなアクセスフィールドにしたいです
[{barcodeNum=8699570090119, companyName=HÜSNÜ ARSAN İLAÇLARI A.Ş., drugSubstance=parasetamol, psödoefedrin hcl, triprolidin hcl, expireDate=12/21, partyNum=19093004A, productName=A-FERIN SINUS 500/30/1.25 MG FİLM KAPLI TABLET, 20 ADET, serialNum=05000023512631, userAge=25.0, userName=admin}, {barcodeNum=8690570010008, companyName=RECKİTT BENCKİSER TEMİZLİK MALZEMELERİ SAN. TİC. A.Ş., drugSubstance=ibuprofen, psödoefedrin hcl, expireDate=09/19, partyNum=CB284, productName=NUROFEN COLD FLU TABLET, 24 ADET, serialNum=80392202232051, userAge=25.0, userName=admin}]
私を手伝ってくれますか ?
ここでスタックトレースレコードがあります。私はそれをチェックするが、私は、問題を見つけることができません。
2020-03-12 18:31:01.714 14062-14062/com.track.medicine D/AndroidRuntime: Shutting down VM
2020-03-12 18:31:01.719 14062-14062/com.track.medicine E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.track.medicine, PID: 14062
java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to com.track.medicine.MedicineUsageData
at com.track.medicine.RecyclerAdapter.onBindViewHolder(RecyclerAdapter.java:50)
at com.track.medicine.RecyclerAdapter.onBindViewHolder(RecyclerAdapter.java:14)
at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:7065)
at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7107)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:6012)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6279)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6118)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6114)
at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2303)
at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1627)
at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1587)
at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:665)
at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4134)
at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3851)
at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4404)
at android.view.View.layout(View.java:20854)
at android.view.ViewGroup.layout(ViewGroup.java:6401)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791)
at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1780)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1546)
at android.view.View.layout(View.java:20854)
at android.view.ViewGroup.layout(ViewGroup.java:6401)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:20854)
at android.view.ViewGroup.layout(ViewGroup.java:6401)
at androidx.appcompat.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:446)
at android.view.View.layout(View.java:20854)
at android.view.ViewGroup.layout(ViewGroup.java:6401)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:20854)
at android.view.ViewGroup.layout(ViewGroup.java:6401)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1544)
at android.view.View.layout(View.java:20854)
at android.view.ViewGroup.layout(ViewGroup.java:6401)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at com.android.internal.policy.DecorView.onLayout(DecorView.java:945)
at android.view.View.layout(View.java:20854)
at android.view.ViewGroup.layout(ViewGroup.java:6401)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2956)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2643)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1780)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7827)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
at android.view.Choreographer.doCallbacks(Choreographer.java:723)
at android.view.Choreographer.doFrame(Choreographer.java:658)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
2020-03-12 18:31:01.719 14062-14062/com.track.medicine E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:6944)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
私は間違いなくあなたの問題がここにあることを伝えることができます。
medicineList = gson.fromJson(getIntent().getStringExtra("medicineList"), List.class);
あなたはそれが使用すべきタイプGSONを語っていません。[OK]を、あなたはリストが、何のリストを使用するように言っていますか?
List.classの代わりにこれを渡すようにしてください
Type type = new TypeToken<List<MedicineUsageData>>(){}.getType();
medicineList = gson.fromJson(getIntent().getStringExtra("medicineList"), type);