Адаптер абстрактный не может быть создан на RecyclerView в Android

Вам нужно пройти в последовательности, но вы забыли запятую, чтобы сделать ваши параметры кортежем:

cursor.execute('INSERT INTO images VALUES(?)', (img,))

Без запятой (img) - это просто сгруппированное выражение, а не кортеж, и, следовательно, строка img рассматривается как входная последовательность. Если эта строка имеет длину 74 символа, тогда Python видит это как 74 отдельных значения привязки, каждый из которых длинный.

>>> len(img)
74
>>> len((img,))
1

Если вам становится легче читать, вы также можете использовать литерал списка:

cursor.execute('INSERT INTO images VALUES(?)', [img])
0
задан Nisa Yathu 5 March 2019 в 06:35
поделиться

5 ответов

Попробуйте установить адаптер таким образом,

final List<student> stud  = new ArrayList();
    if (c.moveToFirst()) {
        do {
            student stu = new student();
            stu.id = c.getString(id);
            stu.name = c.getString(name);
            stu.age = c.getString(age);
            stud.add(stu); 
        } while (c.moveToNext());
          mAdapter = new Adapter(stud);
          layoutManager = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);
    recyclerView.setLayoutManager(layoutManager);
          recyclerView.setAdapter(mAdapter);

Также измените макет на

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".view1">    
<android.support.v7.widget.RecyclerView
android:id="@+id/rs1"
    android:layout_width="368dp"
    android:layout_height="495dp"
    tools:layout_editor_absoluteX="8dp"
    tools:layout_editor_absoluteY="8dp" />    

0
ответ дан Manoj Perumarath 5 March 2019 в 06:35
поделиться

Вы добавляете объект ученика в адаптер. вам нужно добавить список студентов в адаптер. измени свой код следующим образом

        final List<student> stud = new ArrayList();
        if (c.moveToFirst()) {
            do {
                student stu = new student();
                stu.id = c.getString(id);
                stu.name = c.getString(name);
                stu.age = c.getString(age);

                stud.add(stu); // add your object to list

            } while (c.moveToNext());

              mAdapter = new Adapter(stud);
              recyclerView.setAdapter(mAdapter);
0
ответ дан NullPointerException 5 March 2019 в 06:35
поделиться

Вы устанавливаете адаптер в do while loop. и необходим рефакторинг вашего кода, создающий custom adaptor .... переводящий вызов базы данных из класса Activity view1 в свой собственный класс. и для работы с нестандартным адаптером вам должно быть удобно работать с шаблонами и внутренними классами.

0
ответ дан Aelaf 5 March 2019 в 06:35
поделиться

попробуйте это,

final ArrayList<student> stud=new ArrayList<>();
    if (c != null && c.getCount() > 0) {
     if (c.moveToFirst()) {
        do {
            student stu = new student();
            stu.id = c.getString(id);
            stu.name = c.getString(name);
            stu.age = c.getString(age);
            //you need to add the Student object stu not the 
          //ArrayList Object stud
          stud.add(stu);

        } while (c.moveToNext());
            mAdapter = new Adapter(stud);
            recyclerView.setAdapter(mAdapter);
    }
 }
0
ответ дан Jinal Awaiya 5 March 2019 в 06:35
поделиться

попробуйте

 final ArrayList<student> stud = new ArrayList<>();
        if (c.moveToFirst()) {
            do {
                student stu = new student();
                stu.id = c.getString(id);
                stu.name = c.getString(name);
                stu.age = c.getString(age);
                stud.add(stu);

           } while (c.moveToNext());

           //you need to add the Student object stu not the ArrayList Object stud
            if(stud!=null&&stud.size()>0){
               DummyAdapter mAdapter = new DummyAdapter(this,stud);
                recyclerView.setAdapter(mAdapter);
               }

создать новый класс адаптера, подобный этому

public class DummyAdapter extends RecyclerView.Adapter<DummyAdapter.MyViewHolder> {
    private Context mContext;
    ArrayList<student> studentArraylist;

    public DummyAdapter(Context mContext,ArrayList<student> studentArraylist) {
        this.mContext = mContext;
        this.studentArraylist  = studemtArraylist;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    //add your layout design file here
        View view = LayoutInflater.from(mContext).inflate(R.layout.fragment_packing_dummy, parent, false);
        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
    Student stud = studentArraylist.get(position);
  //perform your rest functionality
    holder.txt.settext(stud.name)

    }

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

    public class MyViewHolder extends RecyclerView.ViewHolder {
      //access your layout ids here for example
       TextView txt;
        public MyViewHolder(View itemView) {
            super(itemView);
            txt = itemView.findViewById(R.id.txt);
        }
    }
}
0
ответ дан Sejpal Pavan 5 March 2019 в 06:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: