java我使用列表视图活动发送数据到编辑数据活动,这里有什么问题?
我正在从数据库中检索项目名称、项目描述和项目价格,当用户单击项目时,它将进入编辑活动,用户可以在其中更新或删除数据,但当我单击列表项目时,它将返回主活动
当用户单击视图数据时,它显示列表视图 单击列表视图后,用户应移动到编辑数据活动,在编辑数据活动中,数据将显示在编辑文本框中,以进行更新或删除
我的代码使用一个参数item name运行良好,但是当我使用item description和item price时,出现了这个错误
private static final String TAG = "ListDataActivity";
DatabaseHelper mDatabaseHelper;
private ListView mListView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_data);
mListView = (ListView) findViewById(R.id.listView);
mDatabaseHelper = new DatabaseHelper(this);
populateListView();
}
private void populateListView() {
Log.d(TAG, "populateListView: Displaying data in the ListView.");
Cursor data = mDatabaseHelper.getData();
ArrayList<String> listData = new ArrayList<>();
while(data.moveToNext()){
listData.add(data.getString(1));
}
ListAdapter adapter = new ArrayAdapter<>(this, 安卓.R.layout.simple_list_item_1, listData);
mListView.setAdapter(adapter);
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
String name = adapterView.getItemAtPosition(i).toString();
String des = adapterView.getItemAtPosition(i).toString();
String pri = adapterView.getItemAtPosition(i).toString();
Log.d(TAG, "onItemClick: You Clicked on " + name);
Cursor data = mDatabaseHelper.getItemID(name, des, pri); //get the id associated with that name
int itemID = -1;
while(data.moveToNext()){
itemID = data.getInt(0);
}
if(itemID > -1){
Log.d(TAG, "onItemClick: The ID is: " + itemID);
Intent intent = new Intent(ListDataActivity.this, EditDataActivity.class);
Bundle extras = new Bundle();
extras.putInt("id",itemID);
extras.putString("name",name);
extras.putString("description",des);
extras.putString("price",pri);
intent.putExtras(extras);
startActivity(intent);
}
else{
toastMessage("No ID associated with that name");
}
}
});
}
private void toastMessage(String message){
Toast.makeText(this,message, Toast.LENGTH_SHORT).show();
}
新的更新代码,我做了以下更改
package com.example.saveanddisplaysql;
import 安卓.content.Intent;
import 安卓.database.Cursor;
import 安卓.os.Bundle;
import 安卓.support.annotation.Nullable;
import 安卓.support.v7.app.AppCompatActivity;
import 安卓.util.Log;
import 安卓.view.View;
import 安卓.widget.AdapterView;
import 安卓.widget.ArrayAdapter;
import 安卓.widget.ListAdapter;
import 安卓.widget.ListView;
import 安卓.widget.Toast;
import java.util.ArrayList;
public class ListDataActivity extends AppCompatActivity {
private static final String TAG = "ListDataActivity";
DatabaseHelper mDatabaseHelper;
private ListView mListView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_data);
mListView = (ListView) findViewById(R.id.listView);
mDatabaseHelper = new DatabaseHelper(this);
populateListView();
}
private void populateListView() {
Log.d(TAG, "populateListView: Displaying data in the ListView.");
Cursor data = mDatabaseHelper.getData();
class Model {
String name;
String desc;
int price;
}
ArrayList< Model> listData = new ArrayList<>();
while(data.moveToNext()){
Model model = new Model();
model.name = data.getString(1);
model.desc = data.getString(2);
model.price = data.getInt(3);
listData.add(model); }
ListAdapter adapter = new ArrayAdapter<>(this,
安卓.R.layout.simple_list_item_1, listData);
mListView.setAdapter(adapter);
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Model model = (Model)adapterView.getItemAtPosition(i);
String name = model.name;
String des = model.des;
String pri = model.pri;
Log.d(TAG, "onItemClick: You Clicked on " + name);
Cursor data = mDatabaseHelper.getItemID(name, des, pri); //get the id associated with these
int itemID = -1;
while(data.moveToNext()){
itemID = data.getInt(0);
}
if(itemID > -1){
Log.d(TAG, "onItemClick: The ID is: " + itemID);
Intent intent = new Intent(ListDataActivity.this, EditDataActivity.class);
Bundle extras = new Bundle();
extras.putInt("id",itemID);
extras.putString("name",name);
extras.putString("description",des);
extras.putString("price",pri);
intent.putExtras(extras);
startActivity(intent);
}
else{
toastMessage("No ID associated with that name");
}
}
});
}
private void toastMessage(String message){
Toast.makeText(this,message, Toast.LENGTH_SHORT).show();
}
}
Logcat:
2019-04-11 10:51:34.331 32717-32717/?I/art:Late-enabling-Xcheck:jni 2019-04-11 10:51:34.351 32717-32717/? D/TidaProvider:TidaProvider() 2019-04-11 10:51:34.364 32717-32717/com。实例saveanddisplaysql W/ReflectionUtils:java。lang.NoSuchMethodException:安卓。操作系统。MessageQueue#enableMonitor()#最佳匹配 在miui。util。反光片。findMethodBestMatch(ReflectionUtils.java:338) 在miui。util。反光片。findMethodBestMatch(ReflectionUtils.java:375) 在miui。util。反光片。callMethod(ReflectionUtils.java:800) 在miui。util。反光片。tryCallMethod(ReflectionUtils.java:818) 在安卓。操作系统。BaseLooper。enableMonitor(BaseLooper.java:47) 在安卓。操作系统。活套。prepareMainLooper(Looper.java:112) 在安卓。应用程序。活动线程。main(ActivityThread.java:6221) 在爪哇。朗。反思。方法调用(本机方法) 在com。安卓内部的操作系统。ZygoteInit$MethodandArgscaler。run(ZygoteInit.java:904) 在com。安卓内部的操作系统。合子体。main(ZygoteInit.java:794)
# 1 楼答案
“listData”数组列表是字符串类型的数组列表。所以只能在其中添加字符串。你需要创建一个类,比如
然后创建模型的数组列表
然后将模型ArrayList传递给adapter,并可以在需要时获得它