Android中利用观察者模式对UrlConnection进行封装

来源:互联网 发布:javascript 光标 编辑:程序博客网 时间:2024/06/16 19:15
public class HttpUtils{private HttpCallback httpCallback; // 访问接口后的回调private String path; // 接口路径private String method; // 访问的方法private Map<String, String> data;private String content = "";private MyTask myTask;public HttpUtils(HttpCallback httpCallback, String path, String method,Map<String, String> data){super();this.httpCallback = httpCallback;this.path = path;this.method = method;this.data = data;myTask = new MyTask();}public void excute(){myTask.execute(method);}private class MyTask extends AsyncTask<String, Integer, String>{@Overrideprotected String doInBackground(String... params){if (method.equals("POST")){return doPostByUrlConnection();} else if (method.equals("GET")){return doGetByUrlConnection();}return null;}}private String doPostByUrlConnection(){URL url = null;StringBuffer parms = new StringBuffer();for(Map.Entry<String, String> entry: data.entrySet()){parms.append(entry.getKey()+"="+entry.getValue() +"&");}if (data.size() != 0){parms.deleteCharAt(parms.length() - 1);}byte datas[] = parms.toString().getBytes();try{url = new URL(path);System.out.println("path :"+path);} catch (MalformedURLException e){e.printStackTrace();}HttpURLConnection urlConnection = null;try{urlConnection = (HttpURLConnection) url.openConnection();urlConnection.setDoInput(true);urlConnection.setDoOutput(true);urlConnection.setRequestMethod("POST");OutputStream outputStream;outputStream = urlConnection.getOutputStream();outputStream.write(datas);AndroidTools.logS("PostCODE: " + urlConnection.getResponseCode());if (urlConnection.getResponseCode() == 200){InputStream inputStream = urlConnection.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));content = reader.readLine();httpCallback.Success(content);}else {httpCallback.Failed("服务器连接不稳定,请稍后再试");}} catch (IOException e){httpCallback.Failed("网络连接失败,请稍后再试");}return content;}private String doGetByUrlConnection(){URL url = null;StringBuffer parms = new StringBuffer();parms.append(path);parms.append("?");for (Map.Entry<String, String> entry : data.entrySet()){parms.append(entry.getKey()).append("=").append(entry.getValue()).append("&");}if (data.size() != 0){parms.deleteCharAt(parms.length() - 1);}System.out.println(path);try{url = new URL(parms.toString());} catch (MalformedURLException e){e.printStackTrace();}HttpURLConnection urlConnection;try{urlConnection = (HttpURLConnection) url.openConnection();urlConnection.setRequestMethod("GET");AndroidTools.logS("GETCODE: " + urlConnection.getResponseCode());if (urlConnection.getResponseCode() == 200){InputStream inputStream = urlConnection.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));content = reader.readLine();httpCallback.Success(content);}} catch (IOException e){httpCallback.Failed("网络连接失败,请稍后再试");e.printStackTrace();}return null;}}
public interface HttpCallback{public void Success(String success);public void Failed(String failed);}


1 0
原创粉丝点击