La aplicación funciona en WIFI pero no en 3G

Hay dos actividades: Actividad Main y Detail .

Main Activity es básicamente un GridView. Detail Activity es básicamente muestra la información de detalle del elemento pulsado. Estoy pasando el ID del ítem seleccionado ( pid ) desde el Main hasta la Activity Detail .

Estoy enfrentando un problema como sigue. Inicialmente, tengo una conexión 3G (conexión celular) y hice clic en el primer elemento y veo el detalle del elemento correspondiente en la Detail Activity , funciona perfectamente, y vuelvo a la Main Activity , luego hice clic en el segundo ítem y desafortunadamente Todavía me muestra el primer elemento en el DetailActivity que hice clic inicialmente.

Cambié de 3g a wifi mientras que la aplicación está en el activo y abierto. No importa lo que haga clic, todavía me muestra el primer elemento que he hecho clic inicialmente.

Pero cuando elimino la aplicación y reinstalarla y obtener acceso wifi sólo , la aplicación funciona perfectamente bien.

En la siguiente implementación, la URL de conexión (PRODUCT_DETAIL_URL) es http , no https . Estoy utilizando la biblioteca Volley para la conexión de red.

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); } } 

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.