0

我可以在 android 中使用 skydrive API 登录到 skydrive。现在我想在另一个活动中使用相同的会话对象和 liveconnectclient 对象。我怎样才能做到这一点?

public void onAuthComplete(LiveStatus status, LiveConnectSession session,Object userState)
    {
        if (status == LiveStatus.CONNECTED)
        {

            client = new LiveConnectClient(session);




            Log.i("message", client.toString());
            // StoreSkydriveSession(session);
            txtskydrive.setText("Connected");
            skydrivefolder.setEnabled(true);
            isSkydriveConnected=true;
        } 
        else
        {
            txtskydrive.setText("Not Connected");
            Toast.makeText(getApplicationContext(), "Not Signed In",
                    Toast.LENGTH_LONG).show();
            // this.resultTextView.setText("Not signed in.");
            client = null;
        }
    }

我能够登录。现在我应该如何以及在哪里存储客户端和会话对象,以便我可以在其他活动中使用它。

我曾尝试使用 bean 来设置和获取值,但是当我尝试获取它时,它会引发空指针异常。

我尝试将其存储在共享首选项中,但我无法将其从字符串转换为 LiveConnectClient 对象。

谢谢 :)

编辑:

我认为我们可以使用 GSON ... Gson(也称为 Google Gson)是一个开源 Java 库,用于将 Java 对象序列化和反序列化到(和从)JSON

SharedPreferences mPrefs = getPreferences(MODE_PRIVATE);

For save

 Editor prefsEditor = mPrefs.edit();
 Gson gson = new Gson();
 String json = gson.toJson(client); //LiveConnectClient Object
 prefsEditor.putString("MyObject", json);
 prefsEditor.commit();
For get

Gson gson = new Gson();
String json = mPrefs.getString("MyObject", "");
LiveConnectClient obj = gson.fromJson(json, MyObject.class);

我认为这应该工作....

4

1 回答 1

0

如果您需要在不同的活动中访问相同的对象,那么最简单的方法是 - 只需创建某种处理程序类:

class LiveConnectClientHandler{

public static LiveConnectClient client;

}

然后当你得到它时:

public void onAuthComplete(LiveStatus status, LiveConnectSession session,Object userState) {
if (status == LiveStatus.CONNECTED) {
LiveConnectClientHandler.client = new LiveConnectClient(session);

因此,在其他活动中,您可能会通过 LiveConnectClientHandler.client 获得此信息。

但我不确定这是正确的方法。

首先,应该将数据从一个活动发送到另一个活动。

其次,您可能有其他方法来获取 LiveConnectSession 对象吗?因为对于一些简单的字符串资源,比如access_token,它只能是shell。

于 2013-04-05T14:46:29.150 回答