基於okhttp的異步請求

抽空封裝了一下基於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

相關文章
相關標籤/搜索