private String u_id;
private String u_name;
@Override
public void onSuccess(LoginResult loginResult) {
if(Profile.getCurrentProfile() == null) {
mProfileTracker = new ProfileTracker() {
@Override
public void onCurrentProfileChanged(Profile profile, Profile profile2) {
// profile2 is the new profile
u_id = profile2.getId().toString();
u_name = profile2.getName().toString();
mProfileTracker.stopTracking();
}
};
// no need to call startTracking() on mProfileTracker
// because it is called by its constructor, internally.
}
else {
Profile profile = Profile.getCurrentProfile();
u_id = profile.getId().toString();
u_name = profile.getName().toString();
}
/*new CreateNewProduct().execute();*/
/*updateFacebookButtonUI();*/
}
我想获取值u_id和u_name来添加arraylist,但它返回null。我试过log有结果。我需要解决方法。谢谢:(
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("u_id", u_id)); // return null
params.add(new BasicNameValuePair("u_name", u_name)); // return null
答案 0 :(得分:0)
变量u_id
和u_name
只有在未初始化时才能为null
。将字段添加到类时,不要设置它们的值。
private String u_id; //only type and name set, not the value
我认为如果你确定他们的价值必须设置在内部方法的某个地方(在if
或else
中也无关紧要),那么保留它就不那么危险了。另外我打赌你在上面的行之后调用params.add(...)...
,除非它会导致变量null
......
但是如果你真的想从变量中获取一些东西,可以将它们初始化为纯空字符串(""
),
private String u_id = ""; //the variable's value is set too
并且稍后可能会在将其值添加到List<NameValuePair>
变量之前处理“空字符串”检查;但是没有必要。主要的是:通过这种方式,您可以100%确定您的变量不会是null
...
编辑#1 :我不太了解包含onSuccess()
方法的文件结构以及包含列表内容的类,但我会说这是另一个Java类文件(MyClass.java
或类似文件)。我不是Android多线程的专家,但我想说没有任何东西可以阻止你的内部类与你的列表访问外部基类中的字段。您可以随时随地访问某个类中的字段,无论您是想在该类中还是在第10个嵌套的内部类或方法中执行此操作。
因此,除非您的代码与此类似,否则我认为我的第一个答案(编辑上方)应该是解决方案。也许你应该提供全班的代码来找到最好的解决方案,而不仅仅是像你第一次那样的部分。
答案 1 :(得分:0)
是的,添加“”结果不会为null,但我希望在onSuccess
方法中获取变量的值以传递给下面的List。下面的列表在同一个文件中的另一个类中,在Success