【Android】简单使用OkHttp进行网络请求
在安卓项目中进行的测试, 因后续需要使用Retrofit进行网络请求, 而 Retrofix底层是使用了Okhttp, 因此稍微学习了一下一共参考
实现过程是在Android项目中进行的:
添加依赖:
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
MainActivity.java
public class MainActivity extends BaseActivity implements Callback { // 使用 OkHttp 请求数据 OkHttpClient okHttpClient = new OkHttpClient(); Request request = new Request.Builder() .url("http://songsearch.kugou.com/song_search_v2?keyword=%E7%A7%8B%E6%84%8F%E6%B5%93&page=1&pagesize=10") .build(); Call call = okHttpClient.newCall(request); // Response response = call.execute(); // 同步请求,在Android中不适用(不在主线程进行耗时操作) call.enqueue(this); // 异步请求, 因为直接写了this, 在当前类实现回调方法 /** * OKHttp连接失败 * * @param call * @param e */ @Override public void onFailure(@NotNull Call call, @NotNull IOException e) { Toast.makeText(mContext, "网络错误", Toast.LENGTH_SHORT).show(); } /** * OKHttp连接成功 * * @param call * @param response * @throws IOException */ @Override public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { Intent intent2viewTest = new Intent(mContext, ViewTestActivity.class); // Log.d(TAG, "onResponse: " + Thread.currentThread()); if (response.code() == 200) { String dataStr = Objects.requireNonNull(response.body()).string(); Bundle bundle = new Bundle(); bundle.putString(getString(R.string.bundleDataKey_httpTest), dataStr); intent2viewTest.putExtra(getString(R.string.bundleKey_httpTest), bundle); startActivity(intent2viewTest); // handle 通知当前 activity 主线程更新视图 Message msg = new Message(); msg.what = 0; msg.setData(bundle); // mHandler.sendMessage(msg); } } @Override public void handlerMsg(Message msg) { if (msg.what == 0) { Log.d(TAG, "handlerMsg: 更新视图"); tvTest.setText(msg.getData().getString(getString(R.string.bundleDataKey_httpTest))); } else { throw new IllegalStateException("Unexpected value: " + msg.what); } } }

浙公网安备 33010602011771号