Вам нужно пройти в последовательности, но вы забыли запятую, чтобы сделать ваши параметры кортежем:
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])
Попробуйте установить адаптер таким образом,
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" />
Вы добавляете объект ученика в адаптер. вам нужно добавить список студентов в адаптер. измени свой код следующим образом
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);
Вы устанавливаете адаптер в do while loop
. и необходим рефакторинг вашего кода, создающий custom adaptor
.... переводящий вызов базы данных из класса Activity view1
в свой собственный класс. и для работы с нестандартным адаптером вам должно быть удобно работать с шаблонами и внутренними классами.
попробуйте это,
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);
}
}
попробуйте
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);
}
}
}