Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.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.net.ProtocolException:已建立连接(在现有Post中未找到合适的解决方案)_Java_Android - Fatal编程技术网

java.net.ProtocolException:已建立连接(在现有Post中未找到合适的解决方案)

java.net.ProtocolException:已建立连接(在现有Post中未找到合适的解决方案),java,android,Java,Android,在我的一个android应用程序中,调用API时出现错误“java.net.ProtocolException:连接已建立”(我参考了解决方案,但没有用) 下面是我调用API的代码。代码适用于除一个API之外的所有API。该API与其他API的开发方式相同,但仍然低于该API的代码抛出错误 HttpURLConnection con = null; BufferedReader in = null; StringBuilder sb

在我的一个android应用程序中,调用API时出现错误“java.net.ProtocolException:连接已建立”(我参考了解决方案,但没有用)

下面是我调用API的代码。代码适用于除一个API之外的所有API。该API与其他API的开发方式相同,但仍然低于该API的代码抛出错误

HttpURLConnection con = null;
                BufferedReader in = null;
                StringBuilder sb = new StringBuilder();
                try {

                    URL uri = null;
                    uri = new URL(url);
                    LogUtil.v("~~URL - "+url);

                    con = (HttpURLConnection) uri.openConnection();
                    System.setProperty("http.keepAlive", "false");
                    con.setRequestMethod(requestType); //type: POST, PUT, DELETE, GET
                    con.setDoOutput(true);
//                  con.setDoInput(true);
                    con.setConnectTimeout(TIMEOUT); //20 secs
                    con.setReadTimeout(TIMEOUT); //20 secs
                    con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

                    String authorizationString = "Basic " + Base64.encodeToString((myAuthString).getBytes(), Base64.DEFAULT); 

                    con.setRequestProperty("Authorization", authorizationString);

                    if( body != null){

                        LogUtil.v("~~BODY - "+body);

                        DataOutputStream out = new  DataOutputStream(con.getOutputStream());
                        out.writeBytes(body);
                        out.flush();
                        out.close();
                    }

                    con.connect();
                    InputStream inst = con.getInputStream();
                    in = new BufferedReader(new InputStreamReader(inst));

                    String temp = null;

                    while((temp = in.readLine()) != null){
                        sb.append(temp).append(" ");
                    }

                } catch (IOException e) {
                    e.printStackTrace();
                }catch (Exception e) {
                    e.printStackTrace();
                }finally{
                    if(in!=null){
                        try {
                            in.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                    if(cb!=null){
                        if (sb.toString().length() >0) {
                            LogUtil.v("~~ RESPONSE - "+ sb.toString());
                            cb.onResponse(sb.toString(), actionCode);
                        }else{
                            LogUtil.v("~~ RESPONSE - null");
                            cb.onResponse(null, actionCode);
                        }
                    }
                                    if(con!=null)
                                            con.disconnect();

                }
请不要建议在此处使用DefaultHttpClient

我想用上面的方法解决这个问题,因为它适用于所有其他API

仅供参考:已使用浏览器检查API调用,它正在返回数据。它只是在从ANDROID调用时抛出错误

~~~~~~已编辑~~~~~~~~~~~(服务器端API是用PHP开发的)

让我简化我的问题解释:

function API1Call(){
   // callAPI(param...)
}

function API2Call(){
   // callAPI(param...)
}

callAPI(param..){

// above API call code goes here
}
如果您看到函数callAPI(param…),它将在需要调用API时执行

***>现在在我的项目中,我调用了许多在不同活动上编写的API

仅针对一个API调用,在callAPI(param…)上方引发异常 我上面提到过***

~~~~~~我的LOGCAT~~~~~~~

08-31 14:22:45.309: W/System.err(27364): java.net.ProtocolException: Connection already established
08-31 14:22:45.314: W/System.err(27364):    at java.net.HttpURLConnection.setRequestMethod(HttpURLConnection.java:666)
08-31 14:22:45.324: W/System.err(27364):    at libcore.net.http.HttpsURLConnectionImpl.setRequestMethod(HttpsURLConnectionImpl.java:144)
08-31 14:22:45.329: W/System.err(27364):    at 
com.indapoint.ewe.api.EWeAPI$1.run(EWeAPI.java:245)
08-31 14:22:45.334: W/System.err(27364):    at java.lang.Thread.run(Thread.java:856)

不要在
getOutputStream()
调用之后使用
con.connect()
,因为第二个调用无论如何都会调用connect()

请发布堆栈跟踪。您有一个异常,您发布了代码,但没有堆栈跟踪。为什么?谢谢你的回复。但这里我的问题是,如果错误是由于在getOutputStream()之后使用con.connect()引起的,那么为什么它不为其他API引发相同的异常呢??它只是在调用一个API时引发异常。对于其余的API,它工作得很好。您的意思是,对于其他API调用。如果它们在connect()之前,那是因为在这一点上没有异常。如果它们在那个调用之后,它们不会被执行,那么为什么会出现错误呢。。。你有没有玩过游戏,或者读过代码路径,或者读过异常?嗨,塔索斯。如果你仍然面临理解我所说内容的问题,请告诉我。:)@RipalTamboli一些API调用需要一个打开的连接(
getOutputStream
就是一个例子),当连接尚未打开时,它们会自动打开连接。还有一些不需要开放连接,它们可以安全地(有时必须)在
connect
之前被调用。这与服务器端实现无关。