1
votes

Comment puis-je obtenir NoResourceException

J'essaie de comprendre l'affichage d'une liste d'éléments dans Android. De développeurs.android, ils l'expliquent. Cependant, mon application se bloque pour une raison quelconque. J'ai essayé de mettre mon tableau String en tant que mannequin sans résultat. Ceci en dépit du fait que le code n'ait aucune erreur. La trace de la pile indique NoResourceException. La seule ressource est mon dossier d'activité, qui est en place. Je commence à penser que c'est peut-être quelque chose qui dépasse le code. Peut-être une dépendance.

MainActivity.java

    java.lang.ClassCastException: androidx.constraintlayout.widget.ConstraintLayout cannot be cast to android.widget.TextView
        at com.projects.recyclerview.MyAdapter.onCreateViewHolder(MyAdapter.java:34)
        at com.projects.recyclerview.MyAdapter.onCreateViewHolder(MyAdapter.java:12)
        at androidx.recyclerview.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:6794)
        at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5975)
        at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5858)
        at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5854)
        at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2230)
        at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1557)
        at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1517)
        at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:612)
        at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3924)
        at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3641)
        at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4194)
        at android.view.View.layout(View.java:17051)
        at android.view.ViewGroup.layout(ViewGroup.java:5600)
        at androidx.constraintlayout.widget.ConstraintLayout.onLayout(ConstraintLayout.java:1915)
        at android.view.View.layout(View.java:17051)
        at android.view.ViewGroup.layout(ViewGroup.java:5600)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:396)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
        at android.view.View.layout(View.java:17051)
        at android.view.ViewGroup.layout(ViewGroup.java:5600)
        at androidx.appcompat.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:444)
        at android.view.View.layout(View.java:17051)
        at android.view.ViewGroup.layout(ViewGroup.java:5600)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:396)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
        at android.view.View.layout(View.java:17051)
        at android.view.ViewGroup.layout(ViewGroup.java:5600)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:2001)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1844)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1753)
        at android.view.View.layout(View.java:17051)
        at android.view.ViewGroup.layout(ViewGroup.java:5600)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:396)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
        at com.android.internal.policy.PhoneWindow$DecorView.onLayout(PhoneWindow.java:2777)
        at android.view.View.layout(View.java:17051)
        at android.view.ViewGroup.layout(ViewGroup.java:5600)
        at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2648)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2328)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1369)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6932)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:909)
        at android.view.Choreographer.doCallbacks(Choreographer.java:702)
        at android.view.Choreographer.doFrame(Choreographer.java:631)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:895)
        at android.os.Handler.handleCallback(Handler.java:815)
        at android.os.Handler.dispatchMessage(Handler.java:104)
        at android.os.Looper.loop(Looper.java:227)
        at android.app.ActivityThread.main(ActivityThread.java:6102)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:961)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:822)

MyAdapter.java

    android.content.res.Resources$NotFoundException: Resource ID #0x0
        at android.content.res.Resources.getValue(Resources.java:1552)
        at android.content.res.Resources.getDrawable(Resources.java:926)
        at android.graphics.drawable.Icon.loadDrawableInner(Icon.java:313)
        at android.graphics.drawable.Icon.loadDrawable(Icon.java:269)
        at android.widget.RemoteViews$TextViewDrawableAction.apply(RemoteViews.java:1502)
        at android.widget.RemoteViews.performApply(RemoteViews.java:2805)
        at android.widget.RemoteViews.apply(RemoteViews.java:2764)
        at android.widget.RemoteViews$ViewGroupAction.apply(RemoteViews.java:1373)
        at android.widget.RemoteViews.performApply(RemoteViews.java:2805)
        at android.widget.RemoteViews.reapply(RemoteViews.java:2795)
        at com.android.systemui.statusbar.BaseStatusBar.updateNotificationViews(BaseStatusBar.java:2162)
        at com.android.systemui.statusbar.BaseStatusBar.updateNotification(BaseStatusBar.java:2031)
        at com.android.systemui.statusbar.BaseStatusBar$6$2.run(BaseStatusBar.java:521)
        at android.os.Handler.handleCallback(Handler.java:815)
        at android.os.Handler.dispatchMessage(Handler.java:104)
        at android.os.Looper.loop(Looper.java:227)
        at android.app.ActivityThread.main(ActivityThread.java:6102)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:961)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:822)

activity_main.xml

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/my_recycler_view"
        android:scrollbars="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>

StackTrace

import android.view.LayoutInflater;

import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;


public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
    public String[] mDataSet;

    public static class MyViewHolder extends RecyclerView.ViewHolder{

        public TextView textView;
        public MyViewHolder(TextView itemView) {
            super(itemView);
            textView =  itemView;
        }
    }

    public MyAdapter(String[] dataSet) {
        mDataSet = dataSet;

    }



    @Override
    public MyAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        TextView v = (TextView) LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_main, parent, false);
        MyViewHolder vh = new MyViewHolder(v);
        return vh;
    }

    @Override
    public void onBindViewHolder(@NonNull MyAdapter.MyViewHolder holder, int position) {
        holder.textView.setText(mDataSet[position]);
    }

    @Override
    public int getItemCount() {
        return mDataSet.length;
    }
}

Stacktrace mis à jour

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    private RecyclerView recyclerView;
    private RecyclerView.Adapter adapter;
    private RecyclerView.LayoutManager layoutManager;
    String[] names;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        names = new String[] {"John","Peter","James","Andrew"};
        recyclerView = findViewById(R.id.my_recycler_view);

        recyclerView.setHasFixedSize(true);

        layoutManager= new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);

        adapter = new MyAdapter(names);
        recyclerView.setAdapter(adapter);
    }
}


3 commentaires

Avez-vous essayé de nettoyer le projet et de le reconstruire?


Je ne pense pas que vous ayez la bonne trace de pile. com.android.systemui.statusbar ne peut pas être votre package. Veuillez poster le bon.


Vous avez raison. Changé en androidx recyclerview. J'ai ça


3 Réponses :


-1
votes
<android.support.v7.widget.RecyclerView
    android:id="@+id/my_recycler_view"
    android:scrollbars="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

3 commentaires

Cela ne corrigera pas une erreur de diffusion. L'un des deux que vous avez publiés est correct, selon qu'il utilise Androidx ou l'ancienne bibliothèque de support.


Si vous voyez que les deux bibliothèques sont compilées, les dépendances sont appliquées correctement. Il vous guide uniquement pour utiliser la même bibliothèque.


Journal de casting que j'ai manqué ^^;



1
votes
 TextView v = (TextView) LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_main, parent, false);
The root view of activity_mail isn't a TextView, it's a ConstraintLayout.  You're inflating the wrong file most likely-  its a little odd for activity_main to be inflated inside a recyclerview

0 commentaires

2
votes

Vous utilisez probablement la mauvaise mise en page en essayant de créer la vue de l'outil de recyclage. activity_main est votre disposition générale pour l'activité, mais vous essayez de l'utiliser dans onCreateViewHolder comme élément de liste.

Vous recherchez probablement quelque chose appelé list_item .

LayoutInflater.from (parent.getContext ()). inflate (R.layout.list_item, parent, false);

Soyez prudent sur le R.layout.list_item . Vous avez actuellement R.layout.activity_main ici. Utilisez votre vue correcte pour gonfler l'élément de liste.


3 commentaires

Je comprends cela maintenant. Je gonflais la mauvaise chose, le fichier de mise en page. Je suppose que ce devrait être la vue de recyclage créée dans le fichier de mise en page qui devrait être gonflée. Droit? En branchant cela, ce n'est pas reconnu.


Non, vous devriez gonfler la mise en page de la vue des éléments de liste, pas la vue de l'outil de recyclage.


Je l'ai changé en un list_item que j'ai créé. Le seul problème est le ClassCastException. J'ai essayé d'utiliser les dispositions linéaires et relatives sans succès.