使用xutils 请求超时报错了,其余的请求也不能请求成功,退出应用后重新进入请求就没问题

褚晓娜 发布于 2017/05/25 11:10
阅读 353
收藏 0

                            
用xutils 请求超时报错了,其余的请求也不能请求成功,退出应用后重新进入请求就没问题
这是http的请求方法:
public class MyhttpUtil {
    private static MyhttpUtil mHttp;
    private HttpCallBack  call;
    private Handler h = new Handler();
    public static MyhttpUtil getIntance(){
        if(mHttp==null){
            mHttp=new MyhttpUtil();
        }
        return mHttp;
    }
    /**
     * 
     * @param ctx
     * @param params 参数
     * @param url 请求地址
     * @param c 回调函数
     */
    @SuppressWarnings("unused")
    public void  get(final Context ctx,RequestParams params, HttpCallBack  c,boolean isLoad ){
        if(!DvAppUtil.isNetworkAvailable(ctx)){
            AppHelper.getNet(ctx);
            return ;
        }
        if(isLoad){
            Common.showLoading(ctx);
        }
        this.call=c;
        final String url=params.getUri().toString();
        LG.d(MyhttpUtil.class, "地址"+params.getUri().toString());
        params.setConnectTimeout(10000);
        //params.setCacheMaxAge(1000 );
        x.http().get(params, new Callback.CommonCallback<String>() {
            @Override
            public void onSuccess(String result) {
                Common.cancelLoading();
                LG.d(MyhttpUtil.class, url+"-"+result);
                if (StringUtil.isNotBlank(result)) {
                    try {
                        JSONObject j = JSONObject.parseObject(result);
                        call.result(j.toJSONString(),url);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }


            @Override
            public void onError(Throwable ex, boolean isOnCallback) {
                System.out.println("错误信息"+ex.getMessage());
            }


            @Override
            public void onCancelled(CancelledException cex) {
                System.out.println("错误信息"+cex.getMessage());
                //Common.showHintDialog(ctx, "错误信息"+cex.getMessage());
            }


            @Override
            public void onFinished() {
                Common.cancelLoading();
            }
        });
    }
    /**
     * 
     * @param ctx
     * @param params 参数
     * @param url 请求地址
     * @param c 回调函数
     */
    @SuppressWarnings("unused")
    public void  post(final Context ctx,RequestParams params,final HttpCallBack  c ,boolean isLoad ){
        if(!DvAppUtil.isNetworkAvailable(ctx)){
            AppHelper.getNet(ctx);
            return ;
        }
        if(isLoad){
            Common.showLoading(ctx);
        }
        final String url=params.getUri().toString();
        params.setConnectTimeout(1);
        LG.d(MyhttpUtil.class, "地址"+params.getUri().toString());
        x.http().post(params, new Callback.CommonCallback<String>() {
            @Override
            public void onSuccess(String result) {
                LG.d(MyhttpUtil.class, url+"-"+result);
                if (StringUtil.isNotBlank(result)) {
                    try {
                        JSONObject j = JSONObject.parseObject(result);
                        if(c!=null){
                            c.result(j.toJSONString(),url);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }


            @Override
            public void onError(Throwable ex, boolean isOnCallback) {
                ex.getMessage();
                JSONObject json = new JSONObject();
                json.put("code", "0");
                json.put("msg", "请求超时");
                if(c!=null){
                    c.result(json.toJSONString(),url);
                }
                //Common.showHintDialog(ctx, "错误信息"+ex.getMessage());
            }


            @Override
            public void onCancelled(CancelledException cex) {
                //Common.showHintDialog(ctx, "错误信息"+cex.getMessage());
                JSONObject json = new JSONObject();
                json.put("code", "0");
                json.put("msg", "请求超时");
                if(call!=null){
                    call.result(json.toJSONString(),url);
                }
            }


            @Override
            public void onFinished() {
                Common.cancelLoading();
                
            }
        });
    }
    /**
     * 
     * @param ctx
     * @param params 参数
     * @param url 请求地址
     * @param c 回调函数
     */
    @SuppressWarnings("unused")
    public void  del(final Context ctx,RequestParams params,HttpCallBack  c ,boolean isLoad ){
        if(!DvAppUtil.isNetworkAvailable(ctx)){
            AppHelper.getNet(ctx);
            return ;
        }
        if(isLoad){
            Common.showLoading(ctx);
        }
        this.call=c;
        final String url=params.getUri().toString();
        LG.d(MyhttpUtil.class, "地址"+params.getUri().toString());
        x.http().request(HttpMethod.DELETE, params,  new Callback.CommonCallback<String>() {
            @Override
            public void onSuccess(String result) {
                LG.d(MyhttpUtil.class, url+"-"+result);
                if (StringUtil.isNotBlank(result)) {
                    try {
                        JSONObject j = JSONObject.parseObject(result);
                        call.result(j.toJSONString(),url);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }


            @Override
            public void onError(Throwable ex, boolean isOnCallback) {
                ex.getMessage();
                //Common.showHintDialog(ctx, "错误信息"+ex.getMessage());
            }


            @Override
            public void onCancelled(CancelledException cex) {
                //Common.showHintDialog(ctx, "错误信息"+cex.getMessage());
            }


            @Override
            public void onFinished() {
                Common.cancelLoading();
            }
        });
    }
    /**
     * 
     * @param ctx
     * @param params 参数
     * @param url 请求地址
     * @param c 回调函数
     */
    @SuppressWarnings("unused")
    public void  put(final Context ctx,RequestParams params,final HttpCallBack  c ,boolean isLoad ){
        if(!DvAppUtil.isNetworkAvailable(ctx)){
            AppHelper.getNet(ctx);
            return ;
        }
        if(isLoad){
            Common.showLoading(ctx);
        }
        final String url=params.getUri().toString();
        LG.d(MyhttpUtil.class, "地址"+params.getUri().toString());
        x.http().request(HttpMethod.PUT, params,  new Callback.CommonCallback<String>() {
            @Override
            public void onSuccess(String result) {
                LG.d(MyhttpUtil.class, url+"-"+result);
                if (StringUtil.isNotBlank(result)) {
                    try {
                        JSONObject j = JSONObject.parseObject(result);
                        c.result(j.toJSONString(),url);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }


            @Override
            public void onError(Throwable ex, boolean isOnCallback) {
                ex.getMessage();
                //Common.showHintDialog(ctx, "错误信息"+ex.getMessage());
            }


            @Override
            public void onCancelled(CancelledException cex) {
                //Common.showHintDialog(ctx, "错误信息"+cex.getMessage());
            }


            @Override
            public void onFinished() {
                Common.cancelLoading();
            }
        });
    }

    public interface HttpCallBack{
        void result(String r,String url);
    }
    /**
     * 支付请求
     * @param u
     * @param xml
     */
    public static void pay(String u,Map<String ,String > map,HttpCallBack  c){

        // TODO Auto-generated method stub
        //组建xml数据
        StringBuilder xml = new StringBuilder();
        xml.append("<xml>");
        for(String s:map.keySet()){
            xml.append("<"+s+">"+map.get(s)+"</"+s+">");
        }
        xml.append("</xml>");
        try {
            byte[] xmlbyte = xml.toString().getBytes("UTF-8");
            URL url = new URL(u);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(5000);
            conn.setDoOutput(true);// 允许输出
            conn.setDoInput(true);
            conn.setUseCaches(false);// 不使用缓存
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Connection", "Keep-Alive");// 维持长连接
            conn.setRequestProperty("Charset", "UTF-8");
            conn.setRequestProperty("Content-Length",
                    String.valueOf(xmlbyte.length));
            conn.setRequestProperty("Content-Type", "text/xml; charset=UTF-8");
            conn.setRequestProperty("X-ClientType", "2");//发送自定义的头信息

            conn.getOutputStream().write(xmlbyte);
            conn.getOutputStream().flush();
            conn.getOutputStream().close();


            if (conn.getResponseCode() != 200)
                throw new RuntimeException("请求url失败");

            InputStream is = conn.getInputStream();// 获取返回数据


            // 使用输出流来输出字符(可选)
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            byte[] buf = new byte[1024];
            int len;
            while ((len = is.read(buf)) != -1) {
                out.write(buf, 0, len);
            }
            String string ="<?xml version=\"1.0 \" encoding=\"UTF-8\" ?>"+ out.toString("UTF-8");
            out.close();
            // xml解析
            String version = null;
            String seqID = null;
            XmlPullParser parser = Xml.newPullParser();
            String l = "<VCOM version='1.1'><loginlink>11111023</loginlink><errmsg>dfft</errmsg></VCOM>";  
            try {
                /* parser.setInput(new ByteArrayInputStream(string.substring(1)
                        .getBytes("UTF-8")), "UTF-8");*/
                parser.setInput(new ByteArrayInputStream(out.toString("UTF-8").getBytes()), "UTF-8");
                int eventType = parser.getEventType();
                JSONObject json = new JSONObject();
                while (eventType != XmlPullParser.END_DOCUMENT) {
                    switch (eventType) {  
                    case XmlPullParser.START_DOCUMENT:// 文档开始事件,可以进行数据初始化处理  
                        break;  
                    case XmlPullParser.START_TAG:// 开始元素事件  
                        String name = parser.getName();  
                        if (!name.equalsIgnoreCase("xml")) {  
                            json.put(name, parser.nextText());
                        }   
                        break;  
                    case XmlPullParser.END_TAG:// 结束元素事件  
                        break;  
                    }
                    eventType = parser.next();
                }
                //System.out.println(json.toJSONString());
                c.result(json.toJSONString(), u);
            } catch (XmlPullParserException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
                //    System.out.println(e);
            }

        } catch (Exception e) {
            // TODO Auto-generated catch block
            //    System.out.println(e);
        }
    }
    private Runnable close = new Runnable() {

        @Override
        public void run() {
            Common.cancelLoading();
        }
    };
}
这是调用方法:
public void getIndex() {
        RequestParams params = new RequestParams(UrlUtil.index);
        if(StringUtil.isNotBlank(AppHelper.getUid(this))){
            params.addQueryStringParameter("userId", AppHelper.getUid(this));
        }    
        this.http.get(this, params, this, true);
    }

这是超时报错:
05-25 11:10:23.935: D/x_log:TaskProxy$InternalHandler.handleMessage(L:204)(647): null
05-25 11:10:23.935: D/x_log:TaskProxy$InternalHandler.handleMessage(L:204)(647): java.net.SocketTimeoutException
05-25 11:10:23.935: D/x_log:TaskProxy$InternalHandler.handleMessage(L:204)(647):     at java.net.PlainSocketImpl.read(PlainSocketImpl.java:492)
05-25 11:10:23.935: D/x_log:TaskProxy$InternalHandler.handleMessage(L:204)(647):     at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46)
05-25 11:10:23.935: D/x_log:TaskProxy$InternalHandler.handleMessage(L:204)(647):     at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:241)
05-25 11:10:23.935: D/x_log:TaskProxy$InternalHandler.handleMessage(L:204)(647):     at java.io.BufferedInputStream.fillbuf(BufferedInputStream.java:168)
05-25 11:10:23.935: D/x_log:TaskProxy$InternalHandler.handleMessage(L:204)(647):     at java.io.BufferedInputStream.read(BufferedInputStream.java:227)
05-25 11:10:23.935: D/x_log:TaskProxy$InternalHandler.handleMessage(L:204)(647):     at com.android.okhttp.internal.Util.readAsciiLine(Util.java:316)
05-25 11:10:23.935: D/x_log:TaskProxy$InternalHandler.handleMessage(L:204)(647):     at com.android.okhttp.internal.http.RawHeaders.fromBytes(RawHeaders.java:308)
05-25 11:10:23.935: D/x_log:TaskProxy$InternalHandler.handleMessage(L:204)(647):     at com.android.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:135)
05-25 11:10:23.935: D/x_log:TaskProxy$InternalHandler.handleMessage(L:204)(647):     at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:644)
05-25 11:10:23.935: D/x_log:TaskProxy$InternalHandler.handleMessage(L:204)(647):     at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:351)
05-25 11:10:23.935: D/x_log:TaskProxy$InternalHandler.handleMessage(L:204)(647):     at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:300)
05-25 11:10:23.935: D/x_log:TaskProxy$InternalHandler.handleMessage(L:204)(647):     at com.android.okhttp.internal.http.HttpURLConnectionImpl.getHeaderFields(HttpURLConnectionImpl.java:164)
05-25 11:10:23.935: D/x_log:TaskProxy$InternalHandler.handleMessage(L:204)(647):     at org.xutils.http.request.HttpRequest.sendRequest(HttpRequest.java:226)
05-25 11:10:23.935: D/x_log:TaskProxy$InternalHandler.handleMessage(L:204)(647):     at org.xutils.http.loader.StringLoader.load(StringLoader.java:44)
05-25 11:10:23.935: D/x_log:TaskProxy$InternalHandler.handleMessage(L:204)(647):     at org.xutils.http.loader.StringLoader.load(StringLoader.java:16)
05-25 11:10:23.935: D/x_log:TaskProxy$InternalHandler.handleMessage(L:204)(647):     at org.xutils.http.request.UriRequest.loadResult(UriRequest.java:82)
05-25 11:10:23.935: D/x_log:TaskProxy$InternalHandler.handleMessage(L:204)(647):     at org.xutils.http.request.HttpRequest.loadResult(HttpRequest.java:277)
05-25 11:10:23.935: D/x_log:TaskProxy$InternalHandler.handleMessage(L:204)(647):     at org.xutils.http.HttpTask$RequestWorker.request(HttpTask.java:600)
05-25 11:10:23.935: D/x_log:TaskProxy$InternalHandler.handleMessage(L:204)(647):     at org.xutils.http.HttpTask.doBackground(HttpTask.java:305)
05-25 11:10:23.935: D/x_log:TaskProxy$InternalHandler.handleMessage(L:204)(647):     at org.xutils.common.task.TaskProxy$1.run(TaskProxy.java:62)
05-25 11:10:23.935: D/x_log:TaskProxy$InternalHandler.handleMessage(L:204)(647):     at org.xutils.common.task.PriorityRunnable.run(PriorityRunnable.java:21)
05-25 11:10:23.935: D/x_log:TaskProxy$InternalHandler.handleMessage(L:204)(647):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
05-25 11:10:23.935: D/x_log:TaskProxy$InternalHandler.handleMessage(L:204)(647):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
05-25 11:10:23.935: D/x_log:TaskProxy$InternalHandler.handleMessage(L:204)(647):     at java.lang.Thread.run(Thread.java:841)
05-25 11:10:23.945: D/[mobile_android](647): Common.cancelLoading()
求大神指教,这个问题怎么解决呢

加载中
返回顶部
顶部