Java t_2扩展了SherlockListFragment{ private ArrayList results=new ArrayList(); 私有字符串tableName=DatabaseHandler.TABLE\u联系人; 私有sqlitedatabasenewdb; 专用静态最终整数相加=1; @凌驾 创建视图上的公共视图(布局、充气机、视图组容器、, Bundle savedInstanceState){ 设置选项菜单(真); 视图v=充气机充气(R.layout.fragment_2,空); 返回v; } 已创建ActivityState上的公共无效(Bundle savedInstanceState){ super.onActivityCreated(savedInstanceState); DatabaseHandler db=新的DatabaseHandler(getActivity()); db.addContact(新白名单(“Ravi”,“9100000000”)); openAndQueryDatabase(); displayResultList(); } 私有void openAndQueryDatabase(){ 试一试{ DatabaseHandler dbHelper=新的DatabaseHandler(getActivity().getApplicationContext()); newDB=dbHelper.getWritableDatabase(); 游标c=newDB.rawQuery(“从中选择姓名、电话号码”+ tableName,null); 如果(c!=null){ if(c.moveToFirst()){ 做{ String firstName=c.getString(c.getColumnIndex(“name”); int age=c.getInt(c.getColumnIndex(“电话号码”); 结果。添加(“姓名:+firstName+”,Pne:+age); }而(c.moveToNext()); } } }catch(sqlitese异常){ Log.e(getClass().getSimpleName(),“无法创建或打开数据库”); }最后{ if(newDB!=null) newDB.execSQL(“从“+tableName”中删除); newDB.close(); } } 私有void显示结果列表(){ TextView tView=新的TextView(getActivity()); setText(“此数据从数据库中检索,仅4个”+ “显示结果的百分比”); getListView().addHeaderView(tView); setListAdapter(新的ArrayAdapter(getActivity()), android.R.layout.simple_list_item_1,results)); getListView().setTextFilterEnabled(true); } @凌驾 创建选项菜单(菜单菜单,菜单充气机){ super.onCreateOptions菜单(菜单,充气机); MenuItem search=menu.add(0,add,0,“刷新”); search.setIcon(android.R.drawable.ic\u菜单\u添加); search.setShowAsAction(菜单项.显示为操作,如果为房间); } @凌驾 公共布尔值onOptionsItemSelected(菜单项项){ 开关(item.getItemId()){ 案例补充: addNumber(); 返回true; 违约: 返回super.onOptionsItemSelected(项目); } } public void addNumber(){ LayoutInflater工厂=LayoutInflater.from(getActivity()); 最终视图文本入口视图=工厂。充气(R.layout.text\u条目,空); 最终EditText名称=(EditText)textEntryView.findViewById(R.id.editText1); 最终EditText电话=(EditText)textEntryView.findViewById(R.id.editText2); name.setHint(“名称”); 电话。设置提示(“电话号码”); final AlertDialog.Builder alert=新建AlertDialog.Builder(getActivity()); alert.setTitle( “联系信息”).setView( textEntryView)。设置正按钮(“保存”, 新建DialogInterface.OnClickListener(){ 公共void onClick(对话框接口对话框, int(按钮){ DatabaseHandler db=新的DatabaseHandler(getActivity()); db.addContact(新的白名单(name.getText().toString(),phone.getText().toString()); openAndQueryDatabase(); displayResultList(); } }).setNegativeButton(“取消”, 新建DialogInterface.OnClickListener(){ 公共void onClick(对话框接口对话框, int(按钮){ /* *用户单击了“取消”,所以请执行一些操作 */ } }); alert.show(); } }
为什么我的数据库数据不能保存?我正在一台真正的设备上运行这个应用程序。重新打开应用程序时,所有数据都会被删除。非常感谢您的帮助 我猜你又在重新创建数据库了..每次应用程序 开始Java t_2扩展了SherlockListFragment{ private ArrayList results=new ArrayList(); 私有字符串tableName=DatabaseHandler.TABLE\u联系人; 私有sqlitedatabasenewdb; 专用静态最终整数相加=1; @凌驾 创建视图上的公共视图(布局、充气机、视图组容器、, Bundle savedInstanceState){ 设置选项菜单(真); 视图v=充气机充气(R.layout.fragment_2,空); 返回v; } 已创建ActivityState上的公共无效(Bundle savedInstanceState){ super.onActivityCreated(savedInstanceState); DatabaseHandler db=新的DatabaseHandler(getActivity()); db.addContact(新白名单(“Ravi”,“9100000000”)); openAndQueryDatabase(); displayResultList(); } 私有void openAndQueryDatabase(){ 试一试{ DatabaseHandler dbHelper=新的DatabaseHandler(getActivity().getApplicationContext()); newDB=dbHelper.getWritableDatabase(); 游标c=newDB.rawQuery(“从中选择姓名、电话号码”+ tableName,null); 如果(c!=null){ if(c.moveToFirst()){ 做{ String firstName=c.getString(c.getColumnIndex(“name”); int age=c.getInt(c.getColumnIndex(“电话号码”); 结果。添加(“姓名:+firstName+”,Pne:+age); }而(c.moveToNext()); } } }catch(sqlitese异常){ Log.e(getClass().getSimpleName(),“无法创建或打开数据库”); }最后{ if(newDB!=null) newDB.execSQL(“从“+tableName”中删除); newDB.close(); } } 私有void显示结果列表(){ TextView tView=新的TextView(getActivity()); setText(“此数据从数据库中检索,仅4个”+ “显示结果的百分比”); getListView().addHeaderView(tView); setListAdapter(新的ArrayAdapter(getActivity()), android.R.layout.simple_list_item_1,results)); getListView().setTextFilterEnabled(true); } @凌驾 创建选项菜单(菜单菜单,菜单充气机){ super.onCreateOptions菜单(菜单,充气机); MenuItem search=menu.add(0,add,0,“刷新”); search.setIcon(android.R.drawable.ic\u菜单\u添加); search.setShowAsAction(菜单项.显示为操作,如果为房间); } @凌驾 公共布尔值onOptionsItemSelected(菜单项项){ 开关(item.getItemId()){ 案例补充: addNumber(); 返回true; 违约: 返回super.onOptionsItemSelected(项目); } } public void addNumber(){ LayoutInflater工厂=LayoutInflater.from(getActivity()); 最终视图文本入口视图=工厂。充气(R.layout.text\u条目,空); 最终EditText名称=(EditText)textEntryView.findViewById(R.id.editText1); 最终EditText电话=(EditText)textEntryView.findViewById(R.id.editText2); name.setHint(“名称”); 电话。设置提示(“电话号码”); final AlertDialog.Builder alert=新建AlertDialog.Builder(getActivity()); alert.setTitle( “联系信息”).setView( textEntryView)。设置正按钮(“保存”, 新建DialogInterface.OnClickListener(){ 公共void onClick(对话框接口对话框, int(按钮){ DatabaseHandler db=新的DatabaseHandler(getActivity()); db.addContact(新的白名单(name.getText().toString(),phone.getText().toString()); openAndQueryDatabase(); displayResultList(); } }).setNegativeButton(“取消”, 新建DialogInterface.OnClickListener(){ 公共void onClick(对话框接口对话框, int(按钮){ /* *用户单击了“取消”,所以请执行一些操作 */ } }); alert.show(); } },java,android,sqlite,store,Java,Android,Sqlite,Store,为什么我的数据库数据不能保存?我正在一台真正的设备上运行这个应用程序。重新打开应用程序时,所有数据都会被删除。非常感谢您的帮助 我猜你又在重新创建数据库了..每次应用程序 开始 是的,因为在onCreate方法中创建db代码 public void onCreate(SQLiteDatabase db) { String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "(" + KEY
是的,因为在onCreate方法中创建db代码
public void onCreate(SQLiteDatabase db) {
String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
+ KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT,"
+ KEY_PH_NO + " TEXT" + ")";
db.execSQL(CREATE_CONTACTS_TABLE);
}
这是因为您正在从每个openAndQueryDatabase()中的表中删除所有记录
那么,我应该把它放在哪里?@StianInstebo你应该阅读更多的文档,从这里开始-
package com.spxc.wakeuptext.frag;
import java.util.ArrayList;
import java.util.List;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.DialogInterface;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.actionbarsherlock.app.SherlockListFragment;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;
import com.spxc.wakeuptext.R;
import com.spxc.wakeuptext.sql.DatabaseHandler;
import com.spxc.wakeuptext.sql.WhiteList;
public class Fragment_2 extends SherlockListFragment{
private ArrayList<String> results = new ArrayList<String>();
private String tableName = DatabaseHandler.TABLE_CONTACTS;
private SQLiteDatabase newDB;
private static final int ADD = 1;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
setHasOptionsMenu(true);
View v = inflater.inflate(R.layout.fragment_2, null);
return v;
}
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
DatabaseHandler db = new DatabaseHandler(getActivity());
db.addContact(new WhiteList("Ravi", "9100000000"));
openAndQueryDatabase();
displayResultList();
}
private void openAndQueryDatabase() {
try {
DatabaseHandler dbHelper = new DatabaseHandler(getActivity().getApplicationContext());
newDB = dbHelper.getWritableDatabase();
Cursor c = newDB.rawQuery("SELECT name, phone_number FROM " +
tableName, null);
if (c != null ) {
if (c.moveToFirst()) {
do {
String firstName = c.getString(c.getColumnIndex("name"));
int age = c.getInt(c.getColumnIndex("phone_number"));
results.add("Name: " + firstName + ",Pne: " + age);
}while (c.moveToNext());
}
}
} catch (SQLiteException se ) {
Log.e(getClass().getSimpleName(), "Could not create or Open the database");
} finally {
if (newDB != null)
newDB.execSQL("DELETE FROM " + tableName);
newDB.close();
}
}
private void displayResultList() {
TextView tView = new TextView(getActivity());
tView.setText("This data is retrieved from the database and only 4 " +
"of the results are displayed");
getListView().addHeaderView(tView);
setListAdapter(new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1, results));
getListView().setTextFilterEnabled(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
MenuItem search = menu.add(0, ADD, 0, "Refresh");
search.setIcon(android.R.drawable.ic_menu_add);
search.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case ADD:
addNumber();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public void addNumber(){
LayoutInflater factory = LayoutInflater.from(getActivity());
final View textEntryView = factory.inflate(R.layout.text_entry, null);
final EditText name = (EditText) textEntryView.findViewById(R.id.editText1);
final EditText phone = (EditText) textEntryView.findViewById(R.id.editText2);
name.setHint("Name");
phone.setHint("Phone Number");
final AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
alert.setTitle(
"Contact information").setView(
textEntryView).setPositiveButton("Save",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
DatabaseHandler db = new DatabaseHandler(getActivity());
db.addContact(new WhiteList(name.getText().toString(), phone.getText().toString()));
openAndQueryDatabase();
displayResultList();
}
}).setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
/*
* User clicked cancel so do some stuff
*/
}
});
alert.show();
}
}
public void onCreate(SQLiteDatabase db) {
String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
+ KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT,"
+ KEY_PH_NO + " TEXT" + ")";
db.execSQL(CREATE_CONTACTS_TABLE);
}
finally {
if (newDB != null)
newDB.execSQL("DELETE FROM " + tableName);
newDB.close();
}