将json数据保存到sqlite中

时间:2016-01-23 17:46:26

标签: android sqlite

您好我需要在sqlite中保存json数据。但我得到了跟随错误。

  

无法在未调用的线程内创建处理程序   Looper.prepare()。

这是我的代码。它正在打开数据库打开/数据库创建......

/**
     * Async task class to get json by making HTTP call
     * */
    private class GetDetails extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // Showing progress dialog
            pDialog = new ProgressDialog(MainActivity.this);
            pDialog.setMessage("Please wait...");
            pDialog.setCancelable(false);
            pDialog.show();

        }

    @SuppressLint("NewApi")
    @Override
    protected Void doInBackground(Void... arg0) {
        // Creating service handler class instance
        ServiceHandler sh = new ServiceHandler();

        // Create an array to populate the spinner 
        branchlist = new ArrayList<String>();

        // Making a request to url and getting response
        String jsonStr = sh.makeServiceCall(url, ServiceHandler.GET);

        Log.d("Response: ", "> " + jsonStr);

//        System.out.println("response"+jsonStr);

        if (jsonStr != null) {

            try {
                 // jsonString is a string variable that holds the JSON 
                JSONArray itemArray=new JSONArray(jsonStr);
                for (int i = 0; i < itemArray.length(); i++) {
                   value=itemArray.getString(i);
                    Log.e("json", i+"="+value);

                    dbhelper=new  DataBaseHepler(getApplicationContext());
                    sqLiteDatabase=dbhelper.getWritableDatabase();
                    dbhelper.addinnformation(value,sqLiteDatabase);
                    Toast.makeText(getBaseContext(),"Data saved",Toast.LENGTH_LONG).show();
                    dbhelper.close();

                    branchlist.add(itemArray.getString(i));

                }
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        } else {
            Log.e("ServiceHandler", "Couldn't get any data from the url");
        }

        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        // Dismiss the progress dialog
        if (pDialog.isShowing())
            pDialog.dismiss();
        /**
         * Updating parsed JSON data into ListView
         * */

        ArrayAdapter<String> stringadapter = new ArrayAdapter<String>(MainActivity.this,
                android.R.layout.simple_spinner_dropdown_item,
                branchlist);

        spinner1.setAdapter(stringadapter);

//      spinner1
//      .setAdapter(new ArrayAdapter<String>(MainActivity.this,
//              android.R.layout.simple_spinner_dropdown_item,
//              branchlist));
    }

}

1 个答案:

答案 0 :(得分:0)

此错误是由于doInBackground(Void... arg0)方法内的Toast.makeText(getBaseContext(),"Data saved",Toast.LENGTH_LONG).show();

{{1}}

显然,Android操作系统不会让主线程以外的线程更改UI元素。请点击此链接了解详情:https://dzone.com/articles/android-%E2%80%93-multithreading-ui