当前位置: 首页 > 知识库问答 >
问题:

ClassCastException:不能将字符串转换为

屈昊天
2023-03-14

我的代码有一个错误。

holder.textViewHead.setText(idd.get(position).getSubject());
class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder>
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)});
    }





} 

我的适配器类:

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

我的班级:

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

共有1个答案

邵宜年
2023-03-14

这里没有显示所有必需的代码,但我假设来自ArrayList dbhandler.getAs()的数组列表作为id参数传递给Adapterconstuctor

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

应该有一个编译器警告“未经检查或不安全的操作”。

getas返回的实际上是一个包含string对象的列表,现在这被解释为一个包含dates对象的列表,一旦访问其中一个元素,就会导致类转换异常。

从中可以吸取两个教训:

  1. 不要忽略编译器警告
  2. 不使用原始集合类
 类似资料:
  • 这些是我的蒙德尔人: 而且 我的类中有这个方法: 在(扩展以前的)中使用: 在此的另一点中,我有: 但这给了我: 线程“JavaFX Application thread”java.lang.ClassCastException:类Models.Accomodation不能强制转换为类Models.Intraction(Models.Accomodation和Models.Intraction在C

  • 结果: Main.java:22:错误:不兼容的类型:字符串不能转换为T返回Y;其中T是类型变量:T扩展类Vehicle 1错误中声明的字符串

  • 当我运行这个程序时,我得到了这个错误。我不知道怎么解决。请帮我找到它。 代码:

  • 问题内容: 如何将经典字符串转换为f字符串? 输出: 所需的输出: 问题答案: f字符串是 语法 ,而不是对象类型。您不能将任意字符串转换为该语法,该语法会创建一个字符串对象,而不是相反。 我假设您想用作模板,因此只需在对象上使用方法: 如果要提供可配置的模板服务,请创建一个包含所有可以插值的字段的名称空间字典,并与调用语法一起使用以应用名称空间: 然后,用户可以在字段中的名称空间中使用任何键(或

  • 问题内容: 是否可以将模板字符串创建为常规字符串 然后将其转换为模板字符串 没有,以及其他动态代码生成方式? 问题答案: 由于您的模板字符串必须动态地(在运行时)引用该变量,因此答案是: 否,没有动态代码生成是不可能的。 但这很简单:

  • 问题内容: 我想在GO中将字符串数组转换为字节数组,以便可以将其写到磁盘上。将字符串数组()解码为字节数组()的最佳解决方案是什么? 我正在考虑对字符串数组进行两次迭代,第一个迭代以获得字节数组所需的实际大小,然后第二个迭代写入每个元素的长度和实际字符串()。 解决方案必须能够以其他方式进行转换;从一个到一个。 问题答案: 让我们忽略一个事实,那就是走一秒钟。您需要做的第一件事是将序列化格式编组为