Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.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 ProtocolException:意外的流结束_Java_Android_Ioexception_Protocolexception - Fatal编程技术网

Java ProtocolException:意外的流结束

Java ProtocolException:意外的流结束,java,android,ioexception,protocolexception,Java,Android,Ioexception,Protocolexception,我一直在处理一个不断出现的问题,我感到非常沮丧。我试图通过发送JSONObject,通过在线找到的模板php Web服务连接到我的数据库。当我试图从服务器获取响应代码时,我总是得到IOException或ProtocolException,原因是“意外的流结束”。错误消息非常神秘,我不知道错误是在java还是PHP代码中。我发布了代码,因此您可以查看: 堆栈跟踪: java.net.ProtocolException:意外的流结束 在com.android.okhttp.internal.htt

我一直在处理一个不断出现的问题,我感到非常沮丧。我试图通过发送JSONObject,通过在线找到的模板php Web服务连接到我的数据库。当我试图从服务器获取响应代码时,我总是得到IOException或ProtocolException,原因是“意外的流结束”。错误消息非常神秘,我不知道错误是在java还是PHP代码中。我发布了代码,因此您可以查看:

堆栈跟踪:
java.net.ProtocolException:意外的流结束
在com.android.okhttp.internal.http.HttpConnection$fixedlingthsink.close(HttpConnection.java:314)上
位于com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:781)
位于com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:443)
位于com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:388)
位于com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:501)
位于ske.matej.project.JSONParser.getJSONFromUrl(JSONParser.java:56)
位于ske.matej.project.UserFunctions.loginUser(UserFunctions.java:35)
位于ske.matej.project.LoginActivity$AttemptLogin.doInBackground(LoginActivity.java:145)
位于ske.matej.project.LoginActivity$AttemptLogin.doInBackground(LoginActivity.java:121)
在android.os.AsyncTask$2.call(AsyncTask.java:295)
位于java.util.concurrent.FutureTask.run(FutureTask.java:237)
在android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
在java.lang.Thread.run(Thread.java:818)
中更改以下内容:

//The offending line                
        int responseCodeHTTP = conn.getResponseCode(); 

        System.out.println("Responsecode HTTP "+responseCodeHTTP);

        OutputStream os = conn.getOutputStream();
        os.write(bytearray);
        os.flush();
致:


为了解决这个问题,我做了很多努力。我搜索了各种S/O帖子,通过在请求中添加标题“Connection:close”解决了这个问题。我找到了解决办法

类似这样的操作将解决java.net.ProtocolException:意外的流结束

okHttpClient = new OkHttpClient.Builder()
            .addNetworkInterceptor(new Interceptor() {
                @Override
                public Response intercept(Chain chain) throws IOException {
                    Request request = chain.request().newBuilder().addHeader("Connection", "close").build();
                    return chain.proceed(request);
                }
            })
            .build();

恐怕不行
java.io.IOException:连接{192.168.1.146:3306,proxy=DIRECT@hostAddress=192.168.1.146 cipherSuite=none protocol=http/1.1}(循环计数=0)
上的意外流结束,这修复了未发送到服务器的数据。现在php代码有一个问题。。。尝试删除:echo json_encode(“状态:200”);这不起作用,但我在堆栈跟踪中发现了这一点:
原因:java.io.EOFException:\n未找到:size=91 content=5700000FF6A04486F737742027616E64726F69642D393366235643931。。。04-06 17:34:28.457 12891-13068/ske.matej.project W/System.err:at com.android.okhttp.okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:200)04-06 17:34:28.457 12891-13068/ske.matej.project W/System.err:at com.android.okhttp.internal.HttpConnection.readResponse(HttpConnection.java:191)04-06 17:34:28.457 12891-13068/ske.matej.project W/System.err:。。。还有16个
okHttpClient = new OkHttpClient.Builder()
            .addNetworkInterceptor(new Interceptor() {
                @Override
                public Response intercept(Chain chain) throws IOException {
                    Request request = chain.request().newBuilder().addHeader("Connection", "close").build();
                    return chain.proceed(request);
                }
            })
            .build();