记录一个登录Demo。本来只是想写一个登录接口,postman用来试验关联测试的,顺便写一下前台,重新练习一下。
登录接口:
http://localhost:8080/RegisterDemo/RegisterDemo?name=XXX&password=XXXXXX
返回json字符串{"code":"xxx","name":"xxx","password":"xxxxxx","token":"xxxxxx"}
参考《第一行代码Android》数据持久化和网络应用。发现这是只能保存一个用户数据。
1.点击按钮,调用线程方法发出Http请求
2.线程根据返回结果字符串(需要解析)发送异步消息msg.what
3.异步处理根据消息值msg.what,决定是否存储账号密码和跳转新页面
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
String name;
String password;
String token;
String code;
String result;
private CheckBox remeberPass;
SharedPreferences sharedPreferences;
//使用异步消息处理,等服务器回消息,再决定是否进入下一个Activity,以及是否存储账号密码。
private Handler handler= new Handler(){
public void handleMessage(Message msg){
switch(msg.what){
case 1:
Intent intent=new Intent("com.idx.registerdemo.ACTION_START");
intent.addCategory("com.idx.registerdemo.REGISTER");
//只是一些简单数据,采用sharePreferences存储,文件名RegisterData
sharedPreferences=getSharedPreferences("RegisterData",0);
SharedPreferences.Editor editor=sharedPreferences.edit();
//如果复选框被选中,要求记录账号密码,就存储到RegisterData中
if(remeberPass.isChecked()){
editor.putBoolean("remeber_password",true);
editor.putString("name",name);
editor.putString("password",password);
editor.putString("token",token);
editor.putString("code",code);
}else{//清除记录
editor.clear();
}
editor.apply();//提交数据
startActivity(intent);
break;
case 0:
Toast.makeText(getApplicationContext(),result,Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final EditText username=(EditText) findViewById(R.id.username);
final EditText passwd=(EditText) findViewById(R.id.passwd);
Button bt_register=(Button)findViewById(R.id.bt_register);
remeberPass=findViewById(R.id.is_rember);
//从sharedPreferences存储的RegisterData文件中取数据
sharedPreferences=getSharedPreferences("RegisterData",0);
boolean isRemeber=sharedPreferences.getBoolean("remeber_password",false);
if (isRemeber){//true时,设置Edittext内容
username.setText(sharedPreferences.getString("name",""));
passwd.setText(sharedPreferences.getString("password",""));
remeberPass.setChecked(true);
}
bt_register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try{
/**
String name="zdy";
String password="123456";
if(true){
Intent intent=new Intent("com.idx.registerdemo.ACTION_START");
intent.addCategory("com.idx.registerdemo.REGISTER");
intent.putExtra("name",name);
intent.putExtra("password",password);
startActivity(intent);
}
*/
String name=username.getText().toString();
String password=passwd.getText().toString();
//调用方法,发送账号密码进行验证
sendRequestWithOKHttp3(name,password);
}catch(Exception e){
e.printStackTrace();
}
}
});
}
private void sendRequestWithOKHttp3(final String name,final String password){
new Thread(new Runnable(){
public void run(){
try{
//http://localhost:8080/RegisterDemo/RegisterDemo?name=zdy&password=123456
String URL="http://192.168.1.146:8080/RegisterDemo/RegisterDemo?name="+name+"&password="+password;
OkHttpClient client=new OkHttpClient();
Request request=new Request.Builder()
//指定访问服务器的地址
.url(URL)
.build();
Response response=client.newCall(request).execute();
String responseData=response.body().string();
//调用转换方法,把服务器返回字符串 转换成Map对象
HashMap responseMap=(HashMap) parseJsonWithJSONObject(responseData);
//根据响应数据code值,发送异步消息,决定是否跳转页面
Message message= new Message();
if (responseMap.get("code").equals("200")){
message.what=1;
}else{
message.what=0;
}
handler.sendMessage(message);
}catch(Exception e){
e.printStackTrace();
}
}
}).start();
}
private Map parseJsonWithJSONObject(String jsonData){
HashMap responseData=new HashMap();
try{
JSONObject jsonObject=new JSONObject(jsonData);
code=jsonObject.getString("code");
if (code.equals("200")){
name=jsonObject.getString("name");
password=jsonObject.getString("password");
token=jsonObject.getString("token");
Log.d(TAG, "登录成功结果返回: "+token);
}else{
result=jsonObject.getString("result");
Log.d(TAG, "登录失败结果返回: "+result);
}
//responseData.put("name",name);
//responseData.put("password",password);
//responseData.put("token",token);
responseData.put("code",code);
}catch(Exception e){
e.printStackTrace();
}
return responseData;
}
}