Android Studio OKhttp 使用教程
对于学习Android Studio 的同学来说,不要单单只局限于学习组件的使用方法,我们应该用实用程序来体验一下Android 开发的使用效果,增加一些兴趣。那我们来先做一个简单的登录界面。
我们先来看一下具体效果。
接下来就让我们一起来做一下如何实现简单的登录。
- 导入依赖
implementation('com.squareup.okhttp3:okhttp:4.4.1')
implementation('com.google.code.gson:gson:2.8.6')
在App文件夹下的build.gradle 中导入依赖。
- 在AndroidMainifest中的 application标签中加入
android:usesCleartextTraffic="true"
- 设置页面布局。在xml中自定义布局样式。
<Button
android:id="@+id/button4"
android:layout_width="150dp"
android:layout_height="54dp"
android:text="登录"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/button5"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editText3"
app:layout_constraintVertical_bias="0.551" />
<Button
android:id="@+id/button5"
android:layout_width="98dp"
android:layout_height="54dp"
android:text="注册"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/button4"
app:layout_constraintTop_toBottomOf="@+id/editText4"
app:layout_constraintVertical_bias="0.341" />
<EditText
android:id="@+id/editText3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:ems="10"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/textView2"
app:layout_constraintTop_toBottomOf="@+id/textView" />
<EditText
android:id="@+id/editText4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPassword"
app:layout_constraintBottom_toTopOf="@+id/button4"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/textView3"
app:layout_constraintTop_toBottomOf="@+id/editText3" />
<TextView
android:id="@+id/textView2"
android:layout_width="83dp"
android:layout_height="35dp"
android:text="账号"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
app:layout_constraintBottom_toBottomOf="@+id/editText3"
app:layout_constraintEnd_toStartOf="@+id/editText3"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/editText3" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="52dp"
android:text="登录界面"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.542"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView3"
android:layout_width="86dp"
android:layout_height="34dp"
android:text="密码"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
app:layout_constraintBottom_toTopOf="@+id/button4"
app:layout_constraintEnd_toStartOf="@+id/editText4"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2" />
- 在AndroidManifest中和layout 进行绑定,显示布局样式。
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
- 在activity活动中新建public函数,在函数中进行网络请求和UI控制
-
设定json传输的参数
public static final MediaType JSON = MediaType.get("application/json; charset=utf-8");
-
用OKhttp 进行网络请求,注意要新建线程。
public void OKhttp3(final String address, final String account, final String password){ Thread a= new Thread(new Runnable() { @Override public void run() { try { HashMap<String,String> json=new HashMap<String, String>(); json.put("name",account); json.put("psw",password); Gson gson=new Gson(); String r=gson.toJson(json); OkHttpClient client=new OkHttpClient(); RequestBody requestBody = RequestBody.create(r,JSON); Request request=new Request.Builder() .url("http://49.233.81.150:9090/api/Login") .post(requestBody) .build(); Response response=client.newCall(request).execute(); final String responseData=response.body().string(); if(response.isSuccessful()){ if(responseData.equals("0")){ Intent intent=new Intent(MainActivity.this,SecondActivity.class); startActivity(intent); } else { runOnUiThread(new Runnable() { @Override public void run() { if (responseData.equals("-2")) { Toast.makeText(MainActivity.this, "用户名不存在", Toast.LENGTH_SHORT).show(); } else if (responseData.equals("-1")) { Toast.makeText(MainActivity.this, "密码错误", Toast.LENGTH_SHORT).show(); } } }); } } } catch (Exception e){ e.printStackTrace(); Log.e("MainActivity", "error : ", e); } } }); a.start(); }
- 其余活动间跳转等代码就不放了,大家有兴趣自己去实现一下。(用Intent)