मेरे पास बेसबॉल टीम और बास्केटबॉल टीम टेबल है। मैं इन दो तालिकाओं में से प्रत्येक से डेटा लाना चाहता हूं और इसे एक रीसायकल व्यू में दिखाना चाहता हूं।

तो मैं व्यूटाइप को नामित करने जा रहा था, लेकिन एक त्रुटि थी।

तालिका में समान नाम वाले खिलाड़ियों का डेटा होता है, इसलिए परिणाम बिना शर्त प्रत्येक तालिका से लिए जाते हैं।

मैंने दो तालिकाओं के परिणामों को एक सूची में रखने की कोशिश की, फिर सूची को एडॉप्टर में रीसायकल दृश्य में दिखाने के लिए रखा।

मुझे दो तालिकाओं के परिणामों को एक सूची में रखने का प्रयास करने में त्रुटि हुई।

मुझे क्या करना चाहिए?

यह मुख्य गतिविधि है।

public class MainActivity extends AppCompatActivity {

    RecyclerView recyclerView;
    SearchView searchView;
    ApiInterface apiInterface;
    Adapter adapter;
    List list = new ArrayList();
    List<BaseBallInfo> baseBallInfoList;
    List<BasketBallInfo> basketBallInfoList;
    RecyclerView.LayoutManager layoutManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        layoutManager = new LinearLayoutManager(this);

        recyclerView = findViewById(R.id.recyclerview);

        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setHasFixedSize(true);
        searchView = findViewById(R.id.searchView);
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                search(query);
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                return false;
            }
        });
    }

    private void search(final String name) {
        apiInterface = ApiClient.getApiClient().create(ApiInterface.class);
        Call<List<BaseBallInfo>> call = apiInterface.getBaseBallInfo(name);
        call.enqueue(new Callback<List<BaseBallInfo>>() {
            @Override
            public void onResponse(Call<List<BaseBallInfo>> call, Response<List<BaseBallInfo>> response) {
                baseBallInfoList = response.body();
                list.add(baseBallInfoList);
            }

            @Override
            public void onFailure(Call<List<BaseBallInfo>> call, Throwable t) {
                Log.e("ErrorMessage", t.toString());
            }
        });

        Call<List<BasketBallInfo>> call2 = apiInterface.getBasketBallInfo(name);
        call2.enqueue(new Callback<List<BasketBallInfo>>() {
            @Override
            public void onResponse(Call<List<BasketBallInfo>> call, Response<List<BasketBallInfo>> response) {
                basketBallInfoList = response.body();
                list.add(basketBallInfoList);
            }

            @Override
            public void onFailure(Call<List<BasketBallInfo>> call, Throwable t) {
                Log.e("ErrorMessage", t.toString());
            }
        });

        adapter = new Adapter(MainActivity.this, list);
        recyclerView.setAdapter(adapter);
        adapter.notifyDataSetChanged();
    }
}

यह एडेप्टर है।

public class Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    private Context context;
    private List list;

    public Adapter(Context context, List list) {
        this.context = context;
        this.list = list;
    }

    @Override
    public int getItemViewType(int position) {
        if(list.get(position) instanceof BaseBallInfo) {
            return 0;
        }

        return 1;
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        if(viewType == 0) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_baseball, parent, false);
            BaseBallViewHolder holder = new BaseBallViewHolder(view);
            return holder;
        } else {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_basketball, parent, false);
            BasketBallViewHolder holder = new BasketBallViewHolder(view);
            return holder;
        }
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
        if(this.getItemViewType(position) == 0) {
            BaseBallInfo baseBallInfo = (BaseBallInfo)list.get(position);
            BaseBallViewHolder holder = (BaseBallViewHolder) viewHolder;
            holder.nameTextView.setText(baseBallInfo.getName());
            holder.battingTextView.setText(baseBallInfo.getBatting_avg());
        } else if(this.getItemViewType(position) == 1) {
            BasketBallInfo basketBallInfo = (BasketBallInfo)list.get(position);
            BasketBallViewHolder holder = (BasketBallViewHolder) viewHolder;
            holder.name2TextView.setText(basketBallInfo.getName());
            holder.positionTextView.setText(basketBallInfo.getPos());
        } else {
            Toast.makeText(context, "No Result", Toast.LENGTH_SHORT).show();
        }
    }

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

    public static class BaseBallViewHolder extends RecyclerView.ViewHolder {

        TextView nameTextView, battingTextView;

        public BaseBallViewHolder(@NonNull View itemView) {
            super(itemView);
            nameTextView = itemView.findViewById(R.id.nameTextView);
            battingTextView = itemView.findViewById(R.id.battingTextView);
        }
    }

    public static class BasketBallViewHolder extends RecyclerView.ViewHolder {

        TextView name2TextView, positionTextView;

        public BasketBallViewHolder(@NonNull View itemView) {
            super(itemView);
            name2TextView = itemView.findViewById(R.id.name2TextView);
            positionTextView = itemView.findViewById(R.id.positionTextView);
        }
    }
}

