0

J'ai une erreur dans mon code.ClassCastException: La chaîne ne peut pas être convertie en

logcat:

java.lang.ClassCastException: java.lang.String ne peut pas être jeté à com.example.aymen.schoolmanager.dates à com.example.aymen.schoolmanager.Adapter. onBindViewHolder (Adapter.java:68) à com.example.aymen.schoolmanager.Adapter.onBindViewHolder (Adapter.java:20) à android.support.v7.widget.RecyclerView $ Adapter.onBindViewHolder (RecyclerView.java: 6356) à android.support.v7.widget.RecyclerView $ Adapter.bindViewHolder (RecyclerView.java:6389) à android.support.v7.widget.RecyclerView $ Recycler.tryBindViewHolderByDeadline (RecyclerView.java:5335) à android.support .v7.widget.RecyclerView $ Recycler.tryGetViewHolderForPositionByDeadline (RecyclerView.java:5598) à android.support.v7.widget.RecyclerView $ Recycler.getViewForPosition (RecyclerView.java:5440) à android.support.v7.widget .RecyclerView $ Recycler.getViewForPosition (RecyclerView.java:5436) au android.support.v7.widget.LinearLayoutManager $ Layo utState.next (LinearLayoutManager.java:2224) à android.support.v7.widget.LinearLayoutManager.layoutChunk (LinearLayoutManager.java:1551) à android.support.v7.widget.LinearLayoutManager.fill (LinearLayoutManager.java: 1511) à android.support.v7.widget.LinearLayoutManager.onLayoutChildren (LinearLayoutManager.java:595) à android.support.v7.widget.RecyclerView.dispatchLayoutStep2 (RecyclerView.java:3583) à android.support .v7.widget.RecyclerView.dispatchLayout (RecyclerView.java:3312) au et roid.support.v7.widget.RecyclerView.onLayout (RecyclerView.java:3844) à android.view.View.layout (View.java:17637) à android.view.ViewGroup.layout (ViewGroup.java:5575) à android.widget.RelativeLayout.onLayout (RelativeLayout.java:1079) à android.view.View.layout (View.java:17637) à android.view.ViewGroup.layout (ViewGroup.java:5575) à android.support.v4.view.ViewPager.onLayout (ViewPager.java:1795) à android.view.View.layout (View.java:17637) à android.view.ViewGroup.layout (ViewGroup.java:5575) au android.support.design.widget.HeaderScrollingViewBehavior.layoutChild (HeaderScrollingViewBehavior.java:131) à android.support.design.widget.ViewOffsetBehavior.onLayoutChild (ViewOffsetBehavior.java:42) à android.support.design.widget .AppBarLayout $ ScrollingViewBehavior.onLayoutChild (AppBarLayout.java:1391) à android.support.design.widget.CoordinatorLayout.onLayout (CoordinatorLayout.java:870) à android.view.View.layout (View.java:17637) à android.view.ViewGroup.mise en page (ViewGroup.java:5575) at android.widget.FrameLayout.layoutChildren (FrameLayout.java:323) à android.widget.FrameLayout.onLayout (FrameLayout.java:261) at android.view.View.layout (View.java:17637) à android.view.ViewGroup.layout (ViewGroup.java:5575) à android.widget.LinearLayout.setChildFrame (LinearLayout.java:1741) à android.widget.LinearLayout.layoutVertical (LinearLayout. java: 1585) chez android.widget.LinearLayout.onLayout (LinearLayout.java:1494) at android.view.View.layout (View.java:17637) at android.view.View Group.layout (ViewGroup.java:5575) à android.widget.FrameLayout.layoutChildren (FrameLayout.java:323) à android.widget.FrameLayout.onLayout (FrameLayout.java:261) à android.view.View. layout (View.java:17637) à android.view.ViewGroup.layout (ViewGroup.java:5575) à android.widget.LinearLayout.setChildFrame (LinearLayout.java:1741) at android.widget.LinearLayout.layoutVertical (LinearLayout.java:1585) à android.widget.LinearLayout.onLayout (LinearLayout.java:1494) à android.view.View.layout (View.java:17637) at android.vie w.ViewGroup.layout (ViewGroup.java:5575) à android.widget.FrameLayout.layoutChildren (FrameLayout.java:323) à android.widget.FrameLayout.onLayout (FrameLayout.java:261) à com.android. internal.policy.DecorView.onLayout (DecorView.java:726) à android.view.View.layout (View.java:17637) à android.view.ViewGroup.layout (ViewGroup.java:5575) à android. view.ViewRootImpl.performLayout (ViewRootImpl.java:2346) at android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:2068) 06-22 10: 11: 41.107 22646-22646/com.example.aymen.schoolmanager E/AndroidRuntime: à android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:1254) à android.view.ViewRootImpl $ TraversalRunnable.run (ViewRootImpl.java:6337) à android.view.Choreographer $ CallbackRecord.run (Choreographer.java : 874) à android.view.Choreographer.doCallbacks (Choreographer.java:686) à android.view.Choreographer.doFrame (Choreographer.java:621) à android.view.Choreographer $ FrameDisplayEventReceiver.run (chorégraphe. java: 860) à android.os.Handler.handleCallback (Handler.java:751) à android.os.Handler.dispatc hMessage (Handler.java:95) à android.os.Looper.loop (Looper.java:154) à android.app.ActivityThread.main (ActivityThread.java:6119) à java.lang.reflect.Method. appelez (méthode native) à com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:886) à com.android.internal.os.ZygoteInit.main (ZygoteInit.java: 776)

