如何在共享首选项中存储Skydrive API的LiveConnectClient和会话对象

时间:2013-04-05 13:27:38

标签: java android live-sdk

我可以在android中使用skydrive API登录skydrive。 现在我想在另一个avitivity中使用相同的会话对象和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);

我认为这应该有用......

1 个答案:

答案 0 :(得分:0)

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

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。