यह त्रुटि लॉग है।

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.recyclerviewprac01, PID: 10185
    java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.example.recyclerviewprac01.BasketBallInfo
        at com.example.recyclerviewprac01.Adapter.onBindViewHolder(Adapter.java:57)
        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.onMeasure(RecyclerView.java:3540)
        at android.view.View.measure(View.java:24966)
        at androidx.constraintlayout.widget.ConstraintLayout.internalMeasureChildren(ConstraintLayout.java:1227)
        at androidx.constraintlayout.widget.ConstraintLayout.onMeasure(ConstraintLayout.java:1572)
        at android.view.View.measure(View.java:24966)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7139)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
        at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:143)
        at android.view.View.measure(View.java:24966)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7139)
        at androidx.appcompat.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:403)
        at android.view.View.measure(View.java:24966)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7139)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
        at android.view.View.measure(View.java:24966)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7139)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1535)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:825)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:704)
        at android.view.View.measure(View.java:24966)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7139)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
        at com.android.internal.policy.DecorView.onMeasure(DecorView.java:992)
        at android.view.View.measure(View.java:24966)
        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:3301)
        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:2028)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2330)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1888)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8511)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
        at android.view.Choreographer.doCallbacks(Choreographer.java:761)
        at android.view.Choreographer.doFrame(Choreographer.java:696)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7050)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)

कृपया मेरी मदद करें।

1
luhai 27 सितंबर 2020, 13:00

1 उत्तर

सबसे बढ़िया उत्तर

मैंने कोशिश नहीं की और इसे हल किया लेकिन मुझे लगता है कि समस्या यह है:

गतिविधि में आप 'बेसबॉलइन्फो' और 'बास्केटबॉलइन्फो' की एक सूची जोड़ रहे हैं जो आपको नेटवर्क ऑपरेशन का उपयोग कर रहे हैं (आपके पास प्रतिक्रिया <सूची> प्रतिक्रिया के रूप में है, इसलिए यह एक सूची है एकल वस्तु नहीं)।

इसके बाद आप एडेप्टर को इस सूची (जो सूचियों की एक सूची है) पास करते हैं। फिर आप इस सूची से एक आइटम प्राप्त करने और इसे 'BaseBallInfo' या 'BasketBallInfo' में बदलने का प्रयास कर रहे हैं, लेकिन यदि आप list.get(position) करते हैं तो आपके पास 'BaseBallInfo' या 'BasketBallInfo' आइटम्स की एक सूची है, एक नहीं वस्तु।

मुझे समझ में नहीं आया कि आप अंतिम परिणाम के रूप में क्या चाहते हैं, लेकिन यदि सभी कोड सही हैं, तो आपको सूची की सूची के बजाय वस्तुओं की सूची ('बेसबॉलइन्फो' या 'बास्केटबॉलइन्फो') की गतिविधि में 'सूची' को परिवर्तित करना चाहिए। वस्तु का।

कोशिश करें 'list.addAll(...);' नेटवर्क प्रतिक्रिया कॉलबैक में 'list.add ()' के बजाय। वस्तुओं की सूची की सूची नहीं वस्तुओं की सूची होने के लिए आपको 'सूची' की आवश्यकता है।

आशा है कि यह मददगार है और हल करता है, एक अच्छा कोडिंग और दिन है

0
Z3R0 27 सितंबर 2020, 13:16