一个code是用来工作的作品没有更多的API级别低于11 - 崩溃doInBackground [英] A code that used to work works no more for api level lower than 11 - crash doInBackground
问题描述
好吧,我有一个code,它曾经工作得很好,现在它不适用于设备只工作,低于11。
一切都开始了罚款,在我的主要活动我发起的AsyncTask
,里面的 doInBackground
,如下图所示出现错误:
Okay, I have a code that used to work just fine and right now it doesn't work only for devices, lower than 11.
Everything starts out fine and in my main activity I launch an AsyncTask
, inside doInBackground
appears the error as shown below:
@Override
protected Integer doInBackground(Integer... params) {
final String info = getString(R.string.inf);
final String post = getString(R.string.pos);
final String main = getString(R.string.mai);
String val1 = "";
String val2 = "";
String val3 = "";
int connSucc = 3;
try {
JSONTokener sbTokener = new JSONTokener(Sources.httpGet(infoUrlStr).toString()); //==========>>It crashes right here
JSONArray jArray=new JSONArray(sbTokener);
for(int i=0; i<(jArray.length()); i++)
{
JSONObject json_obj_inf = jArray.getJSONObject(i);
.
.
.
所以,我检查 Sources.httpGet
:
public static StringBuilder httpGet (String urlStr) {
StringBuilder err = new StringBuilder();
hata.append("Error!");
HttpURLConnection conn = null;
BufferedReader rd = null;
StringBuilder sb = null;
try {
URL url = new URL(urlStr);
conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(6000);
conn.setReadTimeout(10000);
if (conn.getResponseCode() >= 200 && conn.getResponseCode() <= 299) {
rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
sb = new StringBuilder();
String line;
while ((line = rd.readLine()) != null) {
sb.append(line);
}
rd.close();
conn.disconnect();
}
else {
return err;
}
}
catch (NetworkOnMainThreadException a) {
return err;
}
catch (Exception e) {
return err;
}
finally {
if (rd != null) {
try {
rd.close();
} catch (IOException e) {
return err;
}
}
if (conn != null) {
conn.disconnect();
}
}
return sb;
}
我觉得它甚至不能得到这个 HTTPGET
方法。正如我已经说过这工作就好了API级别比11高出下面是我的logcat这没有帮助我这么多。
I think it can't even get to this httpGet
method. As I've said this works just fine for api level higher than 11. Below is my logcat which didn't help me that much.
12-20 10:32:11.194: E/AndroidRuntime(357): FATAL EXCEPTION: AsyncTask #1
12-20 10:32:11.194: E/AndroidRuntime(357): java.lang.RuntimeException: An error occured while executing doInBackground()
12-20 10:32:11.194: E/AndroidRuntime(357): at android.os.AsyncTask$3.done(AsyncTask.java:200)
12-20 10:32:11.194: E/AndroidRuntime(357): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
12-20 10:32:11.194: E/AndroidRuntime(357): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
12-20 10:32:11.194: E/AndroidRuntime(357): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
12-20 10:32:11.194: E/AndroidRuntime(357): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
12-20 10:32:11.194: E/AndroidRuntime(357): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
12-20 10:32:11.194: E/AndroidRuntime(357): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
12-20 10:32:11.194: E/AndroidRuntime(357): at java.lang.Thread.run(Thread.java:1096)
12-20 10:32:11.194: E/AndroidRuntime(357): Caused by: java.lang.VerifyError: com.akilli.ticaret.source.Sources
12-20 10:32:11.194: E/AndroidRuntime(357): at com.akilli.ticaret.Main$RestRequ.doInBackground(Main.java:130)
12-20 10:32:11.194: E/AndroidRuntime(357): at com.akilli.ticaret.Main$RestRequ.doInBackground(Main.java:1)
12-20 10:32:11.194: E/AndroidRuntime(357): at android.os.AsyncTask$2.call(AsyncTask.java:185)
12-20 10:32:11.194: E/AndroidRuntime(357): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
12-20 10:32:11.194: E/AndroidRuntime(357): ... 4 more
12-20 10:32:13.064: E/WindowManager(357): Activity com.akilli.ticaret.Main has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@45fa6e78 that was originally added here
12-20 10:32:13.064: E/WindowManager(357): android.view.WindowLeaked: Activity com.akilli.ticaret.Main has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@45fa6e78 that was originally added here
12-20 10:32:13.064: E/WindowManager(357): at android.view.ViewRoot.<init>(ViewRoot.java:247)
12-20 10:32:13.064: E/WindowManager(357): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
12-20 10:32:13.064: E/WindowManager(357): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
12-20 10:32:13.064: E/WindowManager(357): at android.view.Window$LocalWindowManager.addView(Window.java:424)
12-20 10:32:13.064: E/WindowManager(357): at android.app.Dialog.show(Dialog.java:241)
12-20 10:32:13.064: E/WindowManager(357): at com.akilli.ticaret.Main$RestRequ.onPreExecute(Main.java:111)
12-20 10:32:13.064: E/WindowManager(357): at android.os.AsyncTask.execute(AsyncTask.java:391)
12-20 10:32:13.064: E/WindowManager(357): at com.akilli.ticaret.Main$1.onClick(Main.java:50)
12-20 10:32:13.064: E/WindowManager(357): at android.view.View.performClick(View.java:2408)
12-20 10:32:13.064: E/WindowManager(357): at android.view.View$PerformClick.run(View.java:8816)
12-20 10:32:13.064: E/WindowManager(357): at android.os.Handler.handleCallback(Handler.java:587)
12-20 10:32:13.064: E/WindowManager(357): at android.os.Handler.dispatchMessage(Handler.java:92)
12-20 10:32:13.064: E/WindowManager(357): at android.os.Looper.loop(Looper.java:123)
12-20 10:32:13.064: E/WindowManager(357): at android.app.ActivityThread.main(ActivityThread.java:4627)
12-20 10:32:13.064: E/WindowManager(357): at java.lang.reflect.Method.invokeNative(Native Method)
12-20 10:32:13.064: E/WindowManager(357): at java.lang.reflect.Method.invoke(Method.java:521)
12-20 10:32:13.064: E/WindowManager(357): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
12-20 10:32:13.064: E/WindowManager(357): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12-20 10:32:13.064: E/WindowManager(357): at dalvik.system.NativeStart.main(Native Method)
我真的AP preciate的帮助,我可能做了一个新手的错误,并说,一个窗口被泄露的原因可能是因为它崩溃了,它甚至能够关闭该DialogBox的面前。也是我的图书馆是为了
I'd really appreciate the help, I probable made a rookie mistake, and the reason it says that a window is leaked is probably because it crashes before it's even able to dismiss the dialogbox. Also my libraries are in order
推荐答案
NetworkOnMainThreadException
在API层面引入了<$ C 11.您的code引用它$ C>抓块。当类加载器试图加载code引用缺少类(与API级别低于11运行时),一个的VerifyError
被抛出。
NetworkOnMainThreadException
was introduced in API level 11. Your code references it in the catch
block. When the class loader tries to load code referencing missing classes (on a runtime with API level lower than 11), a VerifyError
is thrown.
删除提及 NetworkOnMainThreadException
。你不应该抓住它摆在首位。
Remove the reference to NetworkOnMainThreadException
. You should not be catching it in the first place.
这篇关于一个code是用来工作的作品没有更多的API级别低于11 - 崩溃doInBackground的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!