android: 用okhttp通信
一,安装第三方库:
1,库地址:
https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp
2,安装
在build.gradle的dependencies中增加一行:
implementation 'com.squareup.okhttp3:okhttp:4.12.0'
如下:
dependencies {
implementation libs.appcompat
implementation libs.material
implementation libs.activity
implementation libs.constraintlayout
testImplementation libs.junit
androidTestImplementation libs.ext.junit
androidTestImplementation libs.espresso.core
implementation 'com.squareup.okhttp3:okhttp:4.12.0'
}
然后点击 sync now
二,配置权限:
在AndroidManifest.xml中添加权限:
<uses-permission android:name="android.permission.INTERNET" />
否则会报以下错误:
java.lang.SecurityException: Permission denied (missing INTERNET permission?)
三,代码:
package com.example.okdemo1;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import androidx.activity.EdgeToEdge;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main);
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});
//给按钮增加点击事件
Button myButton = findViewById(R.id.apibutton);
myButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 处理点击事件
doGetData();
}
});
}
//以get方式访问互联网上的页面,并返回数据
private void doGetData() {
Toast.makeText(MainActivity.this, "按钮被点击了!", Toast.LENGTH_LONG).show();
//1.创建HttpClient对象
OkHttpClient okHttpClient = new OkHttpClient();
//2.获取request对象
Request.Builder builder = new Request.Builder().url("https://www.bilibili.com/");
Request request = builder.build();
//3.异步请求发起
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(@NonNull Call call, @NonNull IOException e) {
}
@Override
public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
try {
String result = response.body().string();
//如果需要更新主线程的 UI 如果使用 rxjava 以及 retrofit 就不用这样处理了
System.out.println("网络请求返回结果:");
System.out.println(result);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
});
}
}
四,测试效果:
界面:

执行结果:

浙公网安备 33010602011771号