当互联网连接4G和2G时,Volley要求不同的响应

时间:2016-06-12 11:34:16

标签: android android-volley

在项目中我正在实施“添加到收藏夹”,添加时必须在服务器数据库中记录。

我从json获得产品清单

{
    "id": 37,
    "name": "Apple",
    "price": 205,
    "photo": "~/IMG/Full/20166117138.jpg",
    "favorite": false
  }, 

如果用户将项目“添加到收藏夹 - 我会使用Volley进行POST请求。

URL?user_id=1095&product_id=37

在此POST请求之后,参数“收藏夹”将更改为 “true”

当用户将一些项目添加到收藏夹时,我正在检查连接超时我使用计时器

 waitTimer = new CountDownTimer(15000,300) {
                        public void onTick(long millisUntilFinished) {
                        }
                        public void onFinish() {
                            Toast.makeText(mContext,"Check connecting to internet ",Toast.LENGTH_SHORT).show();
                        }
                    }.start();

如果手机没有连接互联网,15秒后我会显示消息“检查连接到互联网”。如果移动设备已连接并且从服务器计时器获得响应,则会停止并将项目添加到收藏夹,更改图标。

问题:当用户连接WI-FI或移动互联网速度较快时,所有这一切都正常工作,但是当互联网连接较弱时,虽然重新设置来自服务器,但仍显示消息“检查连接到互联网“

我使用RecyclerView

public class PrudactAdapterC extends RecyclerView.Adapter<PrudactAdapterC.PrudactViewHolder> {
@Override
    public void  onBindViewHolder(final PrudactViewHolder prudactViewHolder, final int i) {
    prudactViewHolder.btn_favorite.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                prudactViewHolder.btn_favorite.setEnabled(false);
                prudactViewHolder.ll_favorite.setEnabled(false);
                if (p.getFav()==false){

                    myFadeInAnimation = AnimationUtils.loadAnimation(mContext, R.anim.fade_in);
                    prudactViewHolder.btn_favorite.startAnimation(myFadeInAnimation);

                   waitTimer = new CountDownTimer(15000,300) {
                        public void onTick(long millisUntilFinished) {
                        }
                        public void onFinish() {
                            Toast.makeText(mContext,"Check connecting to internet ",Toast.LENGTH_SHORT).show();

                            prudactViewHolder.btn_favorite.clearAnimation();
                            myFadeInAnimation.cancel();

                            prudactViewHolder.btn_favorite.setEnabled(true);
                            prudactViewHolder.ll_favorite.setEnabled(true);

                            /*p.setFav(false);
                            prudactViewHolder.btn_favorite.setBackgroundResource(R.drawable.icon_favorite_out);*/
                        }
                    }.start();

                    addToFav(p.getId(), prudactViewHolder, p);

                }

                else {

                   //

                }
            }
        });
        }

         void addToFav(final int id, final PrudactViewHolder prudactViewHolder, final PrudactModel p){

        String url = URLADD + "userid="+getClientId()+"&tovarid="+id;

        StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {

                        if (response.equals("1"))
                        {
                            if(waitTimer != null) {
                                waitTimer.cancel();
                                waitTimer = null;
                            }

                            prudactViewHolder.btn_favorite.clearAnimation();
                            myFadeInAnimation.cancel();

                            prudactViewHolder.btn_favorite.setBackgroundResource(R.drawable.icon_favorite_in);
                            p.setFav(true);

                            prudactViewHolder.ll_favorite.setEnabled(true);
                            prudactViewHolder.btn_favorite.setEnabled(true);

                        }
                        else  {

                            if(waitTimer != null) {
                                waitTimer.cancel();
                                waitTimer = null;
                            }

                            prudactViewHolder.btn_favorite.clearAnimation();
                            myFadeInAnimation.cancel();

                         /*   prudactViewHolder.btn_favorite.setBackgroundResource(R.drawable.icon_favorite_out);
                            p.setFav(false);*/

                            prudactViewHolder.ll_favorite.setEnabled(true);
                            prudactViewHolder.btn_favorite.setEnabled(true);
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(mContext,"Check connecting to internet",Toast.LENGTH_SHORT).show();
                        if(waitTimer != null) {
                            waitTimer.cancel();
                            waitTimer = null;
                        }

                        prudactViewHolder.btn_favorite.clearAnimation();
                        myFadeInAnimation.cancel();

//                        prudactViewHolder.btn_favorite.setBackgroundResource(R.drawable.icon_favorite_out);
//                        p.setFav(false);

                        prudactViewHolder.ll_favorite.setEnabled(true);
                        prudactViewHolder.btn_favorite.setEnabled(true);


                    }
                }){
            @Override
            protected Map<String,String> getParams(){
                Map<String,String> params = new HashMap<String, String>();
                return params;
            }
        };
                 RequestQueue requestQueue = Volley.newRequestQueue(mContext);
        requestQueue.add(stringRequest);
    }

        }

如果我的方法实施“添加到收藏夹”不对...让我知道))

1 个答案:

答案 0 :(得分:0)

我建议您使用CountDownTimer,而不是RetryPolicy实施。

你可以这样做:

stringRequest.setRetryPolicy(new DefaultRetryPolicy(
    15000, 
    DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
    DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

更容易维护并且应该解决您的问题。

有关RetryPolicy的更多信息,请查看this answer

要显示您的Toast,您可以执行以下操作:

@Override
public void onErrorResponse(VolleyError error) {
    if(error instanceof TimeoutError || error instanceof NoConnectionError) {
        Toast.makeText(mContext,"Check your internet connection",Toast.LENGTH_SHORT).show();

        // ...
    }
}
相关问题