听说OkHttp3很好用喔!
在OkHttp3之前的版本需要自己定义ResultCallback用于返回数据,而OkHttp3自带了Callback将这个简化不少,这次我就尝试用下OkHttp3来简单实现注册和登录功能
注意
- 因为是注册和登录的功能,我这里只用post
- 使用Map封装提交的Post参数
- 基础用法就不讲了,就直接开始实例吧
封装OkHttp工具类
post与get的差别就在于post需要上传post参数,我这里将参数封装在
使用
现在封装好了post方法,只要我们在需要用到的时候调用
登录时直接调用一下代码即可
慢着,我们 这里的map呢?,
既然是登录,那就把id和密码封装到map中
回调
由上面的代码可知,调用Post会重写onFailure和onResponse
onFailure是在调用失败时返回的,所以一般
打印错误信息
@Override
public void onFailure(Call call, IOException e) {
Log.e(TAG, “onFailure: “,e);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String responseBody = response.body().string();
try {
runOnUiThread(new Runnable() {
@Override
public void run() {
if(token!=null)
{
CommonVari.token = token;
Intent intent1 = new Intent(LoginActivity.this,MainActivity.class);
startActivity(intent1);
CommonVari.FAG = 1;
finish();
}else{
new ToastUtil(LoginActivity.this,0);
}
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
},map);
}
public class OkHttpUtil {
public static void post(String address, okhttp3.Callback callback, Map
{
OkHttpClient client = new OkHttpClient();
FormBody.Builder builder = new FormBody.Builder();
if (map!=null)
{
for (Map.Entry
{
builder.add(entry.getKey(),entry.getValue());
}
}
FormBody body = builder.build();
Request request = new Request.Builder()
.url(address)
.post(body)
.build();
client.newCall(request).enqueue(callback);
}
}
public class LoginActivity extends AppCompatActivity implements View.OnClickListener{
String TAG = "LoginActivity";
private Button visitorBt;
private EditText id;
private EditText password;
private Button registerBt;
private Button loginBt;
private Button modifyBt;
//private Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
id = (EditText) findViewById(R.id.login_id);
password = (EditText) findViewById(R.id.login_password);
loginBt = (Button) findViewById(R.id.login_bt);
registerBt = (Button) findViewById(R.id.register);
modifyBt = (Button) findViewById(R.id.login_modify_bt);
visitorBt = (Button) findViewById(R.id.visitor);
initView();
}
private void initView()
{
//注册登录按钮
loginBt.setOnClickListener(this);
//注册按钮监听
registerBt.setOnClickListener(this);
//注册修改密码按钮
modifyBt.setOnClickListener(this);
//游客登录按钮
visitorBt.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.register:
Intent intent = new Intent(LoginActivity.this,RegisterActivity.class);
startActivity(intent);
break;
case R.id.login_bt:
login();
break;
case R.id.login_modify_bt:
Intent intent2 = new Intent(LoginActivity.this,ModifyPasswordActivity.class);
startActivity(intent2);
break;
case R.id.visitor:
Intent intent3 = new Intent(LoginActivity.this,MainActivity.class);
startActivity(intent3);
finish();
break;
}
}
/**
* 处理登录事件
*/
private void login() {
String url = Api.url+"auth/login";
Map<String,String> map = new HashMap<>();
if(id.getText().toString().length()!=11)
{
new ToastUtil(LoginActivity.this, CommonVari.IDNULL);
}else if(password.getText().toString().length()<6){
new ToastUtil(LoginActivity.this,CommonVari.LIT);
}
else{
map.put("phone",id.getText().toString());
map.put("password",password.getText().toString());
OkHttpUtil.post(url, new okhttp3.Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.e(TAG, "onFailure: ",e);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String responseBody = response.body().string();
try {
final String token = JsonUtil.getToken(responseBody);
runOnUiThread(new Runnable() {
@Override
public void run() {
if(token!=null)
{
CommonVari.token = token;
Intent intent1 = new Intent(LoginActivity.this,MainActivity.class);
startActivity(intent1);
CommonVari.FAG = 1;
finish();
}else{
new ToastUtil(LoginActivity.this,0);
}
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
},map);
}
}
}
```