我正在使用列表视图 Activity 将数据发送到编辑数据 Activity,这里有什么问题?
I'm using List View Activity to send data to Edit Data Activity, what's the problem here?
我正在从数据库中检索项目名称、项目描述和项目价格,当用户单击项目时,它将进入编辑 activity,用户可以在其中更新或删除数据,但是当我单击列表时它带我回到主要项目 Activity
当用户点击查看数据时,显示列表视图
单击列表视图后,用户应移至编辑数据 activity,其中编辑数据 activity 数据将显示在编辑文本框中以供更新或删除
我的代码 运行 使用一个参数项目名称没问题,但是当我使用项目描述和项目价格时,出现此错误
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, android.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 android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.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,
android.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: 延迟启用 -Xcheck:jni
2019-04-11 10:51:34.351 32717-32717/? D/TidaProvider: TidaProvider()
2019-04-11 10:51:34.364 32717-32717/com.example.saveanddisplaysql W/ReflectionUtils: java.lang.NoSuchMethodException: android.os.MessageQueue#enableMonitor()#bestmatch
在 miui.util.ReflectionUtils.findMethodBestMatch(ReflectionUtils.java:338)
在 miui.util.ReflectionUtils.findMethodBestMatch(ReflectionUtils.java:375)
在 miui.util.ReflectionUtils.callMethod(ReflectionUtils.java:800)
在 miui.util.ReflectionUtils.tryCallMethod(ReflectionUtils.java:818)
在 android.os.BaseLooper.enableMonitor(BaseLooper.java:47)
在 android.os.Looper.prepareMainLooper(Looper.java:112)
在 android.app.ActivityThread.main(ActivityThread.java:6221)
在 java.lang.reflect.Method.invoke(本机方法)
在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
你的"listData"ArrayList是一个String类型的数组列表。所以你只能在其中添加字符串。你需要创建一个 class like
class Model {
String name;
String desc;
int price;
}
然后创建模型的数组列表。
ArrayList< Model> listData = new ArrayList<>();
然后将该模型 ArrayList 传递给适配器,并在需要时也可以获取。
我正在从数据库中检索项目名称、项目描述和项目价格,当用户单击项目时,它将进入编辑 activity,用户可以在其中更新或删除数据,但是当我单击列表时它带我回到主要项目 Activity
当用户点击查看数据时,显示列表视图 单击列表视图后,用户应移至编辑数据 activity,其中编辑数据 activity 数据将显示在编辑文本框中以供更新或删除
我的代码 运行 使用一个参数项目名称没问题,但是当我使用项目描述和项目价格时,出现此错误
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, android.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 android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.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,
android.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: 延迟启用 -Xcheck:jni 2019-04-11 10:51:34.351 32717-32717/? D/TidaProvider: TidaProvider() 2019-04-11 10:51:34.364 32717-32717/com.example.saveanddisplaysql W/ReflectionUtils: java.lang.NoSuchMethodException: android.os.MessageQueue#enableMonitor()#bestmatch 在 miui.util.ReflectionUtils.findMethodBestMatch(ReflectionUtils.java:338) 在 miui.util.ReflectionUtils.findMethodBestMatch(ReflectionUtils.java:375) 在 miui.util.ReflectionUtils.callMethod(ReflectionUtils.java:800) 在 miui.util.ReflectionUtils.tryCallMethod(ReflectionUtils.java:818) 在 android.os.BaseLooper.enableMonitor(BaseLooper.java:47) 在 android.os.Looper.prepareMainLooper(Looper.java:112) 在 android.app.ActivityThread.main(ActivityThread.java:6221) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
你的"listData"ArrayList是一个String类型的数组列表。所以你只能在其中添加字符串。你需要创建一个 class like
class Model {
String name;
String desc;
int price;
}
然后创建模型的数组列表。
ArrayList< Model> listData = new ArrayList<>();
然后将该模型 ArrayList 传递给适配器,并在需要时也可以获取。