0

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);
             .
             .
             .

So I checked 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;
}

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)

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

Suhrahj Rothgar
  • 283
  • 6
  • 21

2 Answers2

2

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.

Remove the reference to NetworkOnMainThreadException. You should not be catching it in the first place.

laalto
  • 150,114
  • 66
  • 286
  • 303
  • let's just marry. I've been busting my head around this for hours now. I don't know how to thank you, and this is the hundredth time you are helping out! – Suhrahj Rothgar Dec 20 '13 at 10:34
0

What's causing the verifyerror see the logcat. It's probably some method in Sources class that is not supported on the android SDK level you are using. So check if there is some method which is not supported in Android Sdk lower than 11.