2012-01-11 2 views
0

Я использую баннер MapQuest в своем приложении для Android, и я просто столкнулся с проблемой с одним из методов, требуемых RouteManager.RouteCallback(), который является частью баннера MapQuest.Как я могу уловить исключение NullPointerException из метода? Пример внутри

Метод, предоставляющий мне NullPointerException, является методом onError(), как вы увидите в приведенном ниже коде. Как я могу уловить исключение NullPointerException из этого метода, чтобы приложение не разбилось? Я попытался обернуть весь метод в try/catch, но это не работает, оно дает мне ошибки. Какие-либо предложения? Благодарю.

routeManager.setRouteCallback(new RouteManager.RouteCallback() { 

     @Override 
     public void onError(RouteResponse routeResponse) { 
      Info info = routeResponse.info; 
      int statusCode = info.statusCode; 

      StringBuilder message = new StringBuilder(); 
      message.append("Unable to create route.\n").append("Error: ") 
        .append(statusCode).append("\n").append("Message: ") 
        .append(info.messages); 
      Toast.makeText(getApplicationContext(), message.toString(), 
        Toast.LENGTH_LONG).show(); 
      createRouteButton.setEnabled(true); 
     } 

     @Override 
     public void onSuccess(RouteResponse routeResponse) { 
      clearButton.setVisibility(View.VISIBLE); 
      if (showItineraryButton.getVisibility() == View.GONE 
        && showMapButton.getVisibility() == View.GONE) { 
       showItineraryButton.setVisibility(View.VISIBLE); 
      } 
      createRouteButton.setEnabled(true); 
     } 

    }); 
} 

Трассировка стека:

01-11 14:26:51.296: E/AndroidRuntime(343): FATAL EXCEPTION: main 
01-11 14:26:51.296: E/AndroidRuntime(343): java.lang.NullPointerException: println needs a message 
01-11 14:26:51.296: E/AndroidRuntime(343): at android.util.Log.println_native(Native Method) 
01-11 14:26:51.296: E/AndroidRuntime(343): at android.util.Log.e(Log.java:230) 
01-11 14:26:51.296: E/AndroidRuntime(343): at com.mapquest.android.maps.RouteManager.handleResponse(RouteManager.java:393) 
01-11 14:26:51.296: E/AndroidRuntime(343): at com.mapquest.android.maps.RouteManager.access$400(RouteManager.java:59) 
01-11 14:26:51.296: E/AndroidRuntime(343): at com.mapquest.android.maps.RouteManager$RouteTask.onPostExecute(RouteManager.java:648) 
01-11 14:26:51.296: E/AndroidRuntime(343): at com.mapquest.android.maps.RouteManager$RouteTask.onPostExecute(RouteManager.java:611) 
01-11 14:26:51.296: E/AndroidRuntime(343): at android.os.AsyncTask.finish(AsyncTask.java:417) 
01-11 14:26:51.296: E/AndroidRuntime(343): at android.os.AsyncTask.access$300(AsyncTask.java:127) 
01-11 14:26:51.296: E/AndroidRuntime(343): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429) 
01-11 14:26:51.296: E/AndroidRuntime(343): at android.os.Handler.dispatchMessage(Handler.java:99) 
01-11 14:26:51.296: E/AndroidRuntime(343): at android.os.Looper.loop(Looper.java:123) 
01-11 14:26:51.296: E/AndroidRuntime(343): at android.app.ActivityThread.main(ActivityThread.java:3683) 
01-11 14:26:51.296: E/AndroidRuntime(343): at java.lang.reflect.Method.invokeNative(Native Method) 
01-11 14:26:51.296: E/AndroidRuntime(343): at java.lang.reflect.Method.invoke(Method.java:507) 
01-11 14:26:51.296: E/AndroidRuntime(343): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
01-11 14:26:51.296: E/AndroidRuntime(343): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
01-11 14:26:51.296: E/AndroidRuntime(343): at dalvik.system.NativeStart.main(Native Method) 
+0

Какую ошибку вы получаете, когда вы заверните его –

+0

Какую ошибку.? вы получаете, когда обертываете всю внутреннюю часть функции с помощью try/catch? – nmjohn

+0

Можете ли вы вставить в pastebin значение nullpointerexception? – beta0x64

ответ

0

Вы не поймать NullPointerException. Вы просто ничего не делаете с ссылками null.

Проверьте, какой ссылка null точно, и проверить if (foo != null) {..}

+0

NullPointerExceptions могут быть уловлены, хотя это может быть не очень хорошая идея в большинстве приложений. – nmjohn

+0

в 99% приложений. Я не сказал, что это невозможно. Я сказал, что ты этого не делаешь. – Bozho

+0

NPE - это «println: требуется сообщение», и происходит некоторый код, к которому у меня нет доступа.Ничто внутри самого метода onError не вызывает NPE. Это происходит сразу же после выхода из метода onError. –

0

Это вообще не очень хорошая идея, чтобы поймать NullPointerException. Вы должны избегать разыменования нулевой переменной. Например, проверьте, что переменная не является нулевой, если вы считаете, что она может быть.

В вашем примере это выглядит как createRouteButton по какой-то причине является null.

+0

Я не включил всю активность, createRouteButton определен в другом коде и не является нулевым. NPE - это «println: требуется сообщение», и происходит некоторый код, к которому у меня нет доступа. Ничто внутри самого метода onError не вызывает NPE. Это происходит сразу же после выхода из метода onError –

+0

Если это так, это не имеет никакого отношения к этому коду. Трассировки стека? – Krylez

+0

Stack Trace: pastebin.com/nfH80uRT –

0

Иногда мы должны признать поражение. Вы можете попытаться разбить кувшин кувалдой или повесить голову и опубликовать нить на форумах MapQuest.

:(

http://developer.mapquest.com/web/products/forums/-/message_boards?_19_mbCategoryId=224714

Edit: О, это стоит выстрел Вы используете самую последнюю версию MPQ API

+0

У меня есть последняя версия. Я на самом деле пытаюсь редактировать исходный файл, который вызывает проблему сейчас. Как получится. –

Смежные вопросы