抽空封裝了一下基於okHttp的網絡請求,剛剛封裝好get,post, download,upload請求,不須要建立線程,支持Json自動轉換 。
java
Get和Post(文件上傳也屬於Post)主要分倆個步驟:git
1.經過HttpRequestBuilder來建立請求實體對象。
github
2.經過HttpUtil的sendRequest方法來發送請求,而且使用ResultCallBack來接受返回內容,這個步驟中成功時,自動將json轉換爲實體,若失敗會執行ResultCallBack的onError 方法,並傳遞HttpException,這個對象中包含http錯誤代碼,好比404,500等。 json
get請求方式:服務器
private void getSample() { HttpRequest request = new HttpRequestBuilder().url(url) .addHeader("cookie", "df").addParams("key", "value") .method(HttpMethod.GET).build(); HttpUtil.getInstance().sendRequest(request, new ResultCallBack<Result>() { @Override public void onResponse(Result response) { // TODO Auto-generated method stub textView.setText(response.getData().getName()); } @Override public void onError(Request request, HttpException httpException) { // TODO Auto-generated method stub textView.setText("requestCode:"+httpException.getResponseCode()+" ErrorMessage:"+httpException.getMessage()); } }); }
post請求:cookie
private void postSample() { HttpRequest request = new HttpRequestBuilder() .url("http://www.oschina.net/action/user/hash_login") .addHeader("cookie", "df").addParams("email", "xxxxxxxxx") .addParams("pwd", "xxxxxxxxxxxxxxxxx") .method(HttpMethod.POST).build(); HttpUtil.getInstance().sendRequest(request, new ResultCallBack<String>() { @Override public void onError(Request request, HttpException httpException) { // TODO Auto-generated method stub } @Override public void onResponse(String response) { // TODO Auto-generated method stub textView.setText(response); } }); }
文件上傳:網絡
private void fileUploadSample() { if (!TextUtils.isEmpty(textView.getText())) { File file = new File(textView.getText().toString()); final String url = "服務器地址。。。"; HttpRequest request = new HttpRequestBuilder() .url(url) .method(HttpMethod.POST) .addFile( new FileDiscription(file) .setUploadPrograssListener(fileUploadListener)) .build(); HttpUtil.getInstance().sendRequest(request, new ResultCallBack<String>() { @Override public void onError(Request request, HttpException httpException) { // TODO Auto-generated method stub } @Override public void onResponse(String response) { // TODO Auto-generated method stub textView.setText(response); } }); } }
文件下載是Get請求,只不過沒有使用ResultCallBack而是使用了DownloadCallBack,能夠監聽下載進度,有完成和失敗的回調。代碼以下:ide
private void downLoad(){ HttpRequest request= new HttpRequestBuilder() .url("http://img.taopic.com/uploads/allimg/130501/240451-13050106450911.jpg") .method(HttpMethod.GET).downLoadPath(filePath, String.valueOf(new Date().getTime())+".jpg").build(); HttpUtil.getInstance().downLoad(request, new DownLoadCallBack() { @Override public void onDownLoading(int prograss) { // TODO Auto-generated method stub textView.setText(prograss+"%"); progressBar.setProgress(prograss); } @Override public void onDownLoadSuccess() { // TODO Auto-generated method stub textView.setText("down load success"); } @Override public void onDownLoadFail(HttpException ex) { // TODO Auto-generated method stub textView.setText(ex.getMessage()); } }); }
源碼地址:post
https://github.com/YounMario/HttpDemoui