安卓okhttp3進行網路請求,一個簡單的登錄頁面的實作
- 文章目錄
- 一、前言
- 二、配置okhttp3
- 三、activity_main.xml檔案
- 四、MainActivity的實作
- 五、SecondActivity實作
- 六、activity_second.xml
- 七、登錄頁面
文章目錄
一、前言
寫在文章的前面:為了不浪費大家的時間,本文只是為了記錄一下自己開發程序中遇到的問題,而且這只是一個最簡單的登錄頁面的實
現,不能解決安卓大佬開發上的任何問題,只是給我自己或者和我一樣的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,來源也都是網上資源的整合,不過也算是記錄一下自己開發的第一個頁面了,后面可能會一步
步的跟進我專案的開展,繼續寫一些學習程序中遇到的問題,僅作為記錄生活使用,本代碼復制即可運行,如果能幫到您,萬分榮幸,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/241363.html
標籤:其他
上一篇:求助,媒資,視頻編目
