Java Android:使用getApplication()卡在ClassCastException上,试图集成Facebook Friendpicker示例

Java Android:使用getApplication()卡在ClassCastException上,试图集成Facebook Friendpicker示例,java,android,eclipse,facebook,sample,Java,Android,Eclipse,Facebook,Sample,我正在尝试将Facebook Friendpicker示例集成到Parse.com快速启动代码中。这将创建一个应用程序,通过Facebook登录,连接到Parse.com,并允许您选择朋友,当然,这是一个更大计划的一部分。选择facebook好友后,您可以单击“完成”,此时应用程序会将所选好友存储到应用程序中。单击“完成”时会崩溃,但只有在单击“完成”后,选择屏幕本身才能正常工作。你能帮我理解出什么地方出了问题,为什么下面这行会导致问题 导致问题的行是:GamePlannerFriendPick

我正在尝试将Facebook Friendpicker示例集成到Parse.com快速启动代码中。这将创建一个应用程序,通过Facebook登录,连接到Parse.com,并允许您选择朋友,当然,这是一个更大计划的一部分。选择facebook好友后,您可以单击“完成”,此时应用程序会将所选好友存储到应用程序中。单击“完成”时会崩溃,但只有在单击“完成”后,选择屏幕本身才能正常工作。你能帮我理解出什么地方出了问题,为什么下面这行会导致问题

导致问题的行是:GamePlannerFriendPickerApplicationApplication=GamePlannerFriendPickerApplicationGetApplication

日志:

    06-02 15:25:02.176: W/dalvikvm(274): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
    06-02 15:25:02.285: E/AndroidRuntime(274): FATAL EXCEPTION: main
    06-02 15:25:02.285: E/AndroidRuntime(274): java.lang.ClassCastException: com.parse.integratingfacebooktutorial.IntegratingFacebookTutorialApplication
    06-02 15:25:02.285: E/AndroidRuntime(274):  at com.parse.integratingfacebooktutorial.GamePlannerPickFriendsActivity$2.onDoneButtonClicked(GamePlannerPickFriendsActivity.java:66)
    06-02 15:25:02.285: E/AndroidRuntime(274):  at com.facebook.widget.PickerFragment$6.onClick(PickerFragment.java:650)
    06-02 15:25:02.285: E/AndroidRuntime(274):  at android.view.View.performClick(View.java:2408)
    06-02 15:25:02.285: E/AndroidRuntime(274):  at android.view.View$PerformClick.run(View.java:8816)
    06-02 15:25:02.285: E/AndroidRuntime(274):  at android.os.Handler.handleCallback(Handler.java:587)
    06-02 15:25:02.285: E/AndroidRuntime(274):  at android.os.Handler.dispatchMessage(Handler.java:92)
    06-02 15:25:02.285: E/AndroidRuntime(274):  at android.os.Looper.loop(Looper.java:123)
    06-02 15:25:02.285: E/AndroidRuntime(274):  at android.app.ActivityThread.main(ActivityThread.java:4627)
    06-02 15:25:02.285: E/AndroidRuntime(274):  at java.lang.reflect.Method.invokeNative(Native Method)
    06-02 15:25:02.285: E/AndroidRuntime(274):  at java.lang.reflect.Method.invoke(Method.java:521)
    06-02 15:25:02.285: E/AndroidRuntime(274):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    06-02 15:25:02.285: E/AndroidRuntime(274):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    06-02 15:25:02.285: E/AndroidRuntime(274):  at dalvik.system.NativeStart.main(Native Method)
令人恼火的是facebook示例使用了完全相同的方法第80行PickFriendsActivity.java,只是使用了不同的变量名

