AndroidStudio练习用--登录Demo
16lz
2021-01-26
记录一个登录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; }}
更多相关文章
- 一句话锁定MySQL数据占用元凶
- Android(安卓)| 1. Fragment中使用SQLite实现简单存储及查询
- Android(安卓)LsitView的实现
- Android——拍照、剪切、得到图片/从相册中选择照片(api19以上和
- Android中Handle总结
- android 数据存储 SharePreferences 简单使用
- 使用SQLiteOpenHelper 和使用ContentProvider。
- Android请求数据格式与Java后台需求格式不匹配HttpMediaTypeNotS
- Android(安卓)中 ListView 控件的使用