进度对话框未显示在异步任务中

问题描述 投票:-2回答:2

如果我注释掉progressDialog.dismiss();我的进度对话框没有显示在异步任务中。然后显示进度对话框。我正在从服务器检索响应,在后台我将数据插入sqlite数据库。插入数据后,我从数据库中检索数据并显示在recyclerview中。

subcategory detail activity.Java

public class SubCategoryDetailActivity extends AppCompatActivity {

        RecyclerView recyclerViewSubCategoryDetail;
        ArrayList<SubCategoryDetailModelClass> subCategoryListDetailModelClassArray;
        SubCategoryDetailAdapter subCategoryDetailAdapter;
        ProductListDBHelper productListDBHelper;
        String subCategoryID;
        ProgressDialog progressDialog;
        ProgressBar progressBar;
        TextView view_cart,view_report;


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_sub_category_detail);
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);

            productListDBHelper= new ProductListDBHelper(this);

            view_cart=findViewById(R.id.txtv_view_cart);
            view_report=findViewById(R.id.txtv_view_report);
            recyclerViewSubCategoryDetail =findViewById(R.id.recyclerview_subcategory_detail);
            subCategoryListDetailModelClassArray =new ArrayList<>();

            Bundle mBundle = getIntent().getExtras();
            if (mBundle != null) {

                subCategoryID = String.valueOf(mBundle.getInt("SUBCATEGORY_ID"));
                Log.d("alliqwwww","" +subCategoryID);
            }


           /* subCategoryListDetailModelClassArray=productListDBHelper.getSubCategoryProductDetail(subCategoryID);

            recyclerViewSubCategoryDetail.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
            subCategoryDetailAdapter =new SubCategoryDetailAdapter(this, subCategoryListDetailModelClassArray);
            recyclerViewSubCategoryDetail.setAdapter(subCategoryDetailAdapter);*/

            SubCategoryDetailInsertionAsyncTask myAsyncTasks = new SubCategoryDetailInsertionAsyncTask();
            myAsyncTasks.execute();



        }


        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            onBackPressed();
            return super.onOptionsItemSelected(item);
        }


        private class SubCategoryDetailInsertionAsyncTask extends AsyncTask<StringRequest,Void,String> {
            int product_id,pcategory_id,subcategory_id;
            String product_name,product_desc,product_img,subcategory_name,subcategory_desc,subcategory_image,category_name;
            Integer insertedResult = -1;



            @Override
            protected void onPreExecute() {
                super.onPreExecute();

                progressDialog = new ProgressDialog(SubCategoryDetailActivity.this);
                progressDialog.setMessage("Please Wait");
                progressDialog.setCancelable(false);
                progressDialog.show();

                Log.d("progreeeesqwqw","ddd");


                progressBar.setVisibility(View.VISIBLE);*/
            }

            @Override
            protected String doInBackground(StringRequest... stringRequests) {



                StringRequest stringRequest = new StringRequest(Request.Method.GET, URLs.productURL,
                        new Response.Listener<String>() {
                            @Override
                            public void onResponse(String response) {
                                Log.d("zsded", response.toString());

                                try {

                                    JSONObject obj = new JSONObject(response);

                                    JSONArray productArray = obj.getJSONArray("products");


                                    for (int i = 0; i < productArray.length(); i++) {

                                        JSONObject productObject = productArray.getJSONObject(i);

                                        SubCategoryDetailModelClass subCategoryDetailModelClass = new SubCategoryDetailModelClass();

                                        subCategoryDetailModelClass.setProduct_name(productObject.getString("product-name"));
                                        subCategoryDetailModelClass.setProduct_id(productObject.getInt("product-id"));
                                        subCategoryDetailModelClass.setProduct_desc(productObject.getString("product-description"));
                                        subCategoryDetailModelClass.setProduct_imgURL(productObject.getString("product-image"));
                                        subCategoryDetailModelClass.setProduct_CategoryId(productObject.getInt("product-categoryid"));
                                        subCategoryDetailModelClass.setProduct_Category_Name(productObject.getString("category-name"));
                                        subCategoryDetailModelClass.setSubCategoryId(productObject.optInt("subcategory-id"));
                                        subCategoryDetailModelClass.setSubCategoryName(productObject.optString("subcategory-name"));
                                        subCategoryListDetailModelClassArray.add(subCategoryDetailModelClass);

                                        Log.d("subcatdetail", String.valueOf(subCategoryDetailModelClass));

                                    }

                                    for(int i = 0; i< subCategoryListDetailModelClassArray.size(); i++){
                                        product_name= subCategoryListDetailModelClassArray.get(i).getProduct_name();
                                        product_id= subCategoryListDetailModelClassArray.get(i).getProduct_id();
                                        product_desc= subCategoryListDetailModelClassArray.get(i).getProduct_desc();
                                        product_img= subCategoryListDetailModelClassArray.get(i).getProduct_imgURL();
                                        pcategory_id= subCategoryListDetailModelClassArray.get(i).getProduct_CategoryId();
                                        category_name= subCategoryListDetailModelClassArray.get(i).getProduct_Category_Name();
                                        subcategory_id= subCategoryListDetailModelClassArray.get(i).getSubCategoryId();
                                        subcategory_name= subCategoryListDetailModelClassArray.get(i).getSubCategoryName();
                                        Log.d("subcatdetaillllll", product_name);
                                        Log.d("subcatdetaillllll", String.valueOf(subcategory_id));
                                        Log.d("subcatdetaillllll",subcategory_name);

                                        ProductListDBHelper dbHelper = new ProductListDBHelper(getApplicationContext());
                                        SQLiteDatabase database = dbHelper.getWritableDatabase();
                                        dbHelper.insertSubCategoryProductDetail(product_name,product_id,product_desc,product_img,pcategory_id,category_name,subcategory_id,subcategory_name,database);
                                    }

                                    subCategoryListDetailModelClassArray = productListDBHelper.getSubCategoryProductDetail(subCategoryID);

                                    recyclerViewSubCategoryDetail.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
                                    subCategoryDetailAdapter = new SubCategoryDetailAdapter(getApplicationContext(), subCategoryListDetailModelClassArray);
                                    recyclerViewSubCategoryDetail.setAdapter(subCategoryDetailAdapter);
                                    subCategoryDetailAdapter.notifyDataSetChanged();


                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }
                            }
                        },
                        new Response.ErrorListener() {
                            @Override
                            public void onErrorResponse(VolleyError error) {
                                error.printStackTrace();
                                //  Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_SHORT).show();

                            }
                        });

           MySingleton.getInstance(getApplicationContext()).addToRequestQueue(stringRequest);


                return  "Task Completed";
            }
            @Override
            protected void onPostExecute(String s) {


                 progressDialog.dismiss();
                Log.d("progreeeesqwqw","eee");

            }
        }



    }
android sqlite android-recyclerview progressdialog
2个回答
0
投票

你的代码的问题是凌空请求是在后台线程上发出的。所以doInBackground不会等到你得到回复。

使用齐射时你不需要异步任务

showprogressbar在发出请求之前在onResponseonErrorResponse中解雇它


0
投票

您在async中使用async task请求。

1ST解决方案

删除Async Task并在你的activity中完成所有工作,并在凌空响应回调命中时解除进度对话框。

第二解决方案

只需使用qazxsw poi删除凌空请求。自己发送HTTP请求。那么这段代码就可以了。

最佳解决方案是第一个解决方案。

在你的onCreate方法中

删除这些行

Async task

粘贴这个

        SubCategoryDetailInsertionAsyncTask myAsyncTasks = new SubCategoryDetailInsertionAsyncTask();
        myAsyncTasks.execute();
© www.soinside.com 2019 - 2024. All rights reserved.