簡體   English   中英

進度欄未與Android Picasso回調一起顯示

[英]Progress Bar is not showing with android picasso callbacks

我正在使用Picasso庫在應用程序中進行圖像緩存,並且在加載這些圖像時,我想顯示一個進度條。 我為畢加索添加了一個回調,但進度條未顯示。 這是我的代碼

    public class ShowProduct extends AsyncTask<String,String,ArrayList> {
@SuppressLint("StaticFieldLeak")
private static Context context;
private int width,height;
private JSONObject parsed;
static ArrayList<Data> returno=new ArrayList<>();
private String title,name,id,desc,regular_price,sale_price,code,size_guide_img,fabric,disclaimer,ref_id,ref_type;
static  String[] image_info,image_gallery,color_array,size_array;
ShowProduct(Context ctx) {context = ctx;}

@Override
protected ArrayList doInBackground(String... strings) {
    String url = strings[0];
    getProduct(url);
    return returno;
}
    private void getProduct(String url) {
    JsonObjectRequest mJsonArrayRequest = new JsonObjectRequest(Request.Method.GET,url,null, new Response.Listener<JSONObject>() {
        public void onResponse(JSONObject response) {
            Log.d("response", response.toString());
            parsed = response;
            try {
                returno = parseJson(parsed);
            } catch (ParseException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }
            , new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            NetworkResponse errorResponse = error.networkResponse;
            if (errorResponse != null && errorResponse.data != null) {
                String statusCode = String.valueOf(errorResponse.statusCode);
                Log.d("l", "Status code is " + statusCode);
                String fullMessage = new String(errorResponse.data);
                Log.w("k", "Error message is " + fullMessage);
            }
        }
    });
    RequestQueue requestQueue = Volley.newRequestQueue(context);
    requestQueue.add(mJsonArrayRequest);
}
private ArrayList<Data> parseJson(JSONObject jsonMessage) throws ParseException, JSONException {
    if(context.getResources().getConfiguration().orientation==1){
        width= getScreenWidth(context); height=getScreenHeight(context)/2-50;
    }
    else if(context.getResources().getConfiguration().orientation==2) {
        width = getScreenWidth(context);
        height = getScreenHeight(context) - 200;
    }
    JSONObject product;
    JSONObject attributes;
    JSONArray image_array;
    JSONArray gallery_array;
    JSONArray pa_color_array;
    JSONArray pa_size_array;
    JSONArray featured_products;
    JSONObject similar_products;
    ArrayList<Data> images=new ArrayList<>();
    ArrayList<Data> similar=new ArrayList<>();
    DatabaseOperations DB = new DatabaseOperations(context);
    if (jsonMessage != null) {
        try {
            //Products
            product = jsonMessage.getJSONObject("product");
            if(product!=null){
                         id=product.getString("id");
                        name=product.getString("name");
                        name=name.replace("&amp;","&");
                         desc=product.getString("desc");
                desc=desc.replace("&amp;","&");
                        image_array=product.getJSONArray("image_url");
                         image_info=new String[image_array.length()];
                        for(int b=0; b<image_array.length();b++) {
                            image_info[b] = image_array.get(b).toString();
                        }
                        gallery_array=product.getJSONArray("gallery");
                        image_gallery=new String[gallery_array.length()];
                        for(int b=0; b<gallery_array.length();b++) {
                            image_gallery[b] = gallery_array.get(b).toString();
                        }
                         regular_price=product.getString("regular_price");
                         sale_price=product.getString("sale_price");
                         code=product.getString("code");
                         size_guide_img=product.getString("size_guide_img");
                         fabric=product.getString("fabric");
                         disclaimer=product.getString("disclaimer");
                        attributes = product.getJSONObject("attributes");
                        pa_color_array=attributes.getJSONArray("pa_color");
                        color_array=new String[pa_color_array.length()];
                        for(int b=0; b<pa_color_array.length();b++) {
                            color_array[b] = pa_color_array.get(b).toString();
                        }
                        pa_size_array=attributes.getJSONArray("pa_size");
                         size_array=new String[pa_size_array.length()];
                        for(int b=0; b<pa_size_array.length();b++) {
                            size_array[b] = pa_size_array.get(b).toString().toUpperCase();
                        }
                DB.deletebeforeSaving("Products",id);
                DB.put_ProductActivity_Data(DB,"Products",id,name,desc,image_info[0], Arrays.toString(image_gallery),regular_price,sale_price,code,size_guide_img,fabric,disclaimer,Arrays.toString(color_array),Arrays.toString(size_array));
                ProductActivity.prod_name.setText(name);

                Picasso.with(context)
                        .load(image_info[0])
                        //.placeholder(R.drawable.loading)
                        .error(R.mipmap.ic_launcher)
                        .resize(width,height)
                        .centerInside()
                        .onlyScaleDown()
                        .into(ProductActivity.prod_img, new Callback() {
                            @Override
                            public void onSuccess() {
                                ProductActivity.prod_img.setVisibility(View.VISIBLE);
                                ProductActivity.progressBar.setVisibility(View.GONE);
                            }

                            @Override
                            public void onError() {
                            }
                        })
                ;
                ProductActivity.prod_img.setContentDescription(image_info[0]);
                for (int a=0; a<image_gallery.length;a++){
                    images.add(new Data(image_gallery[a]));
                }
                recycleSetHorizonatal(images,context,ProductActivity.horizontal_recycle,R.layout.product_images_scrollview,1);

                if (sale_price.equals("null")){
                    ProductActivity.sale_price.setText(sale_price);
                    ProductActivity.prod_price.setText(regular_price);
                }
                else {
                    ProductActivity.prod_price.setText(regular_price);
                    ProductActivity.prod_price.setPaintFlags(ProductActivity.prod_price.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
                    ProductActivity.sale_price.setVisibility(View.VISIBLE);
                    ProductActivity.sale_price.setText(sale_price);
                }
                ProductActivity.prod_desc.setText(desc);
                ProductActivity.prod_code.setText(code);
                ProductActivity.prod_add_info.setText(fabric);
                ProductActivity.prod_col_name.setText(color_array[0]);
                ProductActivity.spiner.setPrompt("Select Size");
                ArrayAdapter<String> size= new ArrayAdapter<String>(context,android.R.layout.simple_spinner_item, size_array);
                size.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                ProductActivity.spiner.setAdapter(size);

            }

            //Featured Products
            featured_products = jsonMessage.getJSONArray("featured_products");
            if(featured_products!=null){
                for (int i=0; i<featured_products.length();i++){
                    similar_products=featured_products.getJSONObject(i);
                    if(similar_products!=null){
                        title=similar_products.getString("title");
                        title=title.replace("&amp;","&");
                        image_array=similar_products.getJSONArray("image");
                        image_info=new String[image_array.length()];
                        for(int b=0; b<image_array.length();b++) {
                            image_info[b] = image_array.get(b).toString();
                        }


               regular_price=similar_products.getString("regular_price");
                        int reg_price=Integer.valueOf(regular_price);
                        sale_price=similar_products.getString("sale_price");
                        ref_id=similar_products.getString("ref_id");
                        ref_type=similar_products.getString("ref_type");
                        DB.deletebeforeSaving("Similar_Products",ref_id);
                        DB.put_Similar_reference(DB,"Reference",ref_id,id);
                      DB.put_Similar_products

                      (DB,"Similar_Products",title,reg_price
                       ,sale_price,image_info[0],ref_id,ref_type);
                        similar.add(new 
                      Data(ref_id,image_info[0],title,regular_price
                   ,sale_price,ref_type));
                    }
                }

                recycleSetHorizonatal(similar,context,ProductActivity.horizontal_recycler_view_feature,R.layout.products,4);
                ProductActivity.swipe.setRefreshing(false);
        }
            DB.close();
        } catch (final JSONException e) {
            Log.e("parse error", "Json parsing error: " + e.getMessage());
        }
    }
    return null;
}

static void recycleSetHorizonatal(ArrayList<Data> data_to_be_shown, Context context,RecyclerView view, int layout,int values) {
    ProductActivity.HorizontalAdapter horizontalAdapter = new ProductActivity.HorizontalAdapter(data_to_be_shown, context,layout, values);
    LinearLayoutManager horizontalLayoutManager = new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false);
    view.setLayoutManager(horizontalLayoutManager);
    view.setAdapter(horizontalAdapter);
    horizontalAdapter.notifyDataSetChanged();
}

 }

