Android 自定义列表视图,SQLite
所以我有两个活动:一个是将对象(图像和两个字符串)添加到自定义列表的Main,另一个是显示此列表的Main 我有两门课:Android 自定义列表视图,SQLite,android,sqlite,listview,custom-adapter,Android,Sqlite,Listview,Custom Adapter,所以我有两个活动:一个是将对象(图像和两个字符串)添加到自定义列表的Main,另一个是显示此列表的Main 我有两门课: public class Activity_4 extends AppCompatActivity { ListView listView; myAdapter mAdapter = null; ArrayList<Object> objectList; @Override protected void onCreate(Bundle savedInstanc
public class Activity_4 extends AppCompatActivity {
ListView listView;
myAdapter mAdapter = null;
ArrayList<Object> objectList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_4);
listView = (ListView)findViewById(R.id.listView4);
objectList = new ArrayList<>();
mAdapter = new myAdapter(this,R.layout.list_row,objectList);
listView.setAdapter(mAdapter);
Cursor cursor = Activity_3.sqLiteHelper.getData("SELECT * FROM OBJECT");
objectList.clear();
while (cursor.moveToNext()) {
int id = cursor.getInt(0);
String main = cursor.getString(1);
String desc = cursor.getString(2);
byte[] image = cursor.getBlob(3);
objectList.add(new Object(image,main,desc, id));
}
mAdapter.notifyDataSetChanged();
}
public class Object {
byte[] imageID;
String mainText;
String description;
int id;
public Object(byte[] imageID, String mainText, String description, int id) {
this.imageID = imageID;
this.mainText = mainText;
this.description = description;
this.id = id;
//getters and setters
}
public class myAdapter extends BaseAdapter {
private Context mContext;
private List<Object> objectList;
private int layout;
public myAdapter(Context context,int layout, ArrayList<Object> objectList) {
this.mContext = context;
this.layout = layout;
this.objectList = objectList;
}
@Override
public int getCount() {
return objectList.size();
}
@Override
public Object getItem (int position) {
return objectList.get(position);
}
@Override
public long getItemId (int position) {
return position;
}
private class ViewHolder {
ImageView imageView;
TextView main,desc;
}
@Override
public View getView (int position, View view, ViewGroup parent) {
View row = view;
ViewHolder holder = new ViewHolder();
if (row == null) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(layout,null);
holder.main = (TextView)row.findViewById(R.id.editText);
holder.desc = (TextView)row.findViewById(R.id.editText2);
holder.imageView = (ImageView)row.findViewById(R.id.imageView);
row.setTag(holder);
} else {
holder = (ViewHolder) row.getTag();
}
Object object = objectList.get(position);
holder.main.setText(object.getMainText());
holder.desc.setText(object.getDescription());
byte[] image = object.getImageID();
Bitmap bitmap = BitmapFactory.decodeByteArray(image,0,image.length);
holder.imageView.setImageBitmap(bitmap);
return row;
}
}
}
他们正在将对象(图片和两个文本描述)添加到自定义列表视图中,并保存/打开已添加的数据。但我想进入列表查看活动时遇到问题,应用程序正在崩溃。以下是日志:
Process: com.example.charles.cwiczenie3, PID: 6072
Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
at com.example.karol.cwiczenie3.Activity_4$myAdapter.getView(Activity_4.java:172)
有人知道怎么解决吗?
谢谢:)请检查R.layout.list\u行是否有Id为editText的TextView
我认为id为editText的R.layout.list_行中没有TextView,因此出现了NullPointerException。似乎至少有一个id为editText的
视图
或editText1
不在list_行
布局中。您确定该适配器的布局正确吗?您正在getView()
中将它们强制转换为TextView
s,但这些看起来像是EditText
s的id。是的,您是对的,我将其更改为TextView文件的正确id。但现在我的问题是,它保存的是默认设置的数据,所以是布局列表行中的数据,而不是我插入的数据。
Process: com.example.charles.cwiczenie3, PID: 6072
Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
at com.example.karol.cwiczenie3.Activity_4$myAdapter.getView(Activity_4.java:172)