安卓okhttp3進行網絡請求,一個簡單的登錄頁面的實現

文章目錄

一、前言

 寫在文章的前面:爲了不浪費大家的時間,本文只是爲了記錄一下自己開發過程中遇到的問題,而且這只是一個最簡單的登錄頁面的實
 現,不能解決安卓大佬開發上的任何問題,只是給我自己或者和我一樣的0基礎的人看的。

 本文通過okhttp3實現安卓app進行後臺webapi的網絡訪問。
 初學android,想開發一個簡單的app,在網上查閱了大量的資料,但是都是一些很老的教程了,雖然適用,但是講的不是很清楚,對
 沒有系統學習過安卓的人來說很不友好。

二、配置okhttp3

<!--在app目錄下的 build.gradle文件中添加 -->

dependencies {
   
   
    implementation("com.squareup.okhttp3:okhttp:4.1.0")
}

<!-- AndroidManifest.xml文件中添加 -->
<!--開啓網絡權限,不然不能進行網絡訪問-->
<uses-permission android:name="android.permission.INTERNET" />

三、activity_main.xml文件

 因爲是登錄界面,並且只作爲示範,所以樣式簡陋,將就着能用就好。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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">

    <EditText
        android:id="@+id/edit_username"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="160dp"
        android:layout_marginLeft="160dp"
        android:layout_marginTop="116dp"
        android:layout_marginEnd="38dp"
        android:layout_marginRight="38dp"
        android:ems="10"
        android:hint="@string/edit_message"
        android:inputType="textPersonName"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.688"
        app:layout_constraintStart_toEndOf="@+id/textView2"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="0dp"
        android:layout_height="46dp"
        android:layout_marginStart="39dp"
        android:layout_marginLeft="39dp"
        android:layout_marginEnd="9dp"
        android:layout_marginRight="9dp"
        android:gravity="center"
        android:text="@string/edit_username_title"
        app:layout_constraintBaseline_toBaselineOf="@+id/edit_username"
        app:layout_constraintEnd_toStartOf="@+id/edit_username"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="138dp"
        android:layout_height="152dp"
        android:layout_marginStart="39dp"
        android:layout_marginLeft="39dp"
        android:layout_marginEnd="10dp"
        android:layout_marginRight="10dp"
        android:gravity="center"
        android:text="@string/edit_password_title"
        app:layout_constraintBaseline_toBaselineOf="@+id/edit_password"
        app:layout_constraintEnd_toStartOf="@+id/edit_password"
        app:layout_constraintStart_toStartOf="parent" />

    <EditText
        android:id="@+id/edit_password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="24dp"
        android:layout_marginEnd="37dp"
        android:layout_marginRight="37dp"
        android:ems="10"
        android:hint="@string/edit_message_password"
        android:inputType="textPassword"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/textView3"
        app:layout_constraintTop_toBottomOf="@+id/edit_username" />

    <Button
        android:id="@+id/btn_login"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="84dp"
        android:onClick="login"
        android:text="@string/button_send"
        app:layout_constraintStart_toEndOf="@+id/textView3"
        app:layout_constraintTop_toBottomOf="@+id/edit_password" />

</androidx.constraintlayout.widget.ConstraintLayout>

四、MainActivity的實現

//包名自己導自己的
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.util.JsonToken;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.Toast;

import org.json.JSONArray;

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

public class MainActivity extends AppCompatActivity {
   
   

    public static final String EXTRA_MESSAGE ="com.example.myapplication.MESSAGE";


    public EditText edit_username;
    public EditText edit_password;

    public Button btn_login;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    public void login(View view){
   
   

        btn_login = (Button)findViewById(R.id.btn_login);
        btn_login.setOnClickListener(new View.OnClickListener() {
   
   
            @Override
            public void onClick(View v) {
   
   

				//千萬注意這一點,要寫入新線程裏,不能寫到主線程內。
                new Thread(new Runnable() {
   
   
                    @Override
                    public void run() {
   
   
                        try{
   
   
                            edit_username = (EditText) findViewById(R.id.edit_username);
                            edit_password  = (EditText) findViewById(R.id.edit_password);

                            //獲取文本框輸入的內容
                            String username = edit_username.getText().toString();
                            String password = edit_password.getText().toString();

                            Log.d("賬號" ,username);
                            Log.d("密碼" ,password);

                            //重點在這裏
                            //因爲要實現的是登錄,所以使用post請求,因爲要生成如下請求,
							//即http://localhost:8080/user/login?username=xxx&password=xxx
							//所以使用FormBody,對應的是Spring中的@RequestBody,Springboot中的@RestController
                            FormBody.Builder params = new FormBody.Builder();
                            //將用戶名密碼添加進去
                            params.add("username",username);
                            params.add("password",password);

                            Log.d("參數",params+"");

                            //創建OkHttpClient實例,url寫的是你自己後臺的接口
                            OkHttpClient client = new OkHttpClient();
                            Request request = new Request.Builder()
                                    .url("http://127.0.0.1:8081/user/login")
                                    .post(params.build())
                                    .build();
                            Log.d("URL",request+"");
							//創建response,並且接收返回的token
                            Response response = client.newCall(request).execute();
                            String responseData = response.body().string();
                            //跳轉頁面,第一個參數當前頁面,第二個參數跳轉頁面
                            Intent intent = new Intent(MainActivity.this,SecondActivity.class);
                            startActivity(intent);


							//android studio裏的打印到控制檯
                            Log.d("輸出結果:",responseData);
                        }catch (Exception e){
   
   
                            e.printStackTrace();
							//同樣寫入線程,不然會報錯
                            runOnUiThread(new Runnable() {
   
   
                                @Override
                                public void run() {
   
   
									//失敗的提示信息
                                    Toast.makeText(MainActivity.this,"網絡連接失敗!",Toast.LENGTH_SHORT).show();
                                }
                            });

                        }
                    }
                }).start();
                //線程的這裏一定要寫start開啓,不然線程不會運行
            }
        });
    }
}

五、SecondActivity實現

    //SecondActivity寫自己要實現的內容,本文只演示登錄和跳轉
    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

    }

六、activity_second.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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=".SecondActivity">

    <TextView
        android:id="@+id/textView5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="214dp"
        android:text="看到這個說明登錄成功"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

七、登錄頁面

在這裏插入圖片描述

 寫在文章末,雖然是一個很簡單的demo,來源也都是網上資源的整合,不過也算是記錄一下自己開發的第一個頁面了,後面可能會一步
 步的跟進我項目的開展,繼續寫一些學習過程中遇到的問題。僅作爲記錄生活使用。本代碼複製即可運行,如果能幫到您,萬分榮幸。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章