Java 变量';s值与指定的值不同
我使用的是一个片段,它显示了关于一个对象的不同信息。在片段的onCreate中,我从对象中检索一些值并将它们存储在全局变量中:Java 变量';s值与指定的值不同,java,android,android-fragments,Java,Android,Android Fragments,我使用的是一个片段,它显示了关于一个对象的不同信息。在片段的onCreate中,我从对象中检索一些值并将它们存储在全局变量中: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); String serializedShow = getArguments(
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
String serializedShow = getArguments().getString(SHOW_TO_LOAD);
mShow = (new Gson()).fromJson(serializedShow, Show.class);
mScope = mShow.getScope();
mLanguage = MainActivity.getSystemLanguage();
mLanguage = mLanguage.replace("_", "-");
mId = Integer.valueOf(mShow.getShowId()).toString(); //this line is important
Log.v(LOG_TAG, "DetailFragment onStart, Id is " + mId);
}
正如您所看到的,我为这个变量指定了一个特定的ID。我使用日志检查mId的值是否正确,是否正确。到目前为止,一切进展顺利。
接下来,在代码中,用户可以单击按钮在浏览器中打开am url。每次创建此片段时,URL都是不同的(每次此片段显示不同的内容时)
如您所见,方法fetchIMDBId()被调用。我有一个日志行来检查之前在onCreate中设置的mId值是否相同。
它不一样,它是一个完全不同的值。
具体地说,是在前一个实例中显示的对象的id(如果该片段为空)
请告诉我我做错了什么。谢谢
E:变量声明
public class DetailFragment extends Fragment {
private static final String LOG_TAG = DetailFragment.class.getSimpleName();
...
private String mScope, mLanguage, mId;
...
@Override
public void onCreate(Bundle savedInstanceState) {
...
}
E:full source尝试使用
this.mId
并检查片段对象是否与前一个相同
调用this.fetchIMDBId()。我认为您没有正确地将mId分配给异步任务。您应该将mid应用于异步任务方法,以便调用每个片段中相应的mid
private void fetchIMDBId(String mId){
Log.v(LOG_TAG, "starting IMDBAsyncTask with id " + mId);
new Async4().execute(mId);
}
然后在片段中调用该方法
fetchIMDBId(this.mId);
中级变量还是实例变量?什么意思?我把申报单加在了主邮递上,有没有人在中邮递?您确定要检查的两个日志是针对同一个类实例的吗?传递的对象是有效的。登录oncreate返回的mId是正确的,A与此不同的是,不再触及mId变量。为了清晰起见,我添加了完整的源代码。仍然不起作用。onStart日志显示正确的值,但fetchIMDBId中的日志显示另一个值。您是否尝试将mId变量设置为静态?它可以工作我欠您一条命谢谢。我很高兴它帮助了您:)编码愉快
fetchIMDBId(this.mId);