我在我的android应用程序中获取json架构,它工作正常。但问题是如果互联网在获取数据的过程中中断,应用程序崩溃。我如何处理这个异常?应用程序崩溃,如果互联网中断在Android
我打电话给new LoadPlaces().execute();
,然后在doInBackground方法中,这叫做googlePlaces.search(lat1, lon1, radius, types);
,它获取json数据并将它分配给一个对象。
这是搜索方法
public PlacesList search(double latitude, double longitude, double radius, String types)
throws Exception {
this._latitude = latitude;
this._longitude = longitude;
this._radius = radius;
try {
HttpRequestFactory httpRequestFactory = createRequestFactory(HTTP_TRANSPORT);
HttpRequest request = httpRequestFactory.buildGetRequest(new GenericUrl(PLACES_SEARCH_URL));
request.getUrl().put("key", API_KEY);
request.getUrl().put("location", _latitude + "," + _longitude);
request.getUrl().put("radius", _radius); // in meters
request.getUrl().put("sensor", "false");
if(types != null)
request.getUrl().put("types", types);
PlacesList list = request.execute().parseAs(PlacesList.class);
// Check log cat for places response status
Log.d("Places Status", "" + list.status);
return list;
} catch (HttpResponseException e) {
Log.e("Error:", e.getMessage());
return null;
}
}
请不要回复此帮助我,这是最重要的我。我准备提供赏金,但请帮助我。感谢
logcat的
06-08 05:15:25.335 32008-32008/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.atifarain.customizedcamera, PID: 32008
java.lang.NullPointerException
at com.example.atifarain.customizedcamera.MainActivity$LoadPlaces$1.run(MainActivity.java:485)
at android.app.Activity.runOnUiThread(Activity.java:4757)
at com.example.atifarain.customizedcamera.MainActivity$LoadPlaces.onPostExecute(MainActivity.java:479)
at com.example.atifarain.customizedcamera.MainActivity$LoadPlaces.onPostExecute(MainActivity.java:446)
at android.os.AsyncTask.finish(AsyncTask.java:632)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5105)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
at dalvik.system.NativeStart.main(Native Method)
MainActivity
class LoadPlaces extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
protected String doInBackground(String... args) {
// creating Places class object
googlePlaces = new GooglePlaces();
try {
// Separeate your place types by PIPE symbol "|"
// If you want all types places make it as null
//String types = "establishment|art_gallery|museum|place_of_worship";
//String types = "art_gallery|museum";
String types = "art_gallery|museum|place_of_worship";
double radius = 1000; // 1000 meters
// get nearest places
nearPlaces = googlePlaces.search(lat1, lon1, radius, types);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* Always use runOnUiThread(new Runnable()) to update UI from background
* thread, otherwise you will get error
* **/
protected void onPostExecute(String file_url) {
// updating UI from Background Thread
runOnUiThread(new Runnable() {
public void run() {
/**
* Updating parsed Places into LISTVIEW
* */
// Get json response status
String status = nearPlaces.status;
// Check for all possible status
if(status.equals("OK")){
// Successfully got places details
if (nearPlaces.results != null) {
// loop through each place
ArrayList<String> coordinates = new ArrayList<String>();
ArrayList<Double> bearings = new ArrayList<Double>();
for (NearbyPlaceNodes p : nearPlaces.results) {
HashMap<String, String> map = new HashMap<String, String>();
// NearbyPlaceNodes reference is used to get "place full details"
map.put(KEY_REFERENCE, p.reference);
map.put(KEY_NAME, p.name); // NearbyPlaceNodes name
double lat2 = p.geometry.location.lat;
double lon2 = p.geometry.location.lng;
double _bearing = bearing(lat1, lon1, lat2, lon2);
bearings.add(_bearing);
String lat = Double.toString(lat2);
String lon = Double.toString(lon2);
String latlon = lat+","+lon;
coordinates.add(latlon);
String bearing_ = String.format("%.04f",_bearing);
String nearbyDat = latlon+","+bearing_+","+p.name;
nearbyData.add(nearbyDat);
placesListItems.add(map); // adding HashMap to ArrayList
}
MainActivity.this.onBackgroundTaskDataObtained(nearbyData);
}
}
线#485 =>String status = nearPlaces.status;
线#479 =>runOnUiThread(new Runnable() {
线#446 =>class LoadPlaces extends AsyncTask<String, String, String> {
谢谢你,你解释得很好(y) – Aqarain