在 SQLite 中插入数据 android 应用挂起
Inserting data in SQLite android app is hang
当我通过主屏幕上的后台进程在 SQLite
中插入数据时,应用程序挂起。我无法点击任何按钮。在 SQLite
中成功插入数据后,应用程序运行正常。那么在 SQLite
中插入数据时有什么方法可以轻松点击按钮吗? [我不想显示进度对话框和在数据库中静默插入数据]
public void Auth(final SignIn mSignIn, final String fbId, final String msgId) {
CustomRequest jsonObjectRequest = new CustomRequest(Request.Method.POST, General.LOGIN, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject jsonObject) {
Log.e(LOGTAG, "SignIn Response - " + jsonObject.toString());
try {
JSONObject jData = jsonObject.getJSONObject(General.DATA);
String status = jData.getString(General.STATUSCODE);
if (status.equalsIgnoreCase("1")) {
// success
dbHelper = new DbHelper(activity);
if (dbHelper.dbIsOpen()) {
} else {
dbHelper.open();
}
authHandleFetchAuthFriendResponse(jData.getJSONObject(General.FRIENDLIST));
dbHelper.close();
}
} catch (IllegalStateException e) {
e.printStackTrace();
dbHelper.close();
} catch (Exception e) {
Log.e(LOGTAG, "SignIn Response Exception - " + jsonObject.toString());
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Log.e(LOGTAG, "SignIn Error : " + volleyError.toString());
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("deviceMake", General.DEVICEMAKE);
params.put("deviceId", GiftAMeal.getInstance().getDeviceId());
params.put("deviceToken", GiftAMeal.getInstance().getDeviceToken());
params.put("userName", GiftAMeal.getInstance().getUserName());
params.put("password", GiftAMeal.getInstance().getPassword());
return params;
}
};
//这里是为了从服务器上取数据
public void authHandleFetchAuthFriendListResponse(JSONArray jsonArray) {
for (int i = 0; i < jsonArray.length(); i++) {
try {
Friendlist r = new Friendlist(jsonArray.getJSONObject(i));
dbHelper.createGiftAMealFriendlist(r);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
//插入数据的方法
public long createGiftAMealFriendlistNew(Data.Friend fri) {
ContentValues initialValues = new ContentValues();
// Attributes of Friendlist Table
initialValues.put(friendListId, fri.getFriendListId());
initialValues.put(fromUserId, fri.getFromUserId());
initialValues.put(toUserId, fri.getToUserId());
initialValues.put(facebookSyncFlag, fri.getFacebookSyncFlag());
initialValues.put(requestStatus, fri.getRequestStatus());
initialValues.put(requestSentDate, fri.getRequestSendDate());
initialValues.put(requestAcceptedDate, fri.getRequestAcceptedDate());
initialValues.put(requestRejectedDate, fri.getRequestRejectedDate());
initialValues.put(USER_ID, fri.getUSERID());
initialValues.put(email, fri.getEmail());
initialValues.put(userName, fri.getUserName());
initialValues.put(fbID, fri.getFbID());
long rowid = mDb.insert(GiftAMeal_FRIENDLIST_TABLE, null, initialValues);
return rowid;
}
像这样使用 AsyncTask
class InsertDataAsync extends AsyncTask<Void, Void, Long> {
ProgressDialog progressDialog;
Data.Friend fri;
InsertDataAsync(Data.Friend fri) {
this.fri = fri;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog.setMessage("Please wait...");
progressDialog.show();
}
@Override
protected Long doInBackground(Void... voids) {
try {
return createGiftAMealFriendlistNew(fri);
} catch (Exception e) {
e.printStackTrace();
}
return 0L;
}
@Override
protected void onPostExecute(Long id) {
super.onPostExecute(id);
progressDialog.dismiss();
if (id > 0) {
//data insert success
} else {
//some error occurred
}
}
}
然后这样称呼 class
new InsertDataAsync(fri).execute();
其中 fri
是 Data.Friend
参考。
希望对您有所帮助。
当我通过主屏幕上的后台进程在 SQLite
中插入数据时,应用程序挂起。我无法点击任何按钮。在 SQLite
中成功插入数据后,应用程序运行正常。那么在 SQLite
中插入数据时有什么方法可以轻松点击按钮吗? [我不想显示进度对话框和在数据库中静默插入数据]
public void Auth(final SignIn mSignIn, final String fbId, final String msgId) {
CustomRequest jsonObjectRequest = new CustomRequest(Request.Method.POST, General.LOGIN, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject jsonObject) {
Log.e(LOGTAG, "SignIn Response - " + jsonObject.toString());
try {
JSONObject jData = jsonObject.getJSONObject(General.DATA);
String status = jData.getString(General.STATUSCODE);
if (status.equalsIgnoreCase("1")) {
// success
dbHelper = new DbHelper(activity);
if (dbHelper.dbIsOpen()) {
} else {
dbHelper.open();
}
authHandleFetchAuthFriendResponse(jData.getJSONObject(General.FRIENDLIST));
dbHelper.close();
}
} catch (IllegalStateException e) {
e.printStackTrace();
dbHelper.close();
} catch (Exception e) {
Log.e(LOGTAG, "SignIn Response Exception - " + jsonObject.toString());
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Log.e(LOGTAG, "SignIn Error : " + volleyError.toString());
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("deviceMake", General.DEVICEMAKE);
params.put("deviceId", GiftAMeal.getInstance().getDeviceId());
params.put("deviceToken", GiftAMeal.getInstance().getDeviceToken());
params.put("userName", GiftAMeal.getInstance().getUserName());
params.put("password", GiftAMeal.getInstance().getPassword());
return params;
}
};
//这里是为了从服务器上取数据
public void authHandleFetchAuthFriendListResponse(JSONArray jsonArray) {
for (int i = 0; i < jsonArray.length(); i++) {
try {
Friendlist r = new Friendlist(jsonArray.getJSONObject(i));
dbHelper.createGiftAMealFriendlist(r);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
//插入数据的方法
public long createGiftAMealFriendlistNew(Data.Friend fri) {
ContentValues initialValues = new ContentValues();
// Attributes of Friendlist Table
initialValues.put(friendListId, fri.getFriendListId());
initialValues.put(fromUserId, fri.getFromUserId());
initialValues.put(toUserId, fri.getToUserId());
initialValues.put(facebookSyncFlag, fri.getFacebookSyncFlag());
initialValues.put(requestStatus, fri.getRequestStatus());
initialValues.put(requestSentDate, fri.getRequestSendDate());
initialValues.put(requestAcceptedDate, fri.getRequestAcceptedDate());
initialValues.put(requestRejectedDate, fri.getRequestRejectedDate());
initialValues.put(USER_ID, fri.getUSERID());
initialValues.put(email, fri.getEmail());
initialValues.put(userName, fri.getUserName());
initialValues.put(fbID, fri.getFbID());
long rowid = mDb.insert(GiftAMeal_FRIENDLIST_TABLE, null, initialValues);
return rowid;
}
像这样使用 AsyncTask
class InsertDataAsync extends AsyncTask<Void, Void, Long> {
ProgressDialog progressDialog;
Data.Friend fri;
InsertDataAsync(Data.Friend fri) {
this.fri = fri;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog.setMessage("Please wait...");
progressDialog.show();
}
@Override
protected Long doInBackground(Void... voids) {
try {
return createGiftAMealFriendlistNew(fri);
} catch (Exception e) {
e.printStackTrace();
}
return 0L;
}
@Override
protected void onPostExecute(Long id) {
super.onPostExecute(id);
progressDialog.dismiss();
if (id > 0) {
//data insert success
} else {
//some error occurred
}
}
}
然后这样称呼 class
new InsertDataAsync(fri).execute();
其中 fri
是 Data.Friend
参考。
希望对您有所帮助。