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

 

更多相关文章

  1. 一句话锁定MySQL数据占用元凶
  2. Android(安卓)| 1. Fragment中使用SQLite实现简单存储及查询
  3. Android(安卓)LsitView的实现
  4. Android——拍照、剪切、得到图片/从相册中选择照片(api19以上和
  5. Android中Handle总结
  6. android 数据存储 SharePreferences 简单使用
  7. 使用SQLiteOpenHelper 和使用ContentProvider。
  8. Android请求数据格式与Java后台需求格式不匹配HttpMediaTypeNotS
  9. Android(安卓)中 ListView 控件的使用

随机推荐

  1. Android与Windows Socket通信,TLS双向认证
  2. android menu菜单
  3. Android 全自动js脚本测试 Appium教程—
  4. Android(安卓)WebView系列(一)WebView的基
  5. 浅谈Android系统开发中LOG的使用
  6. phonegap导入工程报错解决办法 错误解析a
  7. Android中抓取手机视频流数据
  8. Android APN的设置问题 默认“已起用数据
  9. Android Camera 模块分析(三)
  10. Windows7 Android 开发环境搭建