XML在這里

        <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/logo_img">
        <TextView
        android:id="@+id/product_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:textSize="24sp"
        android:layout_marginTop="20dp"
        android:textColor="@color/black"
        android:text="Product name"
        android:gravity="center"

        />

    <ImageView
        android:id="@+id/prod_img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:adjustViewBounds="true"
        android:layout_marginTop="10dp"
        android:scaleType="fitXY"
        android:visibility="gone"
        android:layout_below="@id/product_name"/>
    <ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/progressBar"
        android:layout_centerHorizontal="true"
        android:visibility="visible"
        android:backgroundTint="@color/brumanoGolden"
        android:layout_below="@id/product_name"/>

依賴項編譯'com.android.volley:volley:1.0.0'

    compile 'com.squareup.okhttp3:okhttp:3.8.1'
    compile 'com.squareup.picasso:picasso:2.5.2'
     compile 'com.jakewharton.picasso:picasso2-okhttp3-downloader:1.1.0'

我已經使用完整的asynctask類更新了代碼。

嘗試在onPreExecute中設置可見性,也許訪問未拋出的UI線程存在一些問題。

@Override
protected void onPreExecute() {
    super.onPreExecute();
    ProductActivity.progressBar.setVisibility(View.VISIBLE);
}

然后,當您想使進度不可見時,可以這樣設置:

    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        ProductActivity.progressBar.setVisibility(View.GONE);
    }

試試下面的代碼:

@Override
protected void onPreExecute() {
    super.onPreExecute();
    showProgress(getContext().getString(R.string.uploading), getContext(), false);
}

   @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
       cancelProgress();
    }

public static void showProgress(String message, Context context, boolean cancellable) {
        if (context == null)
            return;

        if (checkProgressOpen())
            return;
        dialog = new ProgressDialog(context);
        dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        dialog.setMessage(message == null ? "Please wait..." : (message));
        dialog.setCancelable(cancellable);
        try {
            dialog.show();
        } catch (Exception e) {
            // catch exception for activity paused and dialog is going to be
            // show.
        }
    }

    public static boolean checkProgressOpen() {
        if (dialog != null && dialog.isShowing())
            return true;
        else
            return false;
    }

    public static void cancelProgress() {
        if (checkProgressOpen()) {
            try {
                dialog.dismiss();
            } catch (Exception e) {
            }
            dialog = null;
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM