android throw java.lang.IllegalStateException 上的 Http Url Connection 问题:已连接
Posted
技术标签:
【中文标题】android throw java.lang.IllegalStateException 上的 Http Url Connection 问题:已连接【英文标题】:Issue with Http Url Connection on android throw java.lang.IllegalStateException: Already connected 【发布时间】:2016-06-17 00:27:17 【问题描述】:大家好,我正在开发一些应用程序,它与 Web 服务建立 Http 连接,以检查服务器中的用户名和密码。 当我登录时总是抛出 java.lang.IllegalStateException: 已经连接了这个异常并且它从今天开始,昨天它工作得很好 这是我的连接代码:
String username = params[0];
String password = params[1];
String res="";
HttpURLConnection urlConnection=null;
String urllogin=getResources().getString(R.string.AppLogin);
Content="phone_no="+URLEncoder.encode(username)+"&pass="+URLEncoder.encode(password);
try
URL url=new URL(urllogin);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setDoOutput(true);
urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
urlConnection.setRequestProperty("Connection","close");
urlConnection.setRequestProperty("Content-Length", String.valueOf(Content.getBytes().length));
urlConnection.setRequestMethod("POST");
urlConnection.setChunkedStreamingMode(0);
OutputStream outputStream=new BufferedOutputStream(urlConnection.getOutputStream());
outputStream.write(Content.getBytes());
if(urlConnection.getResponseCode()==HttpURLConnection.HTTP_OK)
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
res = readStream(in);
if(urlConnection.getResponseCode()!=HttpURLConnection.HTTP_OK)
InputStream in = new BufferedInputStream(urlConnection.getErrorStream());
res = readStream(in);
抛出异常时的日志或错误:
03-03 17:18:52.831 19012-19012/? E/View:hasTransientState 递减到 0 以下:setHasTransientState 调用对不匹配 03-03 17:19:27.607 19012-20724/? E/androidRuntime:致命异常:AsyncTask #1 03-03 17:19:27.607 19012-20724/? E/AndroidRuntime:进程:com.mycompany.logintoapp,PID:19012 03-03 17:19:27.607 19012-20724/? E/AndroidRuntime: java.lang.RuntimeException: 执行 doInBackground() 时出错 03-03 17:19:27.607 19012-20724/? E/AndroidRuntime:在 android.os.AsyncTask$3.done(AsyncTask.java:300) 03-03 17:19:27.607 19012-20724/? E/AndroidRuntime:在 java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 03-03 17:19:27.607 19012-20724/? E/AndroidRuntime:在 java.util.concurrent.FutureTask.setException(FutureTask.java:222) 03-03 17:19:27.607 19012-20724/? E/AndroidRuntime:在 java.util.concurrent.FutureTask.run(FutureTask.java:242) 03-03 17:19:27.607 19012-20724/? E/AndroidRuntime:在 android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 03-03 17:19:27.607 19012-20724/? E/AndroidRuntime:在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 03-03 17:19:27.607 19012-20724/? E/AndroidRuntime:在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 03-03 17:19:27.607 19012-20724/? E/AndroidRuntime:在 java.lang.Thread.run(Thread.java:818) 03-03 17:19:27.607 19012-20724/? E/AndroidRuntime: 引起: java.lang.IllegalStateException: 已经连接 03-03 17:19:27.607 19012-20724/? E/AndroidRuntime:在 java.net.URLConnection.checkNotConnected(URLConnection.java:463) 03-03 17:19:27.607 19012-20724/? E/AndroidRuntime:在 java.net.URLConnection.setDoOutput(URLConnection.java:877) 03-03 17:19:27.607 19012-20724/? E/AndroidRuntime:在 com.mycompany.logintoapp.MainActivity$ValidateLogin.doInBackground(MainActivity.java:275) 03-03 17:19:27.607 19012-20724/? E/AndroidRuntime:在 com.mycompany.logintoapp.MainActivity$ValidateLogin.doInBackground(MainActivity.java:225) 03-03 17:19:27.607 19012-20724/? E/AndroidRuntime:在 android.os.AsyncTask$2.call(AsyncTask.java:288) 03-03 17:19:27.607 19012-20724/? E/AndroidRuntime:在 java.util.concurrent.FutureTask.run(FutureTask.java:237) 03-03 17:19:27.607 19012-20724/? E/AndroidRuntime:在 android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 03-03 17:19:27.607 19012-20724/? E/AndroidRuntime:在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 03-03 17:19:27.607 19012-20724/? E/AndroidRuntime:在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 03-03 17:19:27.607 19012-20724/? E/AndroidRuntime:在 java.lang.Thread.run(Thread.java:818) 03-03 17:19:27.619 19012-19012/? E/CliptrayUtils: hideClipTrayIfNeeded() TextView 被聚焦!!隐藏剪辑托盘() 03-03 17:19:27.628 19012-19012/? E/CliptrayUtils: hideClipTrayIfNeeded() TextView 被聚焦!! hideClipTray()
我不明白昨天是什么问题
编辑: 异常总是抛出这个行
urlConnection.setDoOutput(true);
urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
urlConnection.setRequestProperty("Connection","close");
urlConnection.setRequestProperty("Content-Length", String.valueOf(Content.getBytes().length));
EDIT2:现在我在发帖时总是缺少参数,但奇怪的是它只在 LG g3 5.0 中
【问题讨论】:
我在用 php 编写的 REST API 服务器上遇到了类似的问题,但也只有 LG G3 和 5.0...了解正在发生的事情。 【参考方案1】:仅供参考,您只需要一个 if 语句和一个 else。并且只需在每个子句中指定您需要的 BufferedInputStream。然后进行之后的设置。这样,您只需检查一次响应代码。不确定这是否是您的问题,但它肯定会对您有所帮助,以确保您只做一次又一次。更容易调试问题。
InputStream inputStream;
if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK)
inputStream = urlConnection.getInputStream();
else
inputStream = urlConnection.getErrorStream();
InputStream in = new BufferedInputStream(inputStream);
res = readStream(in);
并确保关闭所有流、连接等,为下次调用做好准备。
【讨论】:
【参考方案2】:根据this 问题,此异常可能具有误导性并隐藏了错误URL 的问题。我建议您验证您的远程服务器是否按预期运行,并且您尝试连接的 URL 确实可以访问。
【讨论】:
以上是关于android throw java.lang.IllegalStateException 上的 Http Url Connection 问题:已连接的主要内容,如果未能解决你的问题,请参考以下文章
Phonegap/Cordova build android node_modules/q/q.js throw e;
android throw java.lang.IllegalStateException 上的 Http Url Connection 问题:已连接
Android Studio 查看源码出现throw new RuntimeException("Stub!"); 解决办法
Android throw DeadObjectException with LOG: Transaction failed on small parcel;远程进程可能已经死了
event.js:174 throw er// 未处理的“错误”事件操作不允许
错误记录Visual Studio 中编译 NDK 报错 ( error : cannot use ‘throw‘ with exceptions disabled )