2013-03-16 2 views
0

Я работаю через учебник Android Facebook здесь: https://developers.facebook.com/docs/howtos/androidsdk/3.0/fetch-user-data/Android Facebook API - StringBuilder возвращает NULL

В этом фрагменте кода:

private String buildUserInfoDisplay(GraphUser user) { 

     StringBuilder userInfo = new StringBuilder(""); 
     Log.d("Graphuser:user",user.toString()); 
     Log.d("StringBuilder:userInfo",userInfo.toString()); 
     // Example: typed access (name) 
     // - no special permissions required 
     Log.d("Name: ",String.format("Name: %s\n\n", user.getName())); 

     userInfo.append(String.format("Name: %s\n\n", user.getName())); 

     // Example: typed access (birthday) 
     // - requires user_birthday permission 
     //userInfo.append(String.format("Birthday: %s\n\n", user.getBirthday())); 

     // Example: partially typed access, to location field, 
     // name key (location) 
     // - requires user_location permission 
     //userInfo.append(String.format("Location: %s\n\n", user.getLocation().getProperty("name"))); 

     // Example: access via property name (locale) 
     // - no special permissions required 
     userInfo.append(String.format("Locale: %s\n\n", user.getProperty("locale"))); 

    // Get a list of languages from an interface that 
    // extends the GraphUser interface and that returns 
    // a GraphObject list of MyGraphLanguage objects. 
    GraphObjectList<MyGraphLanguage> languages = (user.cast(MyGraphUser.class)).getLanguages(); 
    Log.d("Languages",languages.toString()); 
    if (languages.size() > 0) { 
     ArrayList<String> languageNames = new ArrayList<String>(); 
     // Iterate through the list of languages 
     for (MyGraphLanguage language : languages) { 
      // Add the language name to a list. Use the name 
      // getter method to get access to the name field. 
      languageNames.add(language.getName()); 
     }      

     //userInfo.append(String.format("Languages: %s\n\n", languageNames.toString())); 
    } 

     return userInfo.toString(); 
    } 

В userInfo.append() результаты функции в исключение нулевого указателя. Кто-нибудь сталкивался с этим раньше? Я проверил, что у меня тот же код, что и в учебнике.

/* Update - Append Logcat */

03-16 17:59:18.154: W/dalvikvm(1189): threadid=1: thread exiting with uncaught exception (group=0x40a13300) 
03-16 17:59:18.204: E/AndroidRuntime(1189): FATAL EXCEPTION: main 
03-16 17:59:18.204: E/AndroidRuntime(1189): java.lang.NullPointerException 
03-16 17:59:18.204: E/AndroidRuntime(1189):  at net.myname.myapp.MainFragment.buildUserInfoDisplay(MainFragment.java:84) 
03-16 17:59:18.204: E/AndroidRuntime(1189):  at net.myname.myapp.MainFragment.access$2(MainFragment.java:56) 
03-16 17:59:18.204: E/AndroidRuntime(1189):  at net.myname.myapp.MainFragment$2.onCompleted(MainFragment.java:125) 
03-16 17:59:18.204: E/AndroidRuntime(1189):  at com.facebook.Request$1.onCompleted(Request.java:264) 
03-16 17:59:18.204: E/AndroidRuntime(1189):  at com.facebook.Request$4.run(Request.java:1240) 
03-16 17:59:18.204: E/AndroidRuntime(1189):  at android.os.Handler.handleCallback(Handler.java:615) 
03-16 17:59:18.204: E/AndroidRuntime(1189):  at android.os.Handler.dispatchMessage(Handler.java:92) 
03-16 17:59:18.204: E/AndroidRuntime(1189):  at android.os.Looper.loop(Looper.java:137) 
03-16 17:59:18.204: E/AndroidRuntime(1189):  at android.app.ActivityThread.main(ActivityThread.java:4745) 
03-16 17:59:18.204: E/AndroidRuntime(1189):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-16 17:59:18.204: E/AndroidRuntime(1189):  at java.lang.reflect.Method.invoke(Method.java:511) 
03-16 17:59:18.204: E/AndroidRuntime(1189):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
03-16 17:59:18.204: E/AndroidRuntime(1189):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
03-16 17:59:18.204: E/AndroidRuntime(1189):  at dalvik.system.NativeStart.main(Native Method) 
03-16 17:59:18.354: D/dalvikvm(1189): GC_CONCURRENT freed 423K, 6% free 8428K/8903K, paused 107ms+76ms, total 316ms 
+0

Какое значение userInfo.append? Я бы сказал, что user.getProperty («locale») может по какой-то причине вернуть null. Однако я не пробовал. Я просто быстро взглянул на этот вопрос :) –

+0

Добавьте сюда свой логарифм. – Sajmon

+0

@Sajmon - Добавлено logcat – jwBurnside

ответ

1

код не выполняется, когда пользователь не предоставил эту информацию на Facebook. Оберните код с помощью try и catch для java.lang.NullPointerException

0

Это, вероятно, что-то связано с безопасностью нить вашей buildUserInfoDisplay, потому что StringBuilder не должен потерпеть неудачу, как это. Возможно, существуют разные потоки, обращающиеся к функции в одно и то же время, и это вызывает NPE (внутренний для StringBuilder?).

Попробуйте синхронизировать метод или используйте StringBuffer вместо StringBuilder, который является потокобезопасным.

Ps .: Ничего себе, это как писать для славы :)

+0

Эй, извините, Kap, я на самом деле неосознанно прокомментировал оскорбительные строки кода, когда я тестировал ваше предложение, поэтому я прыгнул с пистолета, когда подтвердил ваше решение. – jwBurnside

+0

Без проблем, рад, что вы решили! –

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