我可以在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);
我认为这应该有用......
答案 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。