2015-05-02 25 views
0

我目前正在開發一個需要HTTP連接的Android應用程序。我正在使用物理設備來測試我的應用程序。如果我的設備上的無線連接未打開,我啓動應用程序,它顯然會崩潰告訴我「不幸的是,我的應用程序已停止。」 。然後有這個堆棧跟蹤告訴我與我的URL的連接被拒絕。到現在爲止還挺好。現在,我需要的是,當我的設備上沒有互聯網連接時,我的應用程序不會崩潰,而是希望它顯示一個對話框並讓應用程序繼續運行。 我也在使用Json。如果連接在Android上被拒絕,則顯示消息

這裏是我的代碼部分:

 protected String doInBackground(String... args) { 
     // Building Parameters 
     List<NameValuePair> params = new ArrayList<NameValuePair>(); 
     // getting JSON string from URL 
     JSONObject json = jParser.makeHttpRequest(url_all_restaurants, "GET", params); 
     System.out.println(json.toString()); 
     if (json==null) { 
      Toast.makeText(getApplicationContext(), "No internet connection", Toast.LENGTH_SHORT).show(); 

     } 
     else { 

      // Check your log cat for JSON reponse 
      Log.d("All Products: ", json.toString()); 
     } 

      try { 
       // Checking for SUCCESS TAG 
       int success = json.getInt(TAG_SUCCESS); 

       if (success == 1) { 
        // products found 
        // Getting Array of Products 
        Jrestaurants = json.getJSONArray(TAG_RESTAURANTS); 

        // looping through All Products 
        for (int i = 0; i < Jrestaurants.length(); i++) { 
         JSONObject c = Jrestaurants.getJSONObject(i); 

         // Storing each json item in variable 
         String name = c.getString("name"); 
         String description = c.getString("description"); 
         String address = c.getString("address"); 
         String rating = c.getString("rating"); 
         String open = c.getString("open"); 
         String close = c.getString("close"); 
         double lat = c.getDouble("latitude"); 
         double longit = c.getDouble("longitude"); 

         Restaurant r = new Restaurant(name, description, address, rating, open, close, lat, longit); 
         // Restaurant r2 = new Restaurant("Nobori Japanese Restaurant","0364 144 626","Plopilor 57-62 Street","4.2","10:00 am","11:30 pm",46.762555,23.556854); 

         restaurants.add(r.getName()); 
         // restaurants.add(r2.getName()); 

         restaurantsMap.put(r.getName(), r); 
         //restaurantsMap.put(r2.getName(),r2); 
        } 
       } else { 


       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

      return null; 
     } 

我想的事情是檢查是否json爲空,但不起作用。我不確定在哪裏查看。

回答

1

清單中添加:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 

ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
boolean internet = netInfo != null && netInfo.isConnected(); 

if(internet) { 
    JSONObject json = jParser.makeHttpRequest(url_all_restaurants, "GET", params); 
    //.... 
} else { 
    //show dialog 
} 
+0

嗯。它不起作用。 – Codemon

+0

嚴重會發生什麼? – MauriF

+0

相同的舊'org.apache.http.conn.HttpHostConnectException:連接到http://192.168.2.102拒絕' – Codemon

3

,讓您的類此方法:

public static boolean isNetworkAvailable(Context context) { 
    return ((ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo() != null; 
} 

調用此方法,並在if條件執行你asycTask:

if (isNetworkAvailable(context)) { 
    // available network 
    new MyTask().execute(""); // like this 
} else { 
    // no network 
} 
//<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
+0

我可能是錯的,但我認爲你的代碼只告訴你,你連接到網絡,但不是如果網絡有互聯網連接。 – MauriF

+0

是的,但我已經執行任務,而網絡連接,只有 其簡單的方法只是確定連接可用或不可用如果可用調用您的Web服務,否則顯示Toast消息,並且不要調用Web服務,你永遠不會得到異常 – Assad