【发布时间】:2018-01-01 11:30:08
【问题描述】:
我在我的应用程序中使用 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("&","&");
desc=product.getString("desc");
desc=desc.replace("&","&");
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("&","&");
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 类更新了代码。
【问题讨论】:
-
你在哪里打电话给
ProductActivity.progressBar.setVisibility(View.VISIBLE)? -
在异步任务类中
-
粘贴完整代码
-
更新了看看@chandanicpatel
标签: android xml imageview picasso progress