ligne 68 points à:

holder.textViewHead.setText(idd.get(position).getSubject()); 

ligne 20 points à:

class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> 

Voici mon code:

Mon gestionnaire de classe de base de données:

public class DBhandler extends SQLiteOpenHelper { 
    private static final String databas_name="newdata.db"; 
    public static final int databas_version=1; 
    public static String ID="id"; 
    int id; 
    SQLiteDatabase dj; 
    ArrayList<dates> er=new ArrayList<dates>(); 
    SQLiteDatabase db; 
    DBhandler helper; 
    String TYPE="type"; 
    String sub="Subject"; 
    String Title="Title"; 
    String det="Detail"; 
    String TabN="ClassExams"; 
    int i; 

    public DBhandler(Context context) 
    { 
     super(context,databas_name,null,databas_version); 
    } 




    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL("CREATE TABLE if not EXISTS ClassExams(id INTEGER primary key,type TEXT,Subject TEXT,Title TEXT,Detail TEXT) "); 
    } 


    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP table if EXISTS ClassExams"); 
     onCreate(db); 

    } 



    public void insert(String type, String sub, String title, String detaill) 
    { 
     SQLiteDatabase db=this.getWritableDatabase(); 
     ContentValues contentValues=new ContentValues(); 
     contentValues.put("type",type); 
     contentValues.put("Subject",sub); 
     contentValues.put("Title",title); 
     contentValues.put("Detail",detaill); 
     db.insert("ClassExams",null,contentValues); 
     db.close(); 



    } 


    public ArrayList getAs(String Type) 
    { 


     String DATABASE_TABLE="ClassExams"; 
     String type="type"; 
     String quer = "SELECT * FROM " + DATABASE_TABLE + " WHERE " + type + "='" + Type+"'"; 
     ArrayList arrayList=new ArrayList(); 
     SQLiteDatabase db=this.getReadableDatabase(); 

     Cursor res=db.rawQuery(quer,null); 
     res.moveToFirst(); 
     while (res.isAfterLast()==false){ 
      arrayList.add(res.getString(res.getColumnIndex("id"))); 

      // arrayList.add(res.getString(res.getColumnIndex("Subject"))); 
      // arrayList.add(res.getString(res.getColumnIndex("Title"))); 
      // arrayList.add(res.getString(res.getColumnIndex("Detail"))); 
      res.moveToNext(); 

     } 
     return arrayList; 

    } 


    public void deleteNote(int x){ 
     String TABLE_NAME="ClassExams"; 
     String ID="id"; 
     SQLiteDatabase db = this.getWritableDatabase(); 
     db.delete(TABLE_NAME, ID + " = ?",new String[] {String.valueOf(x)}); 
    } 





} 

Ma classe adaptateur:

