자바는 어떻게 올바르게 목록 <개체> 데이터를 얻을 수 있습니다

muratcangm :

내 목록 데이터를 얻을 수있는 문제가있다. 나는 데이터 클래스가 있습니다.

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();
}
}

이 코드와 텍스트 뷰의 텍스트 설정을 시도해보십시오.

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 () Methods를 사용합니다하려고하지만 중 하나를 해결하지 않았다.

내가 너무 많은 일을하려고 여기 내 문제를 볼 수 있지만 오류를 볼 수 없습니다. 내 데이터를 더 동기화 문제가 없다, 완벽하게 제공됩니다. 나는 문제가 무엇인지 모르겠어요.

여기에 내 데이터 내가 디버그 모드에서 확인합니다.

medicineList

나는 그것을 문자열로 목록 데이터를 변환하고 보여주기 위해 노력하고 그것을 작동합니다. 그러나 현재의 내 원하는 상황이 아니다.

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을 이야기하지 않습니다. 좋아, 당신은이 목록을 사용하여 이야기하지만, 무엇의 목록거야?

List.class 대신이 통과하는 것을 시도하십시오

Type type = new TypeToken<List<MedicineUsageData>>(){}.getType();
medicineList = gson.fromJson(getIntent().getStringExtra("medicineList"), type);

추천

출처http://43.154.161.224:23101/article/api/json?id=275771&siteId=1