300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Android 客户端与服务器端交互实现登录功能

Android 客户端与服务器端交互实现登录功能

时间:2024-04-29 02:32:25

相关推荐

Android 客户端与服务器端交互实现登录功能

思路:

安卓客户端输入账号和密码,使用 okHttp 向服务器端发送请求并传递输入的账号和密码,服务器端的登录接口查询数据库,判断是否能登录成功,然后返回给客户端JSON字符串,客户端使用Gson解析服务器返回的数据,做出不同的操作。

服务器端:

1. 数据库

2. 服务器端是 Java Web 用SpringBoot+Mybatis-Plus 快速搭建的,接口返回 map 集合

if(users.size() != 0){map.put("msg","登录成功");}else {map.put("msg","账号或密码错误");}return map;

重点是在安卓端

安卓端:

1. 首先弄一个登录页面activity_main.xml出来,相当简陋

<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="/apk/res/android"xmlns:app="/apk/res-auto"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextViewandroid:id="@+id/textUsername"android:layout_width="wrap_content"android:layout_height="25dp"android:layout_marginStart="4dp"android:layout_marginLeft="4dp"android:text="账号:"app:layout_constraintBottom_toBottomOf="@+id/editUsername"app:layout_constraintEnd_toStartOf="@+id/editUsername"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="@+id/editUsername" /><TextViewandroid:id="@+id/textPassword"android:layout_width="wrap_content"android:layout_height="23dp"android:layout_marginStart="4dp"android:layout_marginLeft="4dp"android:text="密码:"app:layout_constraintBottom_toBottomOf="@+id/editPassword"app:layout_constraintEnd_toStartOf="@+id/editPassword"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="@+id/editPassword" /><EditTextandroid:id="@+id/editUsername"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginEnd="23dp"android:layout_marginRight="23dp"android:ems="10"android:hint="请输入用户名/手机号"android:inputType="textPersonName"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toEndOf="@+id/textUsername"app:layout_constraintTop_toTopOf="parent" /><EditTextandroid:id="@+id/editPassword"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="45dp"android:layout_marginEnd="23dp"android:layout_marginRight="23dp"android:ems="10"android:hint="请输入密码"android:inputType="textPersonName"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toEndOf="@+id/textPassword"app:layout_constraintTop_toBottomOf="@+id/editUsername" /><Buttonandroid:id="@+id/login"android:layout_width="142dp"android:layout_height="42dp"android:layout_marginStart="200dp"android:layout_marginLeft="200dp"android:layout_marginTop="50dp"android:layout_marginEnd="57dp"android:layout_marginRight="57dp"android:text="登录"app:layout_constraintEnd_toEndOf="@+id/editPassword"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/editPassword" /></androidx.constraintlayout.widget.ConstraintLayout>

2.MainActivity.java

public class MainActivity extends AppCompatActivity {private EditText editUsername;private EditText editPassword;//服务器端的登录接口private String url = "http://192.168.17.xx:8081/user/login";private String address = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取用户输入的数据editUsername = findViewById(R.id.editUsername);editPassword = findViewById(R.id.editPassword);Button login = findViewById(R.id.login);login.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String username = editUsername.getText().toString();String password = editPassword.getText().toString();//向服务器传参address = url+"?username="+username+"&password="+password;login();}});}//登录操作中开启一个子线程private void login(){new Thread(new Runnable() {@Overridepublic void run() {try {Response response = HttpUtil.sendOkHttpRequest(address);if(response != null){String responseData = response.body().string();Map<String,Object> map = null;//使用Gson解析服务器返回的数据Gson gson = new Gson();Type type = new TypeToken<Map<String,Object>>(){}.getType();map = gson.fromJson(responseData,type);String msg = map.get("msg").toString();//判断登录成功还是失败,并向主线程传递数据if("登录成功".equals(msg)){Message message = new Message();message.what = 1;message.obj = msg;handler.sendMessage(message);}else{Message message = new Message();message.what = 2;message.obj = msg;handler.sendMessage(message);}}} catch (IOException e) {e.printStackTrace();}}}).start();}//根据子线程传来数据的不同,进行不同的操作Handler handler = new Handler(){public void handleMessage(Message msg){switch (msg.what){case 1:String data = (String) msg.obj;Intent intent = new Intent(MainActivity.this,SecondActivity.class);intent.putExtra("msg",data);startActivity(intent);break;case 2:String data2 = (String) msg.obj;Toast.makeText(MainActivity.this, data2, Toast.LENGTH_SHORT).show();}}};}

其中String url = "http://192.168.17.99:8081/user/login" 是服务器端的登录接口SecondActivity 就是打开一个空白的页面activity_second.xml,就不粘代码了HttpUtil 是简单封装了OkHttp

public class HttpUtil {public static Response sendOkHttpRequest(String address) {OkHttpClient client = new OkHttpClient();Request request = new Request.Builder().url(address).build();try {Response response = client.newCall(request).execute();return response;} catch (IOException e) {e.printStackTrace();return null;}}}

3. 其他要注意的地方

okhttp 和 gson 依赖应该添加好

implementation 'com.squareup.okhttp3:okhttp:4.2.2'implementation 'com.google.code.gson:gson:2.7'

AndroidManifest.xml 打开权限

<uses-permission android:name="android.permission.INTERNET" />android:usesCleartextTraffic="true" //使用明文传输

4. 最后运行服务器端代码,让手机和服务器端处于同一网络,就能测试登录了

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。