好吧,我有一個代碼,以前工作得很好,現在它不適用於低於11的設備。 一切都開始良好,在我的主要活動我發動AsyncTask
,裏面doInBackground
出現錯誤,如下圖所示:連接代碼不適用於低於11的api級別 - doInBackground崩潰
@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
方法。正如我所說的,這適用於高於11的api級別。下面是我的logcat,它對我沒有太大的幫助。
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 [email protected] 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 [email protected] 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)
我真的很感激的幫助,我可能做了一個新手的錯誤,並說,一個窗口被泄露的原因可能是因爲它崩潰了,它甚至能夠關閉該對話框之前。
可能的重複[一個代碼,用於工作沒有更多的API級別低於11 - 崩潰doInBackground](http://stackoverflow.com/questions/20700379/a-code-that-used-to -work-works-no-more-for-api-level-lower-11-crash-doinb) – laalto
@laalto是一種讓我'知道'代碼不再適用於api級別低於11的方法?我該如何跟上,不要弄得一團糟? –
Android Lint通常可以提供有關minSdkLevel中不可用的警告信息。因此,請注意警告並定期運行整個項目皮棉。 – laalto