Java Android Studio-单击按钮时引发异常
我正在制作一个Adnroid应用程序,使用OkHTTP在点击按钮时发送API请求 但是我在这行有个错误 你能告诉我有什么问题吗Java Android Studio-单击按钮时引发异常,java,android,android-studio,okhttp,Java,Android,Android Studio,Okhttp,我正在制作一个Adnroid应用程序,使用OkHTTP在点击按钮时发送API请求 但是我在这行有个错误 你能告诉我有什么问题吗 package com.example.myapplication; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import com.squareup.okhttp.Call; import com.squa
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import com.squareup.okhttp.Call;
import com.squareup.okhttp.Callback;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
OkHttpClient client = new OkHttpClient();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void sendMessage(View view) {
//do something
String url = "http://7d356d3464a8.ngrok.io/neo4j?query=Th%C3%A0nh%20ph%E1%BB%91%20H%E1%BB%93%20Ch%C3%AD%20Minh";
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(url)
.build();
try {
Response response = client.newCall(request).execute();
}
catch(IOException e) {
e.printStackTrace();
}
}
}
您不应该在主线程上发出网络请求。 使用这种方法
final Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
Response response = client.newCall(request).execute();
} catch (IOException e) {
e.printStackTrace();
}
}
});
但是,okhttp
使我们可以更轻松地使用:
做一个异步GET,我们需要让一个调用排队。回调允许我们在响应可读时读取响应。这发生在响应头准备就绪之后 读取响应主体可能仍然会阻塞。OkHttp目前不提供任何异步API来接收部分响应体:
public void sendMessage(View view) {
String url = "http://7d356d3464a8.ngrok.io/neo4j?query=Th%C3%A0nh%20ph%E1%BB%91%20H%E1%BB%93%20Ch%C3%AD%20Minh";
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(url)
.build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
public void onResponse(Call call, Response response)
throws IOException {
// ...
}
public void onFailure(Call call, IOException e) {
fail();
}
});
}
onResponse的签名与您拥有的不同 公共void onResponse(调用、响应) 失败时公共无效(调用调用,可丢弃的t)
用文本粘贴错误消息。您给定的链接没有任何错误消息是的,我已经尝试过了,但出现了以下错误:onResponse的签名与您的不同。public void onResponse(Call Call,Response Response)和public void onFailure(Call Call Call,Throwable t)
public void sendMessage(View view) {
String url = "http://7d356d3464a8.ngrok.io/neo4j?query=Th%C3%A0nh%20ph%E1%BB%91%20H%E1%BB%93%20Ch%C3%AD%20Minh";
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(url)
.build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
public void onResponse(Call call, Response response)
throws IOException {
// ...
}
public void onFailure(Call call, IOException e) {
fail();
}
});
}