OkHttpCallback文件
public class OkHttpCallback implements Callback {
private final String TAG=OkHttpCallback.class.getSimpleName();
public String url;
public String result;
@Override
public void onFailure(Call call, IOException e) {
Log.d(TAG,"url:"+url);
Log.d(TAG,"请求失败"+e.toString());
onFinish("failure",e.toString());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.d(TAG,"url:"+url);
result=response.body().string().toString();
Log.d(TAG,"请求成功"+result);
onFinish("success",result);
}
public void onFinish(String state,String msg){
Log.d(TAG,"url:"+url+"state:"+state);
}
}
OkHttpUtils文件
public class OkHttpUtils {
private static final OkHttpClient CLIENT=new OkHttpClient();
public static void get(String url,OkHttpCallback callback){
callback.url=url;
Request request=new Request.Builder().url(url).build();
CLIENT.newCall(request).enqueue(callback);
}
public static void post(String url, Map<String,Object> map,OkHttpCallback callback){
FormBody.Builder builder=new FormBody.Builder();
for(Map.Entry<String,Object> entry: map.entrySet()){
builder.add(entry.getKey(),String.valueOf(entry.getValue()));
}
FormBody formBody=builder.build();
Request request=new Request.Builder()
.post(formBody)
.url(url)
.build();
CLIENT.newCall(request).enqueue(callback);
}
}
在登录注册中的基本使用
登录
baseUrl=getResources().getString(R.string.baseUrl);
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String username=l_et1.getText().toString().trim();
String password=l_et2.getText().toString().trim();
if(username!=null&&password!=null){
OkHttpUtils.get(baseUrl+"user/login?username="+username+"&password="+password,new OkHttpCallback(){
@Override
public void onFinish(String state, String msg) {
super.onFinish(state, msg);
Gson gson=new Gson();
Type type=new TypeToken<ServiceResponse<User>>(){}.getType();
ServiceResponse<User> serviceResponse=gson.fromJson(msg,type);
int states=serviceResponse.getState();
if(states==200){
Intent intent=new Intent(LoginActivity.this,MainActivity.class);
intent.putExtra("username",username);
startActivity(intent);
}else{
Looper.prepare();
Toast.makeText(LoginActivity.this,"用户名或密码错误",Toast.LENGTH_LONG).show();
Looper.loop();
}
}
});
}else{
Toast.makeText(LoginActivity.this,"用户名或密码不能为空",Toast.LENGTH_LONG).show();
}
}
});
注册
baseUrl=getResources().getString(R.string.baseUrl);
register=(Button)findViewById(R.id.register);
register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String username=r_et1.getText().toString().trim();
final String name=r_et4.getText().toString().trim();
if(r_et2.getText().toString().trim().equals(r_et3.getText().toString().trim())){
String password=r_et2.getText().toString().trim();
switch (r_rg.getCheckedRadioButtonId()){
case R.id.r_id1:identity=1;
break;
case R.id.r_id2:identity=2;
break;
}
User user=new User(username,password,identity,name);
Map<String,Object> map=new HashMap<String, Object>();
map.put("username",user.getUsername());
map.put("password",user.getPassword());
map.put("identity",user.getIdentity());
map.put("name",user.getName());
OkHttpUtils.post(baseUrl+"user/register",map,new OkHttpCallback(){
@Override
public void onFinish(String state, String msg) {
super.onFinish(state, msg);
Gson gson=new Gson();
Type type=new TypeToken<ServiceResponse<Void>>(){}.getType();
ServiceResponse<Void> serviceResponse=gson.fromJson(msg,type);
int states=serviceResponse.getState();
if(states==200){
Intent intent=new Intent(RegisterActivity.this,LoginActivity.class);
Bundle bundle=new Bundle();
bundle.putString("username",username);
intent.putExtras(bundle);
startActivity(intent);
}else if(states==400){
Looper.prepare();
Toast.makeText(RegisterActivity.this,"用户名已存在",Toast.LENGTH_LONG).show();
Looper.loop();
}
}
});
}else{
Toast.makeText(RegisterActivity.this,"两次密码输入不一致",Toast.LENGTH_LONG).show();
}
}
});
第一次使用OkHttp出现了很多的问题,在看了很多视频和文章之后终于搞定了。