Диалог хода выполнения не отображается в асинхронной задаче - PullRequest
0 голосов
/ 15 февраля 2019

Мое диалоговое окно прогресса не отображается в асинхронной задаче, если я закомментирую progressDialog.dismiss (); , то отображается диалоговое окно прогресса. Я получаю ответ от сервера и в фоновом режиме я вставляюданные в базе данных sqlite. После вставки данных я получаю данные из базы данных и показываю их в обзоре переработчика.

SubCategoryDetailActivity.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");

            }
        }



    }

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Вы используете async запрос в async task.

1-е решение

Удалите Async Task и выполняйте всю свою работу в activity и закрывайте диалоговое окно хода выполнения при попадании ответного вызова залпа.

2-е решение

Просто используйте Async task удалить запрос volly.Отправьте HTTP-запрос самостоятельно.тогда этот код будет работать.

Лучшее решение для этого - 1-е решение.

В вашем методе onCreate

удалите эти строки

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

И вставьтеэто

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


        StringRequest stringRequest = new StringRequest(Request.Method.GET, URLs.productURL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        // Your Code
                        //All your logic
                        progressDialog.dismiss();
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        error.printStackTrace();
                        progressDialog.dismiss();
                    }
                });

        MySingleton.getInstance(getApplicationContext()).addToRequestQueue(stringRequest);
0 голосов
/ 15 февраля 2019

Проблема с вашим кодом заключается в том, что запросы на залп выполняются в фоновом потоке уже. Так что doInBackground не будет ждать, пока вы не получите ответ.

Вам не нужна асинхронная задача при использовании залпа

showprogressbar перед отправкой запроса и отклонение его в onResponse и onErrorResponse

...