public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> { 
    Context activity; 
    private ArrayList<dates> idd; 

    public class ViewHolder extends RecyclerView.ViewHolder { 

     public TextView textViewHead; 
     public TextView textViewDown; 
     public TextView buttonViewOption; 
     public int position; 
     public ViewHolder(View itemView) { 
      super(itemView); 

      textViewHead = (TextView) itemView.findViewById(id.text1); 

      textViewDown = (TextView) itemView.findViewById(id.text2); 

      buttonViewOption = (TextView) itemView.findViewById(R.id.textViewOptions); 
     } 
    } 


    public Adapter (Context context, ArrayList<dates> id) { 
     this.activity=context; 
     this.idd=id; 

    } 
    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     LayoutInflater inflater=LayoutInflater.from(activity); 
     // View row=inflater.inflate(layout.costum_row,parent,false); 
     View view = LayoutInflater.from(parent.getContext()).inflate(layout.costum_row, null); 

     ViewHolder holder=new ViewHolder(view); 
     return holder; 
    } 
    public void onBindViewHolder(final Adapter.ViewHolder holder, final int position) { 
     // dates object=idd.get(position); 
     // String firstText = object.getDetail(); 
     // String secondText = object.getSubject(); 


     holder.textViewDown.setText("Somthing"); 
     holder.textViewHead.setText(idd.get(position).getSubject()); 
     holder.buttonViewOption.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View view) { 

       PopupMenu popup = new PopupMenu(activity, holder.buttonViewOption); 

       popup.inflate(R.menu.option_menu); 

       popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 
        @Override 
        public boolean onMenuItemClick(MenuItem item) { 

         switch (item.getItemId()) { 
          case id.Update: 

           break; 
          case R.id.menu2: 

           break; 
          case id.Delete: 

           delete(); 
//db.deleteNote(Integer.parseInt(j)); 

           // db.deleteNote(getid); 
         } 
         return false; 
        } 
       }); 
       //displaying the popup 
       popup.show(); 
      } 

      public void delete() { 
       idd.remove(position); 
       notifyItemRemoved(position); 
       notifyItemRangeChanged(position, idd.size()); 
       holder.itemView.setVisibility(View.GONE); 
      } 

     }); 
    } 

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

Ma classe:

public class dates { 
    String Subject,Title,Detail,type; 
    int id; 

    public dates(String subject, String title, String detail, String type, int id) { 
     this.Subject = subject; 
     this.Title = title; 
     this.Detail = detail; 
     this.type = type; 
     this.id = id; 
    } 

    dates() 
    { 

    } 


    public String getSubject() { 
     return Subject; 
    } 

    public void setSubject(String subject) { 
     Subject= subject; 
    } 

    public String getTitle() { 
     return Title; 
    } 

    public void setTitle(String title) { 
     Title = title; 
    } 

    public String getDetail() { 
     return Detail; 
    } 

    public void setDetail(String detail) { 
     Detail = detail; 
    } 

    public String getType() { 
     return type; 
    } 

    public void setType(String type) { 
     this.type = type; 
    } 

    public int getId() { 
     return id; 
    } 

    public void seti(int id) { 
     this.id = id; 
    } 
+0

Il n'y a pas coulé de type dans la ligne que vous avez montré . S'il vous plaît poster la trace de la pile complète. Si vous avez correctement identifié la ligne, l'erreur est dans l'une des méthodes appelées à partir de cette ligne. – Henry

+0

@Henry holder.textViewHead.setText (idd.get (position) .getSubject()); –

+0

Cela semble très étrange. Êtes-vous sûr que la trace de la pile correspond au dernier code? Essayez de reconstruire complètement et de réinstaller l'application. – Henry

Répondre

0

Pas tout le code nécessaire est montré ici, mais je suppose que la liste Array provenant ArrayList DBHandler.getAs() est passé en paramètre id à la Adapter constuctor

public Adapter (Context context, ArrayList<dates> id) 

Un avertissement du compilateur à propos des "opérations non contrôlées ou non sécurisées" aurait dû se produire.

Quels getAs rendements est en fait une liste contenant String objets et ceci est maintenant interprété comme une liste contenant dates objets, ce qui conduit à l'exception de la classe coulée dès que l'un des éléments est accessible.

Deux leçons peuvent être tirées de cette:

  1. Ne pas ignorer les avertissements du compilateur
  2. Ne pas utiliser les classes de collection premières