一个code是用来工作的作品没有更多的API级别低于11 - 崩溃doInBackground [英] A code that used to work works no more for api level lower than 11 - crash doInBackground

查看:142
本文介绍了一个code是用来工作的作品没有更多的API级别低于11 - 崩溃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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