Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android Studio-单击按钮时引发异常_Java_Android_Android Studio_Okhttp - Fatal编程技术网

Java Android Studio-单击按钮时引发异常

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

我正在制作一个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.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();
            }
        });
     }