效果图
添加的依赖
// OkHttp
compile 'com.squareup.okhttp3:okhttp:3.9.0'
// 拦截器依赖
compile 'com.squareup.okhttp3:logging-interceptor:3.9.0'
compile 'com.google.code.gson:gson:2.2.4'
联网工具类
public class NetUtil {
Tojson tojson;
MyHandler myhandler = new MyHandler();
public void getOkhttp(String surl) {
// 创建对象
OkHttpClient client = new OkHttpClient();
// 创建请求
Request request = new Request.Builder().url(surl).build();
// 创建队列
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
// 失败
Message msg = new Message();
msg.what = 0;
msg.obj = "失败";
myhandler.sendMessage(msg);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
// 成功
String json = response.body().string();
Message msg = new Message();
msg.what = 1;
msg.obj = json;
myhandler.sendMessage(msg);
}
});
}
/**
* 写一个接口用于外部访问
*/
public interface Tojson {
void error(String error);
void success(String json);
}
/**
* 提供方法给外部访问
*/
public void getjson(Tojson tojson) {
this.tojson = tojson;
}
class MyHandler extends Handler {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
int w = msg.what;
if (w == 0) {
String error = (String) msg.obj;
tojson.error(error);
}
if (w == 1) {
String json = (String) msg.obj;
tojson.success(json);
}
}
}
}
bean包
public class zhece {
/**
* msg : 登录成功
* code : 0
* data : {"age":null,"appkey":"5222c1ee710cf7e2","appsecret":"D5C002D9FAFC40EA7E0B8D27ED643F41","createtime":"2018-01-10T10:25:33","email":null,"fans":null,"follow":null,"gender":null,"icon":null,"latitude":null,"longitude":null,"mobile":"18631090582","money":null,"nickname":null,"password":"30D0BA0744A36CFD7EFF8869E8B09A0E","praiseNum":null,"token":"46FB809A1FFEE06DEDED783742F363CA","uid":4416,"userId":null,"username":"18631090582"}
*/
private String msg;
private String code;
private DataBean data;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public DataBean getData() {
return data;
}
public void setData(DataBean data) {
this.data = data;
}
public static class DataBean {
/**
* age : null
* appkey : 5222c1ee710cf7e2
* appsecret : D5C002D9FAFC40EA7E0B8D27ED643F41
* createtime : 2018-01-10T10:25:33
* email : null
* fans : null
* follow : null
* gender : null
* icon : null
* latitude : null
* longitude : null
* mobile : 18631090582
* money : null
* nickname : null
* password : 30D0BA0744A36CFD7EFF8869E8B09A0E
* praiseNum : null
* token : 46FB809A1FFEE06DEDED783742F363CA
* uid : 4416
* userId : null
* username : 18631090582
*/
private Object age;
private String appkey;
private String appsecret;
private String createtime;
private Object email;
private Object fans;
private Object follow;
private Object gender;
private Object icon;
private Object latitude;
private Object longitude;
private String mobile;
private Object money;
private Object nickname;
private String password;
private Object praiseNum;
private String token;
private int uid;
private Object userId;
private String username;
public Object getAge() {
return age;
}
public void setAge(Object age) {
this.age = age;
}
public String getAppkey() {
return appkey;
}
public void setAppkey(String appkey) {
this.appkey = appkey;
}
public String getAppsecret() {
return appsecret;
}
public void setAppsecret(String appsecret) {
this.appsecret = appsecret;
}
public String getCreatetime() {
return createtime;
}
public void setCreatetime(String createtime) {
this.createtime = createtime;
}
public Object getEmail() {
return email;
}
public void setEmail(Object email) {
this.email = email;
}
public Object getFans() {
return fans;
}
public void setFans(Object fans) {
this.fans = fans;
}
public Object getFollow() {
return follow;
}
public void setFollow(Object follow) {
this.follow = follow;
}
public Object getGender() {
return gender;
}
public void setGender(Object gender) {
this.gender = gender;
}
public Object getIcon() {
return icon;
}
public void setIcon(Object icon) {
this.icon = icon;
}
public Object getLatitude() {
return latitude;
}
public void setLatitude(Object latitude) {
this.latitude = latitude;
}
public Object getLongitude() {
return longitude;
}
public void setLongitude(Object longitude) {
this.longitude = longitude;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public Object getMoney() {
return money;
}
public void setMoney(Object money) {
this.money = money;
}
public Object getNickname() {
return nickname;
}
public void setNickname(Object nickname) {
this.nickname = nickname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Object getPraiseNum() {
return praiseNum;
}
public void setPraiseNum(Object praiseNum) {
this.praiseNum = praiseNum;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public Object getUserId() {
return userId;
}
public void setUserId(Object userId) {
this.userId = userId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
}
登录界面和布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.bwie.usercenter.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="5dp"
android:text="登录"
android:textSize="30sp" />
<View
android:layout_width="match_parent"
android:layout_height="0.75dp"
android:background="#999999" />
<EditText
android:id="@+id/tel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="20dp"
android:ems="15"
android:hint="请输入手机号" />
<EditText
android:id="@+id/pwd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="20dp"
android:ems="15"
android:hint="请输入密码" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="20dp">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="dl"
android:text="登录"
android:textSize="20sp" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="zc"
android:text="注册"
android:textSize="20sp" />
</LinearLayout>
</LinearLayout>
public class MainActivity extends AppCompatActivity implements NetUtil.Tojson {
String url = "http://120.27.23.105/user/login";
/**
* 请输入手机号
*/
private EditText tel;
/**
* 请输入密码
*/
private EditText pwd;
private SharedPreferences zidong;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化组件
initViews();
}
private void initViews() {
tel = (EditText) findViewById(R.id.tel);
pwd = (EditText) findViewById(R.id.pwd);
// 创建记录的xml文件
zidong = getSharedPreferences("zidong", MODE_PRIVATE);
// 设置自动登录的状态
boolean jizhu = zidong.getBoolean("jizhu", false);
if (jizhu) { // 如果为真就证明登录过,跳转
// 获取值
String t = zidong.getString("tel", null);
String p = zidong.getString("pwd", null);
int uid = zidong.getInt("uid", -1);
// 赋值
tel.setText(t);
pwd.setText(p);
// 跳转到个人界面
Intent intent = new Intent(MainActivity.this, Main3Activity.class);
intent.putExtra("uid", uid);
startActivity(intent);
}
}
public void dl(View v) {
// 获取输入框的值
String t = tel.getText().toString().trim();
String p = pwd.getText().toString().trim();
// 请求网络
NetUtil netUtil = new NetUtil();
netUtil.getOkhttp(url + "?mobile=" + t + "&password=" + p);
netUtil.getjson(this);
}
public void zc(View v) {
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
startActivityForResult(intent, 1);
}
/**
* 回调的方法
*
* @param requestCode
* @param resultCode
* @param data
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// 展示到界面
tel.setText(data.getStringExtra("tel"));
pwd.setText(data.getStringExtra("pwd"));
}
@Override
public void error(String error) {
}
@Override
public void success(String json) {
try {
/**
* 使用原生json,因为返回的类不一样,所以使用原生json
*/
JSONObject jsonObject = new JSONObject(json);
String code = jsonObject.getString("code");
if (code.equals("0")) {
Gson gson = new Gson();
zhece zhece = gson.fromJson(json, zhece.class);
// 如果登录成功,保存值,并改变记录状态
SharedPreferences.Editor edit = zidong.edit();
edit.putBoolean("jizhu", true);
edit.putString("tel", zhece.getData().getMobile());
edit.putString("pwd", zhece.getData().getMobile());
edit.putInt("uid", zhece.getData().getUid());
edit.commit();
//跳转到个人页面
Intent intent = new Intent(MainActivity.this, Main3Activity.class);
intent.putExtra("uid", zhece.getData().getUid());
startActivity(intent);
} else {
Toast.makeText(MainActivity.this, jsonObject.getString("msg") + "请注册", Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
注册界面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.bwie.usercenter.Main2Activity">
<EditText
android:id="@+id/ztel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="20dp"
android:ems="15"
android:hint="请输入手机号" />
<EditText
android:id="@+id/zpwd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="20dp"
android:ems="15"
android:hint="请输入密码" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="50dp"
android:onClick="ljzc"
android:text="立即注册"
android:textSize="20sp" />
</LinearLayout>
public class Main2Activity extends AppCompatActivity implements NetUtil.Tojson {
String url = "http://120.27.23.105/user/reg";
private EditText ztel;
private EditText zpwd;
private String pwd;
private String tel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
//初始化数据
initViews();
}
private void initViews() {
ztel = findViewById(R.id.ztel);
zpwd = findViewById(R.id.zpwd);
}
public void ljzc(View v) {
//获取网络数据
NetUtil netUtil = new NetUtil();
//获取输入框数据
pwd = zpwd.getText().toString().trim();
tel = ztel.getText().toString().trim();
//获取数据
netUtil.getOkhttp(url + "?mobile=" + tel + "&password=" + pwd);
//接口回调
netUtil.getjson(this);
}
@Override
public void error(String error) {
}
@Override
public void success(String json) {
//获取数据
Gson g = new Gson();
zhece zhece = g.fromJson(json, zhece.class);
String code = zhece.getCode();
if (code.equals("1")) {
Toast.makeText(Main2Activity.this, zhece.getMsg(), Toast.LENGTH_LONG).show();
}
//注册成功,回跳登录页面
if (code.equals("0")) {
Intent intent = new Intent();
intent.putExtra("tel", tel);
intent.putExtra("pwd", pwd);
setResult(0, intent);
finish();
}
}
}
个人界面
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.bwie.usercenter.Main3Activity">
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center"
android:text="TextView"
android:textSize="20sp" />
<View
android:layout_width="match_parent"
android:layout_height="0.75dp"
android:background="#999999" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_below="@+id/textView"
android:layout_marginLeft="20dp"
android:gravity="center"
android:text="头像"
android:textSize="20sp" />
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/textView"
app:srcCompat="@mipmap/ic_launcher" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#999999" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView2"
android:layout_marginLeft="20dp"
android:layout_marginTop="20dp"
android:text="用户名"
android:textSize="20sp" />
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/textView3"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_marginRight="20dp"
android:text="username字段" />
<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView3"
android:layout_alignStart="@+id/textView3"
android:layout_below="@+id/name"
android:layout_marginTop="20dp"
android:text="昵称"
android:textSize="20sp" />
<TextView
android:id="@+id/pass"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/textView5"
android:layout_alignEnd="@+id/name"
android:layout_alignRight="@+id/name"
android:text="kson"
android:textSize="20sp" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/pass"
android:layout_centerHorizontal="true"
android:layout_marginTop="72dp"
android:onClick="tui"
android:text="退出登录" />
</RelativeLayout>
public class Main3Activity extends AppCompatActivity implements NetUtil.Tojson {
String url = "http://120.27.23.105/user/getUserInfo";
private TextView name;
private TextView pass;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
Intent intent = getIntent();
//获取数据
int uid = intent.getIntExtra("uid", -1);
//获取控件
name = findViewById(R.id.name);
pass = findViewById(R.id.pass);
//请求数据
NetUtil netUtil = new NetUtil();
netUtil.getOkhttp(url + "?uid=" + uid);
netUtil.getjson(this);
}
public void tui(View v) {
//点击推出按钮,清空数据回到登录页面
SharedPreferences zidong = getSharedPreferences("zidong", MODE_PRIVATE);
zidong.edit().clear().commit();
//跳转到登录页面
Intent intent = new Intent(Main3Activity.this, MainActivity.class);
startActivity(intent);
}
@Override
public void error(String error) {
}
@Override
public void success(String json) {
//获取数据
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(json);
String code = jsonObject.getString("code");
if (code.equals("0")) {
Gson g = new Gson();
zhece zhece = g.fromJson(json, zhece.class);
//给赋值
name.setText(zhece.getData().getUsername());
pass.setText(zhece.getData().getUid() + "");
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}