gpt4 book ai didi

java - 如何调试这段代码以了解它在做什么?

转载 作者:行者123 更新时间:2023-11-29 18:25:45 24 4
gpt4 key购买 nike

首先,如果这个问题不合适,我深表歉意。

我正在我的 Android 应用程序中实现国家选择器功能,我找到了一个 github 项目,这对我来说是一个好的开始。代码工作正常,符合预期。

我首先将其分解以了解其工作原理。

这是代码的模糊部分

@Override
protected ArrayList<Country> doInBackground(Void... params) {
ArrayList<Country> data = new ArrayList<Country>(233);
BufferedReader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(mContext.getApplicationContext().getAssets().open("countries.dat"), "UTF-8"));

// do reading, usually loop until end of file reading
String line;
int i = 0;
while ((line = reader.readLine()) != null) {
//process line
Country c = new Country(mContext, line, i);
data.add(c);
ArrayList<Country> list = mCountriesMap.get(c.getCountryCode());
if (list == null) {
list = new ArrayList<Country>();
mCountriesMap.put(c.getCountryCode(), list);
}
list.add(c);
i++;
}
} catch (IOException e) {
//log the exception
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
//log the exception
}
}
}
//this code enables app to pick the right default country from the spinner
String countryRegion = PhoneUtils.getCountryRegionFromPhone(mContext);
int code = mPhoneNumberUtil.getCountryCodeForRegion(countryRegion);

final ArrayList<Country> list = mCountriesMap.get(code);

/*getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
for(int i = 0; i < list.size(); i++)
Toast.makeText(mContext, "ds: " + list.get(i).getName(), Toast.LENGTH_SHORT).show();
}
});*/
if (list != null) {
for (Country c : list) {
if (c.getPriority() == 0 || c.getPriority() == 1) {
mSpinnerPosition = c.getNum();
break;
}
}
}
return data;
}

此代码读取 asset 文件夹中的文件并将对象添加到列表中。之后它会选择设备所在的国家/地区并从所有国家/地区的微调器中选择它

while 循环中,我认为这行 list.add(c); 没有意义,因为 while 循环将再次循环并创建新的列表对象。如果我评论这一行,即使 mCountriesMap 不为空,mCountriesMap.get(code) 也会返回空列表。

所以我的问题是为什么会发生这种行为? list.add(c); 在这里做什么?

最佳答案

假设有 3 个国家/地区代码 {US,US,AU}。所以运行它会导致

mCountriesMap{
US: List{US,US}
AU: List{AU}
}

我认为你的疑问是 list.add(c);mCountriesMap.put(c.getCountryCode(), list); 之后

我会逐步解释

第一个案例

ArrayList<Country> list = mCountriesMap.get(US); //No value in mCountriesMap
if (list == null) { //list is null so true
list = new ArrayList<Country>();
mCountriesMap.put(US, list); //mCountriesMap{US: List{} }
}
list.add(US); //mCountriesMap{US: List{US} } here hashmap will get updated

第二种情况

ArrayList<Country> list = mCountriesMap.get(US); //get the prevous list
if (list == null) { //list have value so false
list = new ArrayList<Country>();
mCountriesMap.put(US, list); //mCountriesMap{US: List{US} }
}
list.add(US); //mCountriesMap{US: List{US,US} } here hashmap will get updated

第三个将只是第一个案例的重复。

关于java - 如何调试这段代码以了解它在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59150470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com