Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package com.qiniu.android.http;
  
  import  android.os.Looper;
  import  android.os.Message;
  import  android.util.Log;
  
 
 import  org.apache.http.Header;
 import  org.apache.http.NoHttpResponseException;
 import  org.apache.http.conn.ConnectTimeoutException;
 import  org.json.JSONException;
 import  org.json.JSONObject;
 
 import java.net.URI;
定义请求回复处理方法
 
 public final class ResponseHandler extends AsyncHttpResponseHandler {
    
请求的地址
 
     private String host;
    
请求进度处理器
 
     private ProgressHandler progressHandler;
    
请求完成处理器
 
     private CompletionHandler completionHandler;
    
请求开始时间
 
     private long reqStartTime;
    
服务器IP
 
     private String ip = null;

    
服务器端口
 
     private int port = -1;
 
     private String path = null;
 
     public ResponseHandler(String urlCompletionHandler completionHandlerProgressHandler progressHandler) {
         super(Looper.getMainLooper());
         URI uri = null;
         try {
             uri = new URI(url);
             this. = uri.getHost();
             this. = uri.getPort();
             this. = uri.getPath();
         } catch (URISyntaxException e) {
             this. = "N/A";
             e.printStackTrace();
         }
         this. = completionHandler;
         this. = progressHandler;
     }
 
     private static ResponseInfo buildResponseInfo(int statusCode, Header[] headersbyte[] responseBody,
                                                   String hostString pathString ipint portdouble durationThrowable error) {
 
         if (error != null && error instanceof CancellationHandler.CancellationException) {
             return ResponseInfo.cancelled();
         }
 
         String reqId = null;
         String xlog = null;
         String xvia = null;
         if (headers != null) {
             for (Header h : headers) {
                 if ("X-Reqid".equals(h.getName())) {
                     reqId = h.getValue();
                 } else if ("X-Log".equals(h.getName())) {
                     xlog = h.getValue();
                 } else if ("X-Via".equals(h.getName())) {
                     xvia = h.getValue();
                 } else if ("X-Px".equals(h.getName())) {
                     xvia = h.getValue();
                 } else if ("Fw-Via".equals(h.getName())) {
                     xvia = h.getValue();
                 }
             }
         }
 
        String err = null;
        if (statusCode != 200) {
            if (responseBody != null) {
                try {
                    err = new String(responseBody.);
                    JSONObject obj = new JSONObject(err);
                    err = obj.optString("error"err);
                } catch (JSONException e) {
                    e.printStackTrace();
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
            } else {
                if (error != null) {
                    err = error.getMessage();
                    if (err == null) {
                        err = error.toString();
                    }
                }
            }
        } else {
            if (reqId == null) {
                err = "remote is not qiniu server!";
            }
        }
        if (statusCode == 0) {
            statusCode = .;
            String msg = error.getMessage();
            if (error instanceof IOException) {
                if (msg != null && msg.indexOf("UnknownHostException") == 0) {
                    statusCode = .;
                } else if (msg != null && msg.indexOf("Broken pipe") == 0) {
                    statusCode = .;
                } else if (error instanceof NoHttpResponseException) {
                    statusCode = .;
                } else if (error instanceof SocketTimeoutException) {
                    statusCode = .;
                } else if (error instanceof ConnectTimeoutException || error instanceof SocketException) {
                    statusCode = .;
                }
            }
        }
        return new ResponseInfo(statusCodereqIdxlogxviahostpathipportdurationerr);
    }
    private static JSONObject buildJsonResp(byte[] bodythrows Exception {
        String str = new String(body.);
        return new JSONObject(str);
    }
    @Override
    public void onSuccess(int statusCode, Header[] headersbyte[] responseBody) {
        double duration = (System.currentTimeMillis() - ) / 1000.0;
        JSONObject obj = null;
        Exception exception = null;
        try {
            obj = buildJsonResp(responseBody);
        } catch (Exception e) {
            exception = e;
        }
        ResponseInfo info = buildResponseInfo(statusCodeheadersnulldurationexception);
        Log.i("upload----success"info.toString());
        .complete(infoobj);
    }
    @Override
    public void onFailure(int statusCode, Header[] headersbyte[] responseBodyThrowable error) {
        double duration = (System.currentTimeMillis() - ) / 1000.0;
        ResponseInfo info = buildResponseInfo(statusCodeheadersresponseBodydurationerror);
        Log.i("upload----failed"info.toString());
        .complete(infonull);
    }
    @Override
    public void onProgress(int bytesWrittenint totalSize) {
        if ( != null) {
            .onProgress(bytesWrittentotalSize);
        }
    }
    @Override
    public void onStart() {
        this. = System.currentTimeMillis();
        super.onStart();
    }

    
hack the method for dns in background before receive msg in main looper

Parameters:
msg 发送的状态信息
    @Override
    protected void sendMessage(Message msg) {
        if (msg.what == .) {
            Object[] response = (Object[]) msg.obj;
            if (response != null && response.length >= 4) {
                Throwable e = (Throwableresponse[3];
                if (!(e instanceof UnknownHostException)) {
                    this. = Dns.getAddressesString();
                }
            }
        }
        super.sendMessage(msg);
    }
New to GrepCode? Check out our FAQ X