我正在开发天气应用程序,我使用了OpenWeatherMap API。我在搜寻城市时遇到问题。 OpenWeatherMap网站上有一些城市列表,供您使用项目。我正在使用gzip的city_list.gz大约为1 MB。原始文件为4 MB。列表中有20万多个城市。使用以下代码,我将城市添加到Arraylist:
private void bringData() {
cityList=new ArrayList<>();
try{
StringBuilder builder= new StringBuilder();
InputStream is= getResources().openRawResource(R.raw.city_list);
GZIPInputStream gzıpInputStream=new GZIPInputStream(is);
InputStreamReader reader=new InputStreamReader(gzıpInputStream);
BufferedReader in=new BufferedReader(reader);
String readed;
while ((readed=in.readLine())!=null)
builder.append(readed);
cityList=new Gson().fromJson(builder.toString(),new TypeToken<List<String>>(){}.getType());
} catch (IOException e) {
e.printStackTrace();
}
}
我在onCreate上调用此方法。我将这个Arraylist用于AutoCompleteTextView来搜索城市。这是我的相关代码:
etSearchCity=(AutoCompleteTextView)findViewById(R.id.etSearchCity);
etSearchCity.setRawInputType(InputType.TYPE_CLASS_TEXT |
InputType.TYPE_TEXT_VARIATION_NORMAL);
autoComplete = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,cityList);
etSearchCity.setAdapter(autoComplete);
etSearchCity.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
city=(String) arg0.getAdapter().getItem(arg2);
btnSaveCity.setVisibility(View.VISIBLE);
btnCancel.setVisibility(View.VISIBLE);
tvSearch.setText("Do you want add city: "+city);
tvSearch.setVisibility(View.VISIBLE);
}
});
这些代码在Android Studio上的Android Emulator上正常工作,但是在我的实际设备上活动因AutoCompleteTextView上的第二个或第三个字母而崩溃。我在Logact中遇到以下日志:
I/art﹕ Background sticky concurrent mark sweep GC freed 45388(3MB) AllocSpace objects, 17(292KB) LOS objects, 14% free, 10MB/11MB, paused 20.543ms total 209.212ms
我该如何解决该问题。我可以使用Firebase数据库进行搜索吗?我想建议第二个或第三个输入AutoCompleteTextView的城市。