I am making an android app in which i want to load json data. My specification is that, if there is internet available, then load the data from a url which i provide.
If There is no internet, then load the local json.txt file.
My app is able to load the data from the url if there is internet connection and it can load the local json data if there is absolute no internet connection.
However in meta state such as this, my app crashes.
The log is
07-14 09:56:21.258  22499-28349/scientist.jobless.foodmana E/log_tag﹕ Error in http connection java.net.UnknownHostException: Unable to resolve host "lit-hamlet-6856.herokuapp.com": No address associated with hostname
07-14 09:56:21.258  22499-28349/scientist.jobless.foodmana E/log_tag﹕ Error converting result java.lang.NullPointerException
07-14 09:56:21.258  22499-28349/scientist.jobless.foodmana E/log_tag﹕ Error parsing data org.json.JSONException: End of input at character 0 of
07-14 09:56:21.266  22499-28349/scientist.jobless.foodmana E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
    java.lang.RuntimeException: An error occured while executing doInBackground()
            at android.os.AsyncTask$3.done(AsyncTask.java:299)
            at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
            at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
            at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
            at java.util.concurrent.FutureTask.run(FutureTask.java:137)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
            at java.lang.Thread.run(Thread.java:856)
     Caused by: java.lang.NullPointerException
            at scientist.jobless.foodmana.JsonLoadSubFirstFirst$DownloadJSON.doInBackground(JsonLoadSubFirstFirst.java:239)
            at scientist.jobless.foodmana.JsonLoadSubFirstFirst$DownloadJSON.doInBackground(JsonLoadSubFirstFirst.java:215)
            at android.os.AsyncTask$2.call(AsyncTask.java:287)
            at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
            at java.util.concurrent.FutureTask.run(FutureTask.java:137)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
            at java.lang.Thread.run(Thread.java:856)
07-14 09:56:21.878  22499-22499/scientist.jobless.foodmana E/WindowManager﹕ Activity scientist.jobless.foodmana.JsonLoadSubFirstFirst has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@5374c12c that was originally added here
    android.view.WindowLeaked: Activity scientist.jobless.foodmana.JsonLoadSubFirstFirst has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@5374c12c that was originally added here
            at android.view.ViewRootImpl.<init>(ViewRootImpl.java:374)
            at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:292)
            at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:224)
            at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:149)
            at android.view.Window$LocalWindowManager.addView(Window.java:547)
            at android.app.Dialog.show(Dialog.java:277)
            at scientist.jobless.foodmana.MyCustomProgressDialog.show(MyCustomProgressDialog.java:43)
            at scientist.jobless.foodmana.JsonLoadSubFirstFirst$DownloadJSON.onPreExecute(JsonLoadSubFirstFirst.java:227)
            at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
            at android.os.AsyncTask.execute(AsyncTask.java:534)
            at scientist.jobless.foodmana.JsonLoadSubFirstFirst.onCreate(JsonLoadSubFirstFirst.java:74)
            at android.app.Activity.performCreate(Activity.java:5008)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
            at android.app.ActivityThread.access$600(ActivityThread.java:130)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4745)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)
Below is my java code where i am checking for connection type.
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Get the view from listview_main.xml
    setContentView(R.layout.listview_main);
    // Execute DownloadJSON AsyncTask
    ConnectivityManager connec = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
    if (connec != null && (
            (connec.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED) ||
                    (connec.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED))) {
        new DownloadJSON(this).execute();
        //You are connected, do something online.
    } else if (connec != null && (
            (connec.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.DISCONNECTED) ||
                    (connec.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.DISCONNECTED ))) {
        //Not connected.
        Toast.makeText(getApplicationContext(), "You must be connected to the internet", Toast.LENGTH_LONG).show();
        new LocalDownloadJSON().execute();
    }
    else if (connec != null && (
            (connec.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.UNKNOWN) ||
                    (connec.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.UNKNOWN ))) {
        //i want to load local json data here
    }
}
My question is that how to handle that meta state of connection as i have shown in the emulator's picture.
i have tried this  answer but i get error on isNetworkAvailable(context) as cannot resolve method isNetworkAvailable.
Is there anyway by this code ??
(connec != null && (
             (connec.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.UNKNOWN) ||
                        (connec.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.UNKNOWN )))
LocalJsonDownload.java
private class LocalDownloadJSON extends AsyncTask<Void, Void, Void> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pd = new ProgressDialog(JsonLoadSubFirstFirst.this);
            pd.setMessage("Loading...");
            pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            pd.setIndeterminate(true);
            pd.setCancelable(false);
            pd.show();
        }
        @Override
        protected Void doInBackground(Void... params) {
            // Create an array
            localarraylist = new ArrayList<HashMap<String, String>>();
            // Retrieve JSON Objects from the given URL address
            StringBuffer sb = new StringBuffer();
            BufferedReader br = null;
            try {
                br = new BufferedReader(new InputStreamReader(getAssets().open("localfood.txt")));
                String temp;
                while ((temp = br.readLine()) != null)
                    sb.append(temp);
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            finally
            {
                try
                {
                    br.close();
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                }
            }
            myjsonstring = sb.toString();
            try{
                JSONObject jsonObj = new JSONObject(myjsonstring);
                JSONArray Attendance = jsonObj.getJSONArray("events");
                for (int i = 0; i < Attendance.length(); i++)
                {
                    JSONObject a = Attendance.getJSONObject(i);
                    String Name = a.getString("Name");
                    String time = a.getString("Time");
                    String ingredients = a.getString("ingredients");
                    String Serves = a.getString("Serves");
                    String descr = a.getString("Description");
                    HashMap<String, String> contact = new HashMap<String, String>();
                    // adding each child node to HashMap key => value
                    contact.put("Name", Name);
                    contact.put("Time", time);
                    contact.put("ingredients", ingredients);
                    contact.put("Serves", Serves);
                    contact.put("Description", descr);
                    // adding contact to contact list
                    localarraylist.add(contact);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
            return null;
        }
        @Override
        protected void onPostExecute(Void args) {
            Toast.makeText(getApplicationContext(),"Loading local data dishes, please connect o internet to load new dishes",Toast.LENGTH_LONG).show();
            // Locate the listview in listview_main.xml
            //setContentView(R.layout.listview_main);
            listview = (ListView) findViewById(R.id.listview);
            // Pass the results into ListViewAdapter.java
            adapter = new ListViewAdapter(JsonLoadSubFirstFirst.this, localarraylist);
            // Set the adapter to the ListView
            listview.setAdapter(adapter);
            // Close the progressdialog
            //  mProgressDialog.dismiss();
            //   textView.setVisibility(View.VISIBLE);
            pd.dismiss();
            super.onPostExecute(args);
        }
    }
 
     
     
     
    