mishti
mishti

Reputation: 193

Data retrive from server too slow

I am getting data on splash. I have almost 7k data that I am getting from the server. While getting data from the server I am saving it in the local database but the problem is the process is too slow. It almost takes 5 minutes. I want to resolve the problem. Please help.

Code to get data from server and save it into database:

                    private void productsDetailsApi() {

    String tag_json_obj = "json_obj_req";
    String url = Constants.PRODUCTS_DETAILS_URL;

    pBar.setVisibility(View.VISIBLE);


    JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST,
            url, new JSONObject(),
            new Response.Listener<JSONObject>() {

                @Override
                public void onResponse(JSONObject response) {

                    Log.e("product_response", response.toString());

                    try {

                        JSONArray jsonArray = response.getJSONArray("data");
                        for (int i = 0; i < jsonArray.length(); i++) {

                            JSONObject jsonObject = jsonArray.getJSONObject(i);
                            JSONObject company = jsonObject.getJSONObject("company");

                            ModelProductDetail modelProductDetail = new ModelProductDetail();
                            modelProductDetail.setCompany_id(jsonObject.getString("company_id"));
                            modelProductDetail.setProduct_name_nl(jsonObject.getString("name_nl"));
                            modelProductDetail.setProduct_name_fr(jsonObject.getString("name_fr"));
                            modelProductDetail.setProduct_desc(jsonObject.getString("description"));
                            modelProductDetail.setProduct_id(jsonObject.getString("id"));
                            modelProductDetail.setEan_code(jsonObject.getString("ean_code").trim());
                            modelProductDetail.setArticle_code(jsonObject.getString("article_code").trim());
                            modelProductDetail.setProduct_mbh(jsonObject.getString("mbh"));
                            modelProductDetail.setProduct_msrp(jsonObject.getString("msrp"));
                            modelProductDetail.setProduct_source(jsonObject.getString("source"));
                            modelProductDetail.setCompany_name(company.getString("name"));
                            modelProductDetail.setFranco_trading_value("");
                            modelProductDetail.setFranco_product_value(company.getString("franco_amount_product"));

                            dbHelper.addProductsDetails(modelProductDetail);
                        }

                        dbHelper.close();

                        ArrayList<ModelProductDetail> modelProductCodeList = dbHelper.getProductsArticleCode();
                        Log.e("TAG", "ModelProductDetail:art " + modelProductCodeList.size());


                        shopDetailsApi();


                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                    //pBar.setVisibility(View.GONE);
                }
            }, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            VolleyLog.e("Error: " + error.getMessage());
            // pBar.setVisibility(View.GONE);
        }
    });


    jsonObjReq.setRetryPolicy(new DefaultRetryPolicy(
            100000,
            DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
            DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));


    AppController.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj);
}

Databse Insert Query

           //add products data
public void addProductsDetails(ModelProductDetail modelProductDetail) {
    SQLiteDatabase productsDb = this.getWritableDatabase();
    ContentValues values = new ContentValues();

    values.put(KEY_PRODUCT_ID, modelProductDetail.getProduct_id());
    values.put(KEY_PRODUCT_NAME_FR, modelProductDetail.getProduct_name_fr());
    values.put(KEY_PRODUCT_NAME_NL, modelProductDetail.getProduct_name_nl());
    values.put(KEY_PRODUCT_DESC, modelProductDetail.getProduct_desc());
    values.put(KEY_PRODUCT_ART, modelProductDetail.getArticle_code());
    values.put(KEY_PRODUCT_EAN, modelProductDetail.getEan_code());
    values.put(KEY_PRODUCT_MBH, modelProductDetail.getProduct_mbh());
    values.put(KEY_PRODUCT_MSRP, modelProductDetail.getProduct_msrp());
    values.put(KEY_PRODUCT_SOURCE, modelProductDetail.getProduct_source());
    values.put(KEY_COMPANY_ID, modelProductDetail.getCompany_id());
    values.put(KEY_COMPANY_NAME, modelProductDetail.getCompany_name());
    values.put(KEY_FRANCO_TRADING, modelProductDetail.getFranco_trading_value());
    values.put(KEY_FRANCO_PRODUCT, modelProductDetail.getFranco_product_value());
    productsDb.insert(TABLE_PRODUCT_DETAILS, null, values);
    productsDb.close();
}

Upvotes: 0

Views: 36

Answers (1)

MikeT
MikeT

Reputation: 56953

You could try wrapping all the inserts inside a transaction e.g. :-

                    JSONArray jsonArray = response.getJSONArray("data");
                    dbHelper.getWritableDatabase.beginTransaction(); //<<<<<<<<<< ADDED
                    for (int i = 0; i < jsonArray.length(); i++) {

                        JSONObject jsonObject = jsonArray.getJSONObject(i);
                        JSONObject company = jsonObject.getJSONObject("company");

                        ModelProductDetail modelProductDetail = new ModelProductDetail();
                        modelProductDetail.setCompany_id(jsonObject.getString("company_id"));
                        modelProductDetail.setProduct_name_nl(jsonObject.getString("name_nl"));
                        modelProductDetail.setProduct_name_fr(jsonObject.getString("name_fr"));
                        modelProductDetail.setProduct_desc(jsonObject.getString("description"));
                        modelProductDetail.setProduct_id(jsonObject.getString("id"));
                        modelProductDetail.setEan_code(jsonObject.getString("ean_code").trim());
                        modelProductDetail.setArticle_code(jsonObject.getString("article_code").trim());
                        modelProductDetail.setProduct_mbh(jsonObject.getString("mbh"));
                        modelProductDetail.setProduct_msrp(jsonObject.getString("msrp"));
                        modelProductDetail.setProduct_source(jsonObject.getString("source"));
                        modelProductDetail.setCompany_name(company.getString("name"));
                        modelProductDetail.setFranco_trading_value("");
                        modelProductDetail.setFranco_product_value(company.getString("franco_amount_product"));

                        dbHelper.addProductsDetails(modelProductDetail);
                    }

                    dbHelper.getWritableDatabase.setTransactionSuccessful(); //<<<<<<<<<< ADDED
                    dbHelper.getWritableDatabase.endTransaction(); //<<<<<<<<<< ADDED
                    dbHelper.close();

To use the above you would also have to remove the line

    productsDb.close();

From the Insert Query

Upvotes: 1

Related Questions