首先必须必要马上要做的事情就是在manifest文件中开启联网权限
<uses-permission android:name="android.permission.INTERNET" />
还必须引入Okhttp的jar包可以再okhttp官网上下载
或者在build.gradle中引入
compile 'com.squareup.okhttp3:okhttp:3.5.0'
还有注意的就是写okhttp要求我们必须在线程中请求http,然后在利用handle进行传递消息
需求如下
点击按钮
然后在文本框
中显示请求出来的数据
java代码如下
package com.okhttp;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class MainActivity extends AppCompatActivity {
private String request;
Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
handler = new Handler() {//利用handele进行传递消息
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
if (msg.what == 0x001) {
TextView textView = findViewById(R.id.TextView1);
textView.setText(request);
Toast.makeText(MainActivity.this, "wochenggle", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, "我错了", Toast.LENGTH_SHORT).show();
}
}
};
Button button = findViewById(R.id.submit);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Thread(new Runnable() {//在子线程中请求url
@Override
public void run() {
try {
request = get("https://geoapi.qweather.com/v2/city/lookup?location=beij&range=cn&lang=zh&key=ced0f37ec5ad4ce1a01c579fcf084fda");
Message m = new Message();
m.what = 0x001;
handler.sendMessage(m);
} catch (IOException e) {
Message m = new Message();
m.what = 0x002;
handler.sendMessage(m);
}
}
}).start();
}
});
}
OkHttpClient client = new OkHttpClient();
//okhttpGet请求
final String get(String url) throws IOException {
Request request = new Request.Builder()
.url(url)
.build();
try (Response response = client.newCall(request).execute()) {
return response.body().string();
}
}
}