【发布时间】:2018-01-11 23:17:22
【问题描述】:
我有 2 个活动,当我在第一个活动中输入内容并按“保存按钮”时,它会通过 SQLite 数据库保存文本。在第二个活动中,我有一个已保存项目的列表,当我单击其中一个时,onItemClick 方法需要触发并打开第三个活动,我可以在其中编辑或删除所选项目。 现在,当我单击一个项目时,一切正常。当我点击它时,第三个活动加载,但没有显示任何内容,几秒钟后它关闭并让我回到上一个活动。这是代码sn-ps:
第二个activity的代码sn-p,其中列表为:
DatabaseHelper mDatabaseHelper;
private ListView mListView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.list_layout);
mListView=(ListView) findViewById(R.id.listView);
mDatabaseHelper=new DatabaseHelper(this);
populateListView();
}
private void populateListView() {
Log.d(TAG,"populateListView: Displaying data in 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=the item saved
String name = adapterView.getItemAtPosition(i).toString();
Log.d(TAG,"onItemClick: You Clicked on "+ name);
Cursor data=mDatabaseHelper.getItemID(name);
int itemID= -1;
while (data.moveToNext()){
itemID = data.getInt(0);
}
if (itemID > -1){
Log.d(TAG,"onItemClick: The ID is: "+itemID);
Intent editScreenIntent = new Intent(MoneyTracking.this, EditDataActivity.class);
editScreenIntent.putExtra("id",itemID);
editScreenIntent.putExtra("name",name);
startActivity(editScreenIntent);
}
else{
toastMessage("No ID associated with that list item.");
}
}
});
}
/**
* Customizable toast
* @param message
*/
private void toastMessage(String message){
Toast.makeText(this,message,Toast.LENGTH_SHORT).show();
}}
然后是不会加载的“第三个活动”:
private Button btnSave2, btnDelete1;
private EditText editText00;
DatabaseHelper mDatabaseHelper;
private String selectedName;
private int selectedID;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.edit_data_layout);
btnSave2=(Button)findViewById(R.id.btnSaveTwo);
btnDelete1=(Button)findViewById(R.id.btnDelete);
editText00=(EditText) findViewById(R.id.editText00);
mDatabaseHelper=new DatabaseHelper(this);
Intent recievedIntent=getIntent();
selectedID=recievedIntent.getIntExtra("id",-1);
selectedName=recievedIntent.getStringExtra("name");
editText00.setText(selectedName);
btnSave2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String item=editText00.getText().toString();
if (!item.equals("")){
mDatabaseHelper.updateName(item,selectedID,selectedName);
}else{
toastMessage("Morate uneti nesto da bi ste sacuvali!");
}
}
});
btnDelete1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mDatabaseHelper.deleteName(selectedID,selectedName);
editText00.setText("");
toastMessage("Izbrisano!");
}
});
}
/**
* Customizable toast
* @param message
*/
private void toastMessage(String message){
Toast.makeText(this,message,Toast.LENGTH_SHORT).show();
}
}
数据库助手:
private static final String TAG="DatabaseHelper";
private static final String TABLE_NAME="mt_lists";
private static final String COL1= "ID";
private static final String COL2= "listndprice";
public DatabaseHelper(Context context) {
super(context, TABLE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
String createTable="CREATE TABLE "+ TABLE_NAME +" (ID INTEGER PRIMARY KEY AUTOINCREMENT, "+
COL2+" TEXT)";
db.execSQL(createTable);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);
onCreate(db);
}
public boolean appData(String item)
{
SQLiteDatabase db=this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL2, item);
Log.d(TAG, "appData: Adding "+item+" to "+TABLE_NAME);
long result=db.insert(TABLE_NAME, null, contentValues);
if (result == -1){
return false;
}
else {
return true;
}
}
/**
* Returns all the data from database
* @return
*/
public Cursor getData(){
SQLiteDatabase db = this.getWritableDatabase();
String query="SELECT * FROM " + TABLE_NAME;
Cursor data=db.rawQuery(query,null);
return data;
}
/**
*
* @param name
* @return
*/
public Cursor getItemID(String name){
SQLiteDatabase db = this.getWritableDatabase();
String query="SELECT"+ COL1 +" FROM "+TABLE_NAME+" WHERE "+COL2+ " = '" + name + " ' ";
Cursor data = db.rawQuery(query,null);
return data;
}
/**
* Update database
* @param newName
* @param id
* @param oldName
*/
public void updateName(String newName,int id,String oldName){
SQLiteDatabase db=this.getWritableDatabase();
String query="UPDATE"+TABLE_NAME+"SET"+COL2+"='"+newName+"' WHERE"+COL1+"= '"+id+"'"+"AND"+COL2+"= '"+oldName+"'";
Log.d(TAG,"updateName: query: "+query);
Log.d(TAG,"updateName: Setting name to "+newName);
db.execSQL(query);
}
/**
* Delete from database
* @param id
* @param name
*/
public void deleteName(int id,String name){
SQLiteDatabase db=this.getWritableDatabase();
String query="DELETE FROM" + TABLE_NAME + "WHERE" + COL1 + "= '" + id + "'" + " AND " + COL2 + "= '" +name +"'";
Log.d(TAG,"deleteName: query: "+query);
Log.d(TAG,"deleteName: Deleting "+name+"from database.");
db.execSQL(query);
}
编辑 日志猫: enter image description here
【问题讨论】:
-
你能发布 LogCat 吗?我想看看你的第三个活动关闭时是否有错误消息发布。
-
@Shn_Android_Dev 就是这样,我想:)
-
这不是我想要的——虽然这确实是 logcat,但我想查看堆栈跟踪。它应该看起来像几行连续的红色文本......也有可能实际上没有错误。在此期间,我会继续尝试弄清楚发生了什么,但请验证在您打开第三个活动时是否没有产生错误。
-
@Shn_Android_Dev 图片已更新,这是您要找的吗?
-
是的,请看我的回答,看看它是否适合你。
标签: java android android-activity