0

私はここでAndroidFacebookチュートリアルを行っています:https ://developers.facebook.com/docs/howtos/androidsdk/3.0/fetch-user-data/

このコードのチャンクでは:

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 ()関数は、nullポインター例外を引き起こします。誰かがこれに遭遇したことがありますか?チュートリアルと同じコードを使用していることを確認しました。

/*更新-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
4

2 に答える 2

1

ユーザーがFacebookでその情報を提供していない場合、コードは失敗します。java.lang.NullPointerExceptionのtryandcatchでコードをラップします

于 2013-03-19T00:00:34.040 に答える
0

buildUserInfoDisplayStringBuilderはそのように失敗することは想定されていないため、これはおそらくスレッドセーフに関連するものです。おそらく、同時に関数にアクセスするさまざまなスレッドがあり、これがNPE(StringBuilderの内部?)を引き起こしています。

メソッドを同期するか、スレッドセーフであるStringBufferの代わりに使用してみてください。StringBuilder

追伸:うわー、それは栄光のために書くようなものです:)

于 2013-03-16T23:09:37.363 に答える