请参见GamePlanner PickFriendsActivity.java中的friendPickerFragment.setOnDoneButtonClickedListener:

    public class GamePlannerPickFriendsActivity extends FragmentActivity {
FriendPickerFragment friendPickerFragment;

// A helper to simplify life for callers who want to populate a Bundle with the necessary
// parameters. A more sophisticated Activity might define its own set of parameters; our needs
// are simple, so we just populate what we want to pass to the FriendPickerFragment.
public static void populateParameters(Intent intent, String userId, boolean multiSelect, boolean showTitleBar) {
    intent.putExtra(FriendPickerFragment.USER_ID_BUNDLE_KEY, userId);
    intent.putExtra(FriendPickerFragment.MULTI_SELECT_BUNDLE_KEY, multiSelect);
    intent.putExtra(FriendPickerFragment.SHOW_TITLE_BAR_BUNDLE_KEY, showTitleBar);
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.game_planner_pick_friends_activity);

    FragmentManager fm = getSupportFragmentManager();

    if (savedInstanceState == null) {
        // First time through, we create our fragment programmatically.
        final Bundle args = getIntent().getExtras();
        friendPickerFragment = new FriendPickerFragment(args);
        fm.beginTransaction()
                .add(R.id.friend_picker_fragment, friendPickerFragment)
                .commit();
    } else {
        // Subsequent times, our fragment is recreated by the framework and already has saved and
        // restored its state, so we don't need to specify args again. (In fact, this might be
        // incorrect if the fragment was modified programmatically since it was created.)
        friendPickerFragment = (FriendPickerFragment) fm.findFragmentById(R.id.friend_picker_fragment);
    } 

    friendPickerFragment.setOnErrorListener(new PickerFragment.OnErrorListener() {
        @Override
        public void onError(PickerFragment<?> fragment, FacebookException error) {
            GamePlannerPickFriendsActivity.this.onError(error);
        }
    });

    friendPickerFragment.setOnDoneButtonClickedListener(new PickerFragment.OnDoneButtonClickedListener() {
        @Override
        public void onDoneButtonClicked(PickerFragment<?> fragment) {
            // We just store our selection in the Application for other activities to look at.
            GamePlannerFriendPickerApplication application = (GamePlannerFriendPickerApplication) getApplication();
            application.setSelectedUsers(friendPickerFragment.getSelection());

            setResult(RESULT_OK, null);
            finish();
        }
    });
}

private void onError(Exception error) {
    String text = getString(R.string.exception, error.getMessage());
    Toast toast = Toast.makeText(this, text, Toast.LENGTH_SHORT);
    toast.show();
}

@Override
protected void onStart() {
    super.onStart();
    try {
        GamePlannerFriendPickerApplication application = (GamePlannerFriendPickerApplication) getApplication();
        List<GraphUser> selectedUsers = application.getSelectedUsers();
        if (selectedUsers != null && !selectedUsers.isEmpty()) {
            friendPickerFragment.setSelection(selectedUsers);
        }
        // Load data, unless a query has already taken place.
        friendPickerFragment.loadData(false);
    } catch (Exception ex) {
        onError(ex);
    }
}
    }
我还将包括清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.parse.integratingfacebooktutorial"
android:versionCode="1"
android:versionName="1.0" >

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

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="17" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:name=".IntegratingFacebookTutorialApplication" >
    <activity
        android:name=".LoginActivity"
        android:label="@string/app_name"
        android:launchMode="singleTop" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity 
        android:name=".UserDetailsActivity" 
        android:label="@string/app_name"/>

    <activity android:name=".GamePlannerPickFriendsActivity"
              android:label="Pick Friends">
    </activity>
    <activity android:name=".GamePlannerFriendPickerApplication"
              android:label="@string/app_name"/>
    <activity android:name=".GamePlannerPickFriendsMainCode"
              android:label="@string/app_name"
              android:windowSoftInputMode="adjustResize">
    </activity>
    <meta-data android:name="com.facebook.sdk.ApplicationId" 
        android:value="@string/app_id"/>
</application>
为了安全起见,GamePlanner FriendPickerApplication.java

    public class GamePlannerFriendPickerApplication extends Application {
private List<GraphUser> selectedUsers;

public List<GraphUser> getSelectedUsers() {
    return selectedUsers;
}

public void setSelectedUsers(List<GraphUser> selectedUsers) {
    this.selectedUsers = selectedUsers;
}
}

我真的希望你能帮助我。我不确定我在这里做错了什么,我还在学习诀窍,所以任何帮助都将不胜感激

您需要更改应用程序清单标记,如下所示:

<application
        android:name="full.package.name.GamePlannerFriendPickerApplication"
现在在清单中,您正在声明类IntegratingFacebookTutorialApplication,因此当您获取应用程序引用并尝试将其强制转换到GamePlanner FrienderPickerApplication时,应用程序将引发异常,因为该实例的类型为IntegratingFacebookTutorialApplication,只要确保设置了正确的应用程序名GamePlannerFriendPickerApplication,您的类强制转换异常就会消失


问候

我在facebook sdk提供的friendpicker示例中遇到问题,它根本没有检索任何朋友,只显示一个白色屏幕。如果你能解决我的问题,请帮助。