提交 3de4281d 编写于 作者: 门心叼龙's avatar 门心叼龙

code perfect

上级 5831f229
......@@ -10,6 +10,10 @@ import android.widget.TextView;
import com.google.gson.Gson;
import com.mxdl.okhttp3.bean.User;
import com.mxdl.okhttp3.ok_fly1.FlyHttpUtils;
import com.mxdl.okhttp3.ok_fly1.response.OnResponse;
import com.mxdl.okhttp3.response.AddUserResponse;
import com.mxdl.okhttp3.response.BaseResponse;
import java.io.IOException;
......@@ -107,4 +111,69 @@ public class Main2Activity extends AppCompatActivity {
}
});
}
public void login1(View view) {
FlyHttpUtils.getInstance()
.get()
.url("http://192.168.0.189:8080/user/login")
.addParams("username", "mxdl")
.addParams("password", "123456")
.builder()
.buildCall().execute(new OnResponse<BaseResponse>() {
@Override
public void onStart() {
Log.v("MYTAG", "onStart start...");
}
@Override
public void onSucc(BaseResponse response) {
Log.v("MYTAG", "onSucc start...");
Log.v("MYTAG", response.toString());
}
@Override
public void onFail(Exception e) {
Log.v("MYTAG", "onFail start...");
}
@Override
public void onComplete() {
Log.v("MYTAG", "onComplete start...");
}
});
}
public void addUser1(View view) {
FlyHttpUtils.getInstance()
.post()
.url("http://192.168.0.189:8080/user/addUser")
.body(new User("zhangsan", 123456))
.builder()
.buildCall().execute(new OnResponse<AddUserResponse>() {
@Override
public void onStart() {
Log.v("MYTAG", "onStart start...");
}
@Override
public void onSucc(AddUserResponse response) {
Log.v("MYTAG", "onSucc start...");
Log.v("MYTAG", response.toString());
}
@Override
public void onFail(Exception e) {
Log.v("MYTAG", "onFail start...");
}
@Override
public void onComplete() {
Log.v("MYTAG", "onComplete start...");
}
});
}
}
......@@ -128,32 +128,34 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
* 原生的get请求
*/
private void login() {
//创建个http客户端
OkHttpClient client = new OkHttpClient();
//构建一个url
HttpUrl httpUrl = HttpUrl.parse("http://192.168.31.105:8080/user/login").newBuilder()
.addQueryParameter("userName", "mxdl")
.addQueryParameter("passWord", "123456").build();
//根据url创建一个request
Request loginRequest = new Request.Builder().url(httpUrl).build();
//根据request创建一个call
Call call = client.newCall(loginRequest);
//开启一个异步请求
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.v("MYTAG", "onFailure start...");
Log.v("MYTAG", e.toString());
}
Log.v("MYTAG", "login start...");
new Thread(new Runnable() {
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.v("MYTAG", "onSucc start...");
Log.v("MYTAG", response.body().string());
public void run() {
//1.创建一个HttpClient
OkHttpClient httpClient = new OkHttpClient.Builder().build();
//2.创建一个request请求
//String url = "http://192.168.0.189:8080/user/login?username=mxdl&password=123456";
String url = "http://192.168.0.189:8080/user/login";
HttpUrl httpUrl = HttpUrl.get(url).newBuilder()
.addQueryParameter("username", "mxdl")
.addQueryParameter("password", "123456")
.build();
Request loginRequst = new Request.Builder().url(httpUrl).build();
//3.创建一个请求命令
Call loginCall = httpClient.newCall(loginRequst);
//4.发起一个同步的请求
try {
Response loginResponse = loginCall.execute();
Log.v("MYTAG", loginResponse.body().string());
} catch (IOException e) {
Log.v("MYTAG", e.toString());
}
}
});
}).start();
}
/**
......@@ -164,7 +166,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
OkHttpClient client = new OkHttpClient();
//构建一个request请求
final Request request = new Request.Builder().url("http://192.168.31.105:8080/user/addUser")
.post(RequestBody.create(MediaType.parse("application/json;charset=utf-8"),"{\"userName\":\"mxdl\",\"passWord\":123456}"))
.post(RequestBody.create(MediaType.parse("application/json;charset=utf-8"),"{\"username\":\"mxdl\",\"password\":123456}"))
.build();
//根据request创建一个call命令
Call call = client.newCall(request);
......@@ -190,11 +192,11 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
private void login1() {
//把登录的参数放在HashMap里
HashMap<String, String> params = new HashMap<>();
params.put("userName", "mxdl");
params.put("passWord", "123456");
params.put("username", "mxdl");
params.put("password", "123456");
//传入url,参数,回调开始请求
OkHttpManager.getInstance().get("http://192.168.31.105:8080/user/login", params, new OnResponse<BaseResponse>() {
OkHttpManager.getInstance().get("http://192.168.0.189:8080/user/login", params, new OnResponse<BaseResponse>() {
@Override
public void onStart() {
Log.v("MYTAG", "onStart...");
......@@ -227,7 +229,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
User user = new User("mxdl", 111);
//传入url,User和回调开启添加一个用户的请求
OkHttpManager.getInstance().post("http://192.168.31.105:8080/user/addUser", user, new OnResponse<AddUserResponse>() {
OkHttpManager.getInstance().post("http://192.168.0.189:8080/user/addUser", user, new OnResponse<AddUserResponse>() {
@Override
public void onStart() {
Log.v("MYTAG", "onStart...");
......@@ -237,7 +239,6 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
public void onSucc(AddUserResponse resDTO) {
Log.v("MYTAG", "onSucc...");
Log.v("MYTAG", resDTO.toString());
Log.v("MYTAG", resDTO.toString());
}
@Override
......@@ -258,7 +259,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
*/
private void login2() {
OkHttpUtils.get()
.url("http://192.168.31.105:8080/user/login")
.url("http://192.168.0.189:8080/user/login")
.addParams("userName", "mxdl")
.addParams("passWord", "123456")
.build()
......@@ -291,7 +292,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
*/
private void addUser2() {
OkHttpUtils.postString()
.url("http://192.168.31.105:8080/user/addUser")
.url("http://192.168.0.189:8080/user/addUser")
.content(new User("aaa", 111))
.mediaType(MediaType.parse("application/json;charset=utf-8"))
.build()
......
......@@ -34,5 +34,9 @@ PostRequest --> BaseRequestBuilder
RequestCall --> BaseRequest
RequestCall --> BaseCallback
class OkHttpUtils{
public GetBuilder get();
public PostBuilder post();
}
OkHttpUtils --> RequestCall
@enduml
\ No newline at end of file
package com.mxdl.okhttp3.ok_fly1;
import android.os.Handler;
import android.os.Looper;
import com.facebook.stetho.common.ExceptionUtil;
import com.google.gson.Gson;
import com.mxdl.okhttp3.ok_fly1.builder.GetBuilder;
import com.mxdl.okhttp3.ok_fly1.builder.PostBuilder;
import com.mxdl.okhttp3.ok_fly1.call.RequestCall;
import com.mxdl.okhttp3.ok_fly1.response.OnResponse;
import java.io.IOException;
import java.lang.reflect.ParameterizedType;
import java.util.concurrent.Executor;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Response;
/**
* Description: <FlyHttpUtils><br>
* Author: mxdl<br>
* Date: 2020/5/14<br>
* Version: V1.0.0<br>
* Update: <br>
*/
public class FlyHttpUtils {
private OkHttpClient okHttpClient;
private MainUiTherad mainUiTherad = new MainUiTherad();
class MainUiTherad implements Executor {
Handler handler = new Handler(Looper.getMainLooper());
@Override
public void execute(Runnable command) {
handler.post(command);
}
}
private FlyHttpUtils() {
okHttpClient = new OkHttpClient.Builder().build();
}
public static FlyHttpUtils getInstance() {
return FlyHttpUtilsHolder.flyHttpUtils;
}
public static class FlyHttpUtilsHolder {
public static FlyHttpUtils flyHttpUtils = new FlyHttpUtils();
}
public <T> void execute(RequestCall requestCall, final OnResponse<T> onResponse) {
requestCall.getCall().enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
onFail(e, onResponse);
}
@Override
public void onResponse(Call call, final Response response) {
try {
if (response.isSuccessful()) {
final String body = response.body().string();
Class<T> tClass = (Class<T>) ((ParameterizedType) onResponse.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
final T t = new Gson().fromJson(body, tClass);
onSucc(t, onResponse);
} else {
onFail(new Exception("未知异常"), onResponse);
}
} catch (final IOException e) {
onFail(e, onResponse);
}
}
});
}
private <T> void onFail(final Exception e, final OnResponse<T> onResponse) {
mainUiTherad.execute(new Runnable() {
@Override
public void run() {
if (onResponse != null) {
onResponse.onFail(e);
onResponse.onComplete();
}
}
});
}
private <T> void onSucc(final T t, final OnResponse<T> onResponse) {
mainUiTherad.execute(new Runnable() {
@Override
public void run() {
if (onResponse != null) {
onResponse.onSucc(t);
onResponse.onComplete();
}
}
});
}
public OkHttpClient getOkHttpClient() {
return okHttpClient;
}
public GetBuilder get() {
return new GetBuilder();
}
public PostBuilder post() {
return new PostBuilder();
}
}
package com.mxdl.okhttp3.ok_fly1.base;
import java.util.HashMap;
/**
* Description: <BaseBuidler><br>
* Author: mxdl<br>
* Date: 2020/5/14<br>
* Version: V1.0.0<br>
* Update: <br>
*/
public abstract class BaseBuidler<T> {
//请求的url
protected String url;
//请求的Headders
protected HashMap<String, String> headers = new HashMap<>();
//请求的参数
protected HashMap<String, String> parsms = new HashMap<>();
//构建url
public T url(String url) {
this.url = url;
return (T) this;
}
//构建一个header参数
public T addHeader(String key, String value) {
headers.put(key, value);
return (T) this;
}
//构建一个请求参数
public T addParams(String key, String value) {
parsms.put(key, value);
return (T) this;
}
//最终要构建的对象
public abstract BaseRequest builder();
}
\ No newline at end of file
package com.mxdl.okhttp3.ok_fly1.base;
import com.mxdl.okhttp3.ok_fly1.call.RequestCall;
import java.util.HashMap;
import okhttp3.Request;
/**
* Description: <BaseRequest><br>
* Author: mxdl<br>
* Date: 2020/5/14<br>
* Version: V1.0.0<br>
* Update: <br>
*/
public abstract class BaseRequest {
//请求的url
protected String url;
//请求的Headders
protected HashMap<String, String> headers = new HashMap<>();
//请求的参数
protected HashMap<String, String> parsms = new HashMap<>();
public BaseRequest(String url, HashMap<String, String> headers, HashMap<String, String> parsms) {
this.url = url;
this.headers = headers;
this.parsms = parsms;
}
public RequestCall buildCall(){
return new RequestCall(this);
}
public abstract Request builderRequest();
}
package com.mxdl.okhttp3.ok_fly1.builder;
import com.mxdl.okhttp3.ok_fly1.base.BaseBuidler;
import com.mxdl.okhttp3.ok_fly1.base.BaseRequest;
import com.mxdl.okhttp3.ok_fly1.request.GetRequst;
/**
* Description: <GetBuilder><br>
* Author: mxdl<br>
* Date: 2020/5/14<br>
* Version: V1.0.0<br>
* Update: <br>
*/
public class GetBuilder extends BaseBuidler<GetBuilder> {
@Override
public BaseRequest builder() {
return new GetRequst(url,headers,parsms);
}
}
package com.mxdl.okhttp3.ok_fly1.builder;
import com.mxdl.okhttp3.ok_fly1.base.BaseBuidler;
import com.mxdl.okhttp3.ok_fly1.base.BaseRequest;
import com.mxdl.okhttp3.ok_fly1.request.PostRequest;
import java.util.Observable;
/**
* Description: <PostBuilder><br>
* Author: mxdl<br>
* Date: 2020/5/14<br>
* Version: V1.0.0<br>
* Update: <br>
*/
public class PostBuilder extends BaseBuidler<PostBuilder> {
private Object body;
@Override
public BaseRequest builder() {
return new PostRequest(url,body,headers,parsms);
}
public BaseBuidler<PostBuilder> body(Object body){
this.body = body;
return this;
}
}
package com.mxdl.okhttp3.ok_fly1.call;
import com.mxdl.okhttp3.ok_fly1.FlyHttpUtils;
import com.mxdl.okhttp3.ok_fly1.base.BaseRequest;
import com.mxdl.okhttp3.ok_fly1.response.OnResponse;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
/**
* Description: <RequestCall><br>
* Author: mxdl<br>
* Date: 2020/5/14<br>
* Version: V1.0.0<br>
* Update: <br>
*/
public class RequestCall {
private BaseRequest request;
private Call call;
public RequestCall(BaseRequest request) {
this.request = request;
}
public void execute(OnResponse response){
Request request = this.request.builderRequest();
call = FlyHttpUtils.getInstance().getOkHttpClient().newCall(request);
FlyHttpUtils.getInstance().execute(this,response);
}
public Call getCall() {
return call;
}
}
package com.mxdl.okhttp3.ok_fly1.request;
import com.mxdl.okhttp3.ok_fly1.base.BaseRequest;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import okhttp3.HttpUrl;
import okhttp3.Request;
/**
* Description: <GetRequst><br>
* Author: mxdl<br>
* Date: 2020/5/14<br>
* Version: V1.0.0<br>
* Update: <br>
*/
public class GetRequst extends BaseRequest {
public GetRequst(String url, HashMap<String, String> headers, HashMap<String, String> parsms) {
super(url, headers, parsms);
}
@Override
public Request builderRequest() {
HttpUrl.Builder builder = HttpUrl.parse(url).newBuilder();
if(!parsms.isEmpty()){
Iterator<String> iterator = parsms.keySet().iterator();
while (iterator.hasNext()){
String key = iterator.next();
builder.addQueryParameter(key,parsms.get(key));
}
}
return new Request.Builder().url(builder.build()).build();
}
}
package com.mxdl.okhttp3.ok_fly1.request;
import com.google.gson.Gson;
import com.mxdl.okhttp3.ok_fly1.base.BaseRequest;
import java.util.HashMap;
import okhttp3.MediaType;
import okhttp3.Request;
import okhttp3.RequestBody;
/**
* Description: <PostRequest><br>
* Author: mxdl<br>
* Date: 2020/5/14<br>
* Version: V1.0.0<br>
* Update: <br>
*/
public class PostRequest extends BaseRequest {
private Object body;
public PostRequest(String url, Object body, HashMap<String, String> headers, HashMap<String, String> parsms) {
super(url, headers, parsms);
this.body = body;
}
@Override
public Request builderRequest() {
return new Request.Builder().url(url)
.post(RequestBody.create(MediaType.parse("application/json;charset=utf-8"), new Gson().toJson(body)))
.build();
}
}
package com.mxdl.okhttp3.ok_fly1.response;
/**
* Description: <OnResponse><br>
* Author: mxdl<br>
* Date: 2020/5/14<br>
* Version: V1.0.0<br>
* Update: <br>
*/
public abstract class OnResponse<T> {
public abstract void onStart();
public abstract void onSucc(T t);
public abstract void onFail(Exception e);
public abstract void onComplete();
}
@startuml
abstract class BaseBuidler<T>{
protected String url;
protected HashMap<String, String> headers ;
protected HashMap<String, String> parsms;
public T url(String url);
public T addHeader(String key, String value);
public T addParams(String key, String value) ;
public abstract BaseRequest builder();
}
class GetBuilder extends BaseBuidler{
public BaseRequest builder();
}
class PostBuilder extends BaseBuidler{
private Object body;
public BaseRequest builder();
public BaseBuidler<PostBuilder> body(Object body);
}
abstract class BaseRequest {
protected String url;
protected HashMap<String, String> headers;
protected HashMap<String, String> parsms;
public BaseRequest(String url, HashMap<String, String> headers, HashMap<String, String> parsms){};
public RequestCall buildCall();
public abstract Request builderRequest();
}
class GetRequst extends BaseRequest
class PostRequst extends BaseRequest
GetRequst --> BaseBuidler
PostRequst --> BaseBuidler
class RequestCall {
private Call mCall;
private BaseRequest mBaseRequest;
public <T> void execute(RequestListener<T> listener);
}
RequestCall --> BaseRequest
class OkHttpUtils{
private OkHttpClient okHttpClient;
public GetBuilder get();
public PostBuilder post();
public <T> void execute(RequestCall requestCall, final OnResponse<T> onResponse)
}
OkHttpUtils --> RequestCall
@enduml
\ No newline at end of file
......@@ -42,6 +42,10 @@ public class OkHttpManager {
return OkHttpManagerHolder.mHttpManager;
}
static class OkHttpManagerHolder {
static OkHttpManager mHttpManager = new OkHttpManager();
}
public <T> void post(String url, Object body, OnResponse<T> response) {
String jsonBody = new Gson().toJson(body);
MyCallBack callback = new MyCallBack(response);
......@@ -50,7 +54,7 @@ public class OkHttpManager {
new Request
.Builder()
.url(url)
.post(RequestBody.create(MediaType.parse("application/json;charset=utf-8"),jsonBody))
.post(RequestBody.create(MediaType.parse("application/json;charset=utf-8"), jsonBody))
.build())
.enqueue(callback);
......@@ -69,9 +73,4 @@ public class OkHttpManager {
mHttpClient.newCall(request).enqueue(callBack);
}
static class OkHttpManagerHolder {
static OkHttpManager mHttpManager = new OkHttpManager();
}
}
......@@ -71,41 +71,34 @@ public class MyCallBack<T> implements Callback {
}
@Override
public void onFailure( Call call, IOException e) {
public void onFailure(Call call, IOException e) {
sendMessage(ON_FAIL, e);
}
private void sendMessage(int what, Object e) {
Message message = new Message();
message.what = ON_FAIL;
message.what = what;
message.obj = e;
mHandler.sendMessage(message);
}
@Override
public void onResponse( Call call, Response response) {
public void onResponse(Call call, Response response) {
try {
if (response.isSuccessful()) {
Message message = new Message();
message.what = ON_SUCC;
String string = response.body().string();
message.obj = string;
mHandler.sendMessage(message);
sendMessage(ON_SUCC, string);
} else {
Message message = new Message();
message.what = ON_FAIL;
mHandler.sendMessage(message);
sendMessage(ON_FAIL, new Exception("未知异常"));
}
} catch (Exception e) {
Message message = new Message();
message.what = ON_FAIL;
message.obj = e;
mHandler.sendMessage(message);
sendMessage(ON_FAIL, e);
}
}
public void onStart() {
Message message = new Message();
message.what = ON_START;
mHandler.sendMessage(message);
sendMessage(ON_START, "");
}
......
@startuml
abstract class OnResponse{
public abstract void onStart();
public abstract void onSucc(T t);
public abstract void onFail(Exception e);
public abstract void onComplete();
}
interface Callback {
void onFailure(Call call, IOException e);
void onResponse(Call call, Response response);
}
class MyCallBack<T> implements Callback {
private OnResponse<T> mOnResponse;
private Handler mHandler = new Handler(Looper.getMainLooper())
void onFailure(Call call, IOException e);
void onResponse(Call call, Response response);
}
MyCallBack *--> OnResponse
class OkHttpManager {
private OkHttpClient mHttpClient;
public <T> void get(String url, HashMap<String, String> map, OnResponse<T> response)
public <T> void post(String url, Object body, OnResponse<T> response)
}
OkHttpManager o--> MyCallBack
@enduml
\ No newline at end of file
......@@ -15,7 +15,18 @@
android:text="异步的Post请求"
android:onClick="addUser"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="异步的Post请求"
android:onClick="login1"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="异步的Post请求"
android:onClick="addUser1"
/>
<TextView
android:id="@+id/txt_content"
android:layout_width="wrap_content"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册