AndroidStudio练习用--登录Demo

这篇博客记录了一个简单的登录Demo的实现过程。博主旨在通过编写登录接口,使用Postman进行关联测试,并借此复习Android的前端开发。登录接口返回包含code、name、password和token的JSON字符串。内容涉及线程调用、HTTP请求、JSON解析及界面交互,展示了如何在接收到响应后存储用户数据并进行页面跳转。

记录一个登录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;
    }
}

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值