登录接口的流程:
代码执行,请求发送到服务端,服务端调用数据库,返回数据,登录成功
一、学习OkHttp网址
https://www.jianshu.com/p/d06382fd048c
二、整体代码包
三、实现步骤:
1.右击,选择Module
2.选择import gradle project,导入封装包。
3.找到对应包的位置
4.完成,显示该包
5.添加依赖implementation project(‘:wldlib’)
6.http在27以下都没办法请求,添加布局文件,使http和手机端兼容
7.在清单文件中添加请求的权限和兼容的权限
8.写出请求的页面布局
9.封装接口提供的数据
(1)封装code值和返回的数据
(2)使用内部类,封装data数据值
10.写出请求的方法,控件的绑定
四、整体代码
1.activity_main.xml布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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=".MainActivity"
android:orientation="vertical"
android:gravity="center">
<EditText
android:id="@+id/et_account"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入账号"
/>
<EditText
android:id="@+id/et_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入密码"
android:layout_marginTop="20dp"
/>
<Button
android:id="@+id/btn_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="登录"
android:layout_marginTop="20dp"
android:background="#4CAF50"
android:textSize="20sp"
/>
</LinearLayout>
2.BaseDataBean文件代码
package com.example.ok.bean;
public class BaseDataBean {
private int code;
private String msg;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
3.UserInfoBean文件代码
package com.example.ok.bean;
public class UserInfoBean extends BaseDataBean{
private DataBean data;
public DataBean getData() {
return data;
}
public void setData(DataBean data) {
this.data = data;
}
public static class DataBean{
private UserBean user;
private UnitBean unit;
public UserBean getUser() {
return user;
}
public void setUser(UserBean user) {
this.user = user;
}
public UnitBean getUnit() {
return unit;
}
public void setUnit(UnitBean unit) {
this.unit = unit;
}
public static class UserBean{
private Integer id;
private String username;
private String password;
private String phone;
private String position;
private Integer unit_id;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
public Integer getUnit_id() {
return unit_id;
}
public void setUnit_id(Integer unit_id) {
this.unit_id = unit_id;
}
}
public static class UnitBean{
private Integer id;
private String unitname;
private String declaration;
private String logo;
private Integer is_stop;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUnitname() {
return unitname;
}
public void setUnitname(String unitname) {
this.unitname = unitname;
}
public String getDeclaration() {
return declaration;
}
public void setDeclaration(String declaration) {
this.declaration = declaration;
}
public String getLogo() {
return logo;
}
public void setLogo(String logo) {
this.logo = logo;
}
public Integer getIs_stop() {
return is_stop;
}
public void setIs_stop(Integer is_stop) {
this.is_stop = is_stop;
}
}
}
}
4.MainActivity文件代码
package com.example.ok;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.example.ok.bean.UserInfoBean;
import com.test.mldlib.okhttp.OKHttpCallBack;
import com.test.mldlib.okhttp.OKHttpUtils;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.OkHttpClient;
public class MainActivity extends AppCompatActivity {
private EditText et_account;
private EditText et_password;
private TextView tv_date;
private TextView tv_data;
private Button btn_login;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
public void initView(){
et_account=findViewById(R.id.et_account);
et_password=findViewById(R.id.et_password);
btn_login=findViewById(R.id.btn_login);
tv_date=findViewById(R.id.tv_date);
tv_data=findViewById(R.id.tv_data);
btn_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
login(et_account.getText().toString().trim(),et_password.getText().toString().trim());
}
});
}
public void login(String account,String password){
OKHttpUtils.newBuilder().url("http://zhdj.yiruoche.com/index.php/user/login?")
.post()
.addParam("phone",account)
.addParam("password",password)
.build()
.enqueue(new OKHttpCallBack<UserInfoBean>() {
@Override
public void onSuccess(UserInfoBean userInfoBean) {
if (userInfoBean.getCode()==1){
Intent intent=new Intent();
intent.setClass(MainActivity.this,HomePageActivity.class);
startActivity(intent);
}
String msg = userInfoBean.getMsg();
Toast.makeText(MainActivity.this, userInfoBean.getMsg(), Toast.LENGTH_SHORT).show();
tv_date.setText(msg);
tv_data.setText(userInfoBean.getData().getUser().getUsername());
}
@Override
public void onError(int code) {
super.onError(code);
Toast.makeText(MainActivity.this, "登录成功0", Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(Call call, IOException e) {
super.onFailure(call, e);
Toast.makeText(MainActivity.this, "登录成功1", Toast.LENGTH_SHORT).show();
}
});
}
}
5.network_security_config.xml布局文件
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true"/>
</network-security-config>
6.activity_home_page.xml布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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=".HomePageActivity"
android:orientation="vertical"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="首页"
android:textSize="60sp"
/>
</LinearLayout>
7.HomePageActivity文件代码
package com.example.ok;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class HomePageActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home_page);
}
}
8.结果图:
(1)登录前
(2)登录时的页面跳转
(3)登录后返回的数据
五、不导入包的方式
六、检查错误
1.debug方式<br /><br />2.网页的接口网址,输入用户名和密码<br />