Android 與 SpringBoot后端數據交互


本次環境

  • 后端
    • MySql 5.7
    • Java 1.8
    • Maven 3.6.3
    • 其余與博客項目相同
  • Android端
    • okHttp 4.9.3
    • ADV API30
    • Gradle 4.0.1

SpringBoot后台

項目來自前后端分離博客項目,順便記錄下自己運行項目的步驟

  1. 下載壓縮包直接用 idea open 項目文件
  2. 打開文件后可能 maven 還沒下載包,找到 pom.xml (在vueblog-java文件夾) 右鍵 找到 maven 點擊 add as maven
  3. 創建數據庫,找到sql文件並添加兩條語句,然后用 Navicat 執行 sql文件,這里的數據庫是5.7

  4. 找到 配置文件修改數據庫的地址或密碼。也是在這個文件看到數據庫的名稱為 vueblog

  5. 進入VueblogApplication 文件啟動后台
  6. 此時后台已經跑起來了,得運行前端了,在vueblog-vue文件夾右鍵選擇 open in terminal
  7. 運行 npm install
  8. 運行 npm install github-markdown-css 具體看前后端分離博客項目
  9. 運行npm run serve

Android前端

package com.example.helloworld.okhttp_learn;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.example.helloworld.R;
import com.lzy.okgo.OkGo;
import com.lzy.okgo.callback.StringCallback;

import org.json.JSONArray;

import java.io.IOException;

import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class OkhttpLearnActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_okhttp_learn);
        final Button btnGetBlogs = findViewById(R.id.btn_okhttpLearn_getBlogs);

        btnGetBlogs.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {

                // Android 4.0 之后不能在主線程中請求HTTP請求
                new Thread(new Runnable(){
                    @Override
                    public void run() {
                        String json = "{\"username\":\"MarkerHub\",\"password\":\"111111\"}";
                        OkHttpClient client = new OkHttpClient();//創建Http客戶端
                        Request request = new Request.Builder()
                                .url("http://192.168.56.1:8081/login")//***.***.**.***為本機IP,xxxx為端口,/  /  為訪問的接口后綴
                                .post(RequestBody.create(MediaType.parse("application/json"),json))
                                .build();//創建Http請求
                        Log.d("test",json);
                        try {
                            Response response = client.newCall(request).execute();//執行發送的指令
                            Log.d("test", "response success");
                            final String responseData = response.body().string();//獲取返回的結果
                            Log.d("test",responseData);
                        } catch (IOException e) {
                            e.printStackTrace();
                            Log.d("test", "response failed");
                        }
                    }
                }).start();

            }
        });
    }
}
<?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"
    tools:context=".okhttp_learn.OkhttpLearnActivity">

    <Button
        android:id="@+id/btn_okhttpLearn_getBlogs"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="獲取數據"/>

</LinearLayout>

在AndroidManifest.xml中添加網絡請求的權限

<uses-permission android:name="android.permission.INTERNET" />

我出現的問題與解決方法

在端口測試工具中測試是正常的,顯示如下

但是會拋出異常,網上有說將http改成https,但依然會拋出異常

但其實在配置文件中添加一下語句即可,java.net.UnknownServiceException: CLEARTEXT communication to t.main.wedeep.com.cn not permitted by network security policy

android:usesCleartextTraffic="true"

最終成功運行


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM