在SQLite android应用程序中插入数据是挂起的

在SQLite android应用程序中插入数据是挂起的,android,sqlite,android-sqlite,sqliteopenhelper,Android,Sqlite,Android Sqlite,Sqliteopenhelper,当我通过主屏幕上的后台进程在SQLite中插入数据时,应用程序被挂起。我不能按任何按钮。在SQLite中成功插入数据后,应用程序工作正常。那个么,在SQLite中插入数据时,有什么方法可以让我轻松地点击按钮吗?[我不想以静默方式显示进度对话框和在db中插入数据] public void Auth(final SignIn mSignIn, final String fbId, final String msgId) { CustomRequest jsonObjectRequest =

当我通过主屏幕上的后台进程在SQLite中插入数据时,应用程序被挂起。我不能按任何按钮。在SQLite中成功插入数据后,应用程序工作正常。那个么,在SQLite中插入数据时,有什么方法可以让我轻松地点击按钮吗?[我不想以静默方式显示进度对话框和在db中插入数据]

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;
        }
    };

像这样使用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
            }

        }
    }
new InsertDataAsync(fri).execute();
其中fri是数据。朋友参考


希望这对您有所帮助。

显示您的代码。快速解决方案-您必须在主线程上处理。改为使用工作线程。只需在后台执行SQLITE。使用rectiveX android在后台执行。使用异步任务代替写入磁盘需要几百毫秒。这可以在后台发生,无需阻塞对话框,而无需冻结-用户不关心您如何或何时执行操作,他们希望使用应用程序。与其使用异步任务,不如使用Rx在工作线程中执行任务
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
            }

        }
    }
new InsertDataAsync(fri).execute();