App works on WIFI but not on 3G

☆樱花仙子☆ 提交于 2019-12-12 07:37:48

问题


There are two activities: Main and Detail Activity.

Main Activity is basically a GridView. Detail Activity is basically shows the clicked item's detail information. I am passing selected item's id (pid) from the Main to the Detail Activity.

I am facing an issue as follows. Initially, I have 3G connection (cellular connection) and clicked on the first item and see the corresponding item detail in the Detail Activity, it works perfectly fine, and go back to the Main Activity, then clicked on the second item, then unfortunately it still shows me the first item in the DetailActivity that I clicked initially.

I switched from 3g to wifi while app is on the active and open. No matter what I click, it still shows me the first item that I clicked initially.

But when I delete the app and reinstall it and get either wifi access only, the app works perfectly fine.

In the following implementation, Connection URL (PRODUCT_DETAIL_URL) is http, not https. I am using Volley library for the network connection.

DetailActivity.java

private void productDetailInit() {
      // it is http
        StringRequest postRequest = new StringRequest(Request.Method.POST, Config.PRODUCT_DETAIL_URL,
                new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                            try {
                                jsonObject = response;
                                loadJsonData();
                            } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        error.printStackTrace();
                    }
                }
            ) {
            @Override
            protected Map<String, String> getParams() {
                Map<String, String> params = new HashMap<>();
                params.put("id", productID);
                return params;
            }
        };

        RetryPolicy policy = new DefaultRetryPolicy(1000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
        postRequest.setRetryPolicy(policy);
        CustomVolleyRequest.getInstance(this).getRequestQueue().add(postRequest);
    }

CustomVolleyRequest.java

public class CustomVolleyRequest {

private static CustomVolleyRequest customVolleyRequest;
private static Context context;
private RequestQueue requestQueue;
private ImageLoader imageLoader;

private CustomVolleyRequest(Context context) {
    this.context = context;
    this.requestQueue = getRequestQueue();

    imageLoader = new ImageLoader(requestQueue,
            new ImageLoader.ImageCache() {
                private final LruCache<String, Bitmap>
                        cache = new LruCache<String, Bitmap>(20);

                @Override
                public Bitmap getBitmap(String url) {
                    return cache.get(url);
                }

                @Override
                public void putBitmap(String url, Bitmap bitmap) {
                    cache.put(url, bitmap);
                }
            });
}

private class BitmapCache implements ImageLoader.ImageCache {

    private LruCache<String, Bitmap> mCache;

    public BitmapCache() {
        mCache = new LruCache<>(20);
    }

    @Override
    public Bitmap getBitmap(String url) {
        return mCache.get(url);
    }

    @Override
    public void putBitmap(String url, Bitmap bitmap) {
        // scaling bitmap for avoiding too much big images
        Bitmap scaled = ImageUtil.getInstance().scaleBitmap(bitmap);
        mCache.put(url, scaled);
    }
}

public static synchronized CustomVolleyRequest getInstance(Context context) {
    if (customVolleyRequest == null) {
        customVolleyRequest = new CustomVolleyRequest(context);
    }
    return customVolleyRequest;
}

public RequestQueue getRequestQueue() {
    if (requestQueue == null) {
        Cache cache = new DiskBasedCache(context.getCacheDir(), 10 * 1024 * 1024);
        Network network = new BasicNetwork(new HurlStack());
        requestQueue = new RequestQueue(cache, network);
        requestQueue.start();
    }
    return requestQueue;
}

 public ImageLoader getImageLoader() {
    return imageLoader;
 }

}

Adapter.java

 class ProductMainAdapter extends ArrayAdapter<ImageRecord> {
    private ImageLoader mImageLoader;
    private String jsonObject;

    ProductMainAdapter(Context context) {
        super(context, R.layout.grid_item);
        mImageLoader = CustomVolleyRequest.getInstance(this.getContext()).getImageLoader();
    }

    @NonNull
    @Override
    public View getView(final int position, View convertView, @NonNull ViewGroup parent) {
        final ViewHolder holder;
        if(convertView == null) {
            holder = new ViewHolder();
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.grid_item, parent, false);
            convertView.setBackgroundResource(R.drawable.round_gridview);
            holder.priceTagImage = (ImageView) convertView.findViewById(R.id.priceTag_IV);
            holder.textView = (TextView) convertView.findViewById(R.id.text);
            holder.imageView = (NetworkImageView) convertView.findViewById(R.id.picture);
            holder.priceTagRL = (RelativeLayout) convertView.findViewById(R.id.priceTag_RL);
            convertView.setTag(holder);
        }
        else {
            holder = (ViewHolder) convertView.getTag();
        }
        ImageRecord imageRecord = getItem(position);
        holder.imageView.setImageUrl(imageRecord != null ? imageRecord.getUrl() : null, mImageLoader);
        holder.imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                openProductDetail(position);
            }
        });
        holder.textView.setText(imageRecord != null ? imageRecord.getTitle() : null);
        holder.priceTagRL.setRotation(0);

        return convertView;
    }

    private class ViewHolder{
        TextView textView;
        ImageView priceTagImage;
        NetworkImageView imageView;
        RelativeLayout priceTagRL;
    }

    private void openProductDetail(int position) {
        try {
            ImageRecord imr = getItem(position);
            String productID = imr != null ? imr.getId() : "0";
            Intent intent = new Intent(getContext(), ProductDetailActivity.class);
             intent.putExtra("pid", productID);
             getContext().startActivity(intent);    
        } catch (Exception e) {
            Log.e("openProductDetail", "exception", e);
        }
    }

来源:https://stackoverflow.com/questions/41270574/app-works-on-wifi-but-not-on-3g

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!