對okhttp的封裝類,okhttp見:https://github.com/square/okhttp.
目前對應okhttp版本3.3.1.
okhttp-utils Github:https://github.com/hongyangAndroid/okhttputils
引用方法
- Android Studio
compile 'com.zhy:okhttputils:2.6.2'
- Eclipse
下載最新jar:okhttputils-2_6_2.jar
注:需要同時導入okhttp和okio的jar,下載見:https://github.com/square/okhttp.
用法示例
json-server內(nèi)容
{
"user": {
"username": "Roy",
"password": "123"
},
"users": [
{
"password": "123",
"username": "Roy",
"id": 1
},
{
"password": "12345",
"username": "Tom",
"id": 2
},
{
"password": "54321",
"username": "Jack",
"id": 3
}
]
}
User類
public class User {
public String username ;
public String password ;
public User() {
// TODO Auto-generated constructor stub
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString()
{
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
GET請求
適用于string對象
String url = "http://192.168.191.1:3000/" + "user"; //url設置成自己的json-server地址
OkHttpUtils
.get()
.url(url)
.build()
.execute(new StringCallback() //使用StringCallback回調(diào)String類型數(shù)據(jù)
{
@Override
public void onError(Request request, Exception e)
{
}
@Override
public void onResponse(String response)
{
//解析出的response為String類型,可以進一步處理
}
});
適用于JavaBean對象
public void getUser(View view)
{
String url = "http://192.168.191.1:3000/" + "user"; //url設置成自己的json-server地址
OkHttpUtils
.get()//
.url(url)//
.build()//
.execute(new UserCallback() { //使用UserCallback回調(diào)User類的對象,可自己定義JavaBean對象
@Override
public void onError(Call call, Exception e, int id) {
mTv.setText("onError:" + e.getMessage());
//mTv為TextView打印Error信息
}
@Override
public void onResponse(User response, int id) {
mTv.setText("onResponse:" + response.getPassword());
//mTv為TextView打印response信息
//解析出的response為User類對象,此處使用response.getPassword()來獲取password屬性
}
});
}
UserCallback
import com.google.gson.Gson;
import com.zhy.http.okhttp.callback.Callback;
import java.io.IOException;
import okhttp3.Response;
public abstract class UserCallback extends Callback<User>
{
@Override
public User parseNetworkResponse(Response response, int id) throws IOException
{
String string = response.body().string();
User user = new Gson().fromJson(string, User.class);
return user;
}
}
適用于List<Bean>對象
public void getUsers(View view)
{
String url = "http://192.168.191.1:3000/" + "users"; //url設置成自己的json-server地址
OkHttpUtils//
.get()//
.url(url)//
.build()//
.execute(new ListUserCallback() //使用ListUserCallback回調(diào)List<Bean>數(shù)組,可自己定義JavaBean對象
{
@Override
public void onError(Call call, Exception e, int id)
{
mTv.setText("onError:" + e.getMessage());
//mTv為TextView打印Error信息
}
@Override
public void onResponse(List<User> response, int id)
{
mTv.setText("onResponse:" + response.get(2).toString());
//mTv為TextView打印response信息
//解析出的response為List<User>數(shù)組,此處使用response.get(2).toString()來獲取數(shù)組中第3個User對象,并用toString方法輸出
}
});
}
ListUserCallback
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.zhy.http.okhttp.callback.Callback;
import java.io.IOException;
import java.util.List;
import okhttp3.Response;
public abstract class ListUserCallback extends Callback<List<User>>
{
@Override
public List<User> parseNetworkResponse(Response response,int id) throws IOException
{
String string = response.body().string();
List<User> users = new Gson().fromJson(string, new TypeToken<List<User>>(){}.getType());
return users;
}
}
POST請求
適用于json字符串
public void postString(View view)
{
String url = "http://192.168.191.1:3000/" + "users"; //url設置成自己的json-server地址
OkHttpUtils
.postString()
.url(url)
.mediaType(MediaType.parse("application/json; charset=utf-8")) //設置post的字符串為json字符串并設置編碼
.content(new Gson().toJson(new User("zhy", "123"))) //用Gson將User對象轉(zhuǎn)化為Json字符串的形式作為content
.build()
.execute(new MyStringCallback());
}
MyStringCallback
package Callback;
import android.util.Log;
import com.zhy.http.okhttp.callback.StringCallback;
import okhttp3.Call;
public class MyStringCallback extends StringCallback
{
//MyStringCallback用于向json server處理有關(guān)字符串的請求(Json/Http/Https 字符串callback)
@Override
public void onError(Call call, Exception e, int id)
{
e.printStackTrace();
}
@Override
public void onResponse(String response, int id)
{
Log.i("Tag", "MyStringCallback success");
switch (id)
{
case 100:
Log.i("http", "http callback success");
break;
case 101:
Log.i("https", "https callback success");
break;
}
}
}
適用于JavaBean對象
public void postUser(View view)
{
String url = "http://192.168.191.1:3000/" + "user"; //url設置成自己的json-server地址
OkHttpUtils
.post()//
.url(url)//
.addParams("username", "Roy")//設置Post參數(shù)
.addParams("password", "123")//設置Post參數(shù)
.build()//
.execute(new UserCallback() { //使用UserCallback回調(diào)User類的對象,可自己定義JavaBean對象,UserCallback內(nèi)容同上
@Override
public void onError(Call call, Exception e, int id) {
mTv.setText("onError:" + e.getMessage());
//mTv為TextView打印Error信息
}
@Override
public void onResponse(User response, int id) {
mTv.setText("onResponse:" + response.getPassword());
//mTv為TextView打印response信息,response為剛剛POST的User類對象
//解析出的response為User類對象,此處使用response.getPassword()來獲取password屬性
}
});
}
待續(xù)