首页 > 解决方案 > java.lang.IllegalStateException:充气机已关闭

问题描述

okhttp用来做http get请求。我必须检索一个 url 的正文并将其用作string一个TextView

我的代码 -

new Thread(new Runnable() {
    @Override
    public void run() {
        OkHttpClient client = new OkHttpClient();

        Request request = new Request.Builder()
                .url(myURL)
                .build();

        try {
            try (final Response response = client.newCall(request).execute()) {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            t.setText(response.body().string());
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                });
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}).start();

启动活动应用程序后崩溃

错误 -

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.vedang.sadhguru, PID: 8677
    java.lang.IllegalStateException: Inflater has been closed
        at java.util.zip.Inflater.ensureOpen(Inflater.java:397)
        at java.util.zip.Inflater.inflate(Inflater.java:258)
        at okio.InflaterSource.readOrInflate(InflaterSource.kt:79)
        at okio.InflaterSource.read(InflaterSource.kt:49)
        at okio.GzipSource.read(GzipSource.kt:69)
        at okio.Buffer.writeAll(Buffer.kt:1642)
        at okio.RealBufferedSource.readString(RealBufferedSource.kt:95)
        at okhttp3.ResponseBody.string(ResponseBody.kt:187)
        at com.vedang.sadhguru.VideoList$1$1.run(VideoList.java:48)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6119)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

标签: javaandroidokhttp

解决方案


I have solved it.

    new Thread(new Runnable() {
        @Override
        public void run() {
            OkHttpClient client = new OkHttpClient();

            Request request = new Request.Builder()
                    .url(myURL)
                    .build();
            try {
                try (final Response response = client.newCall(request).execute()) {
                    ChangeText(response.body().string());
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }).start();    
}

public void ChangeText(final String text) {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            t.setText(text);
        }
    });
}

created ChangeText void and ran it on ui thread


推荐阅读