当Caller片段运行时,请求能够成功地执行getWritableDatabase()。但是,当片段关闭或应用程序关闭时,在后台执行的volley请求无法执行getWritableDatabase()
public class ContactsTableManager {
private Context context;
private DBHelper ourHelper;
private SQLiteDatabase ourDatabase;
private static final String DATABASE_NAME = "Contacts";
private static final String DATABASE_TABLE = "ContactsTable";
private static final int DATABASE_VERSION = 1;
public static final String TAG = "contactsmanager.java";
public static final String KEY_NAME = "NAME";
public static final String KEY_NUMBER = "NUMBER";
public static final String KEY_ID = "ID";
public ContactsTableManager(Context c) {
context = c;
}
public ContactsTableManager open() {
ourHelper = new DBHelper(context);
ourDatabase = ourHelper.getWritableDatabase();
return this;
}
public void close() {
ourHelper.close();
}
public boolean addEntry(String Name, String Number) {
boolean success=false;
ContentValues cv = new ContentValues();
cv.put(KEY_NAME,Name);
cv.put(KEY_NUMBER,Number);
if(!checkData(cv)){
open();
success = ourDatabase.insert(DATABASE_TABLE, null, cv) > 0;
close();
}
return success;
}
private static class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
KEY_NAME + " TEXT NOT NULL, " + KEY_NUMBER + " TEXT NOT NULL); "
);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
onCreate(db);
}
}}
Volley,在一个片段上执行,我甚至尝试在onCreateView()中传递onCreateView()。没起作用。
private void sendNumberRequest(final String name, final String phoneNumber) {
String tag_string_req = "req_contact";
StringRequest strReq = new StringRequest(Request.Method.POST,
AppConfig.URL_Contacts, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
response=response.substring(response.indexOf("{"));
try {
JSONObject jObj = new JSONObject(response);
Log.e(TAG, "JSONObject: " + jObj.toString());
boolean error = jObj.getBoolean("error");
// Check for error node in json
if (!error) {
JSONObject user = jObj.getJSONObject("user");
ContactsTableManager contactsTableManager1=new ContactsTableManager(getActivity());
// Inserting row in users table
contactsTableManager1.addEntry(name,phoneNumber);
makeScreen();
}
} catch (JSONException e) {
// JSON error
Log.e(TAG, "Login Response: catch");
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, "Login Error: " + error.getMessage());
}
}) {
@Override
protected Map<String, String> getParams() {
// Posting parameters to login url
Map<String, String> params = new HashMap<String, String>();
params.put("tag", "contact_req");
params.put("name", name);
params.put("number", phoneNumber);
return params;
}
};
// Adding request to request queue
AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
}发布于 2015-04-14 18:24:26
当活动结束时,用于获取数据库的上下文就不再存在了。如果您想中止操作,那么可以使用onDestroy()取消可能的onDestroy()中的截取请求。
如果要将数据持久化到应用程序范围之外,请使用服务。
https://stackoverflow.com/questions/29634416
复制相似问题