点击后退按钮时,MainActivity未获得更新

时间:2017-08-25 20:00:17

标签: java android sqlite listview

所以我正在尝试做笔记或todo应用 当我插入数据时,数据将被插入数据库中,但当我返回时,它不会在主菜单上更新 这是 MainActivity

   package com.frolicfreak.bhushan.memo;
   import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.MenuInflater;
import android.view.MenuItem;
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;
import java.util.List;

import static com.frolicfreak.bhushan.memo.DatabaseHelper.Table_Name;
import static com.frolicfreak.bhushan.memo.DatabaseHelper.col1;
import static com.frolicfreak.bhushan.memo.DatabaseHelper.col2;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

FloatingActionButton fab;
DatabaseHelper mydb;

ListView listView;
ArrayAdapter<String> mAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mydb =new DatabaseHelper(this);

    fab= (FloatingActionButton)findViewById(R.id.fab);
    fab.setOnClickListener(this);

    ListView listView = (ListView)findViewById(R.id.list);
    registerForContextMenu(listView);

    ArrayList<String> theList =new ArrayList<>();
    Cursor data= mydb.getAllData();

    if (data.getCount()==0){
        Toast.makeText(MainActivity.this,"data not inserted",Toast.LENGTH_LONG).show();
    }
    else
    {
        while(data.moveToNext()){
            theList.add(data.getString(1));
            ListAdapter listAdapter=new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,theList);
            listView.setAdapter(listAdapter);
        }
    }
}

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    if (v.getId()==R.id.list) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu, menu);
    }
}

@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
    switch(item.getItemId()) {
        case R.id.edit:
            // edit stuff here
            return true;
        case R.id.delete:
            int count = mydb.deleterow(Table_Name, col1);
            return true;
        default:
            return super.onContextItemSelected(item);
    }
}


@Override
public void onClick(View v) {

    Intent intent= new Intent(this,Main2Activity.class);
    startActivity(intent);

}
}

和我的 DatabaaseHelper java文件

 package com.frolicfreak.bhushan.memo;

 import android.content.ContentValues;
 import android.content.Context;
 import android.database.Cursor;
 import android.database.sqlite.SQLiteDatabase;
 import android.database.sqlite.SQLiteOpenHelper;

 import java.util.ArrayList;

/**
  * Created by BHUSHAN on 24-08-2017.
 */

public class DatabaseHelper extends SQLiteOpenHelper {

public static final String Database_Name = "Memo.db";
public static final String Table_Name = "Memo";
public static final String col1 = "ID";
public static final String col2 = "data";


public DatabaseHelper(Context context) {
    super(context, Database_Name, null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {

    db.execSQL("create table " + Table_Name + "(ID integer primary key autoincrement, data text)");

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("drop table if exists " + Table_Name);
    onCreate(db);
}

public boolean insertData(String data, String Data) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(col2, Data);
    long result = db.insert(Table_Name, null, contentValues);
    if (result==-1)
        return false;
    else
        return true;
}

public ArrayList<String> getList(){
    ArrayList<String> taskList = new ArrayList<>();
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor= db.query(Table_Name,new String[]{col1},new String(col2),null,null,null,null);
    while (cursor.moveToNext()){
        int index= cursor.getColumnIndex(col1);
        taskList.add(cursor.getString(index));
    }
    cursor.close();
    db.close();
    return taskList;
}

public Cursor getAllData() {

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor res = db.rawQuery("SELECT * FROM " + Table_Name, null);
    return res;
}


public int deleterow(String table_Name, String col1) {
    SQLiteDatabase db = this.getReadableDatabase();
    int count = db.delete(Table_Name, DatabaseHelper.col1, null);
    return count;
}
}

我的 Main2Activity

 package com.frolicfreak.bhushan.memo;

 import android.support.design.widget.FloatingActionButton;
 import android.support.v7.app.AppCompatActivity;
 import android.os.Bundle;
 import android.view.View;
 import android.widget.EditText;
 import android.widget.Toast;

public class Main2Activity extends AppCompatActivity {
DatabaseHelper db;

EditText Data;
FloatingActionButton add;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);

    db = new DatabaseHelper(this);

    Data = (EditText)findViewById(R.id.edit);
    add =(FloatingActionButton)findViewById(R.id.add);

    AddData();
}

public void AddData(){
    add.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    boolean isInserted = db.insertData(Data.getText().toString(),
                            Data.getText().toString() );
                    if (isInserted==true)
                        Toast.makeText(Main2Activity.this,"data inserted",Toast.LENGTH_LONG).show();
                    else
                        Toast.makeText(Main2Activity.this,"data not inserted",Toast.LENGTH_LONG).show();
                }
            }
    );
}

}

现在还有一件事我真的想编辑和更新数据(选项)也是如此,如果有人可以帮助我吗? 当我从列表中删除任何数据时,当我重新打开应用程序时,所有数据都会被删除 所以请帮助 提前谢谢你

1 个答案:

答案 0 :(得分:0)

你应该在onResume函数中从数据库中获取数据,而不是在oncreate中。

将此代码添加到您的mainactivity中

@Override
public void onResume() {
    super.onResume(); 
    ArrayList<String> theList =new ArrayList<>();
    Cursor data= mydb.getAllData();
    listView.setAdapter(null);

    if (data.getCount()==0){
        Toast.makeText(MainActivity.this,"data not inserted",Toast.LENGTH_LONG).show();
    }
    else
    {
        while(data.moveToNext()){
            theList.add(data.getString(1));
            ListAdapter listAdapter=new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,theList);
            listView.setAdapter(listAdapter);
        }
    }
}