我正在尝试在AutoCompleteTextView中向用户提供建议。该列表存储在assets文件夹中名为jobz.txt的文件中,该文件使用Scanner方法检索。 txt文件看起来像这样(这个列表真的很长 - 2000行,这就是为什么我需要把它放在.txt文件中):
Teacher
Doctor
Translator
...
这是我的代码
public class HomeActivity extends AppCompatActivity {
String jobs [] = {};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
jobs = readString("jobz.txt");
ArrayAdapter<String> adapter = new ArrayAdapter<String>
(this, android.R.layout.select_dialog_item, jobs);
AutoCompleteTextView actv = (AutoCompleteTextView) findViewById(R.id.professionActv);
actv.setThreshold(1);
actv.setAdapter(adapter);
}
public static String[] readString(String file){
String[] mString ={};
try {
Scanner s = new Scanner(new File(file));
while (s.hasNextLine()){
mString = new String[]{mString + s.nextLine()};
}
}catch (FileNotFoundException e) {
}
return mString;
}
}
应用程序运行正常,但它没有提供任何建议。
仅供参考我即使在logCat中也没有任何错误 但是当我在onCreate方法中使用典型的stringArray时,它可以很好地工作。
答案 0 :(得分:0)
只需使用List来存储txt文件中的值,然后将其解析为字符串数组,如下所示:
public static String[] readString(String file){
List<String> values = new ArrayList<>();
try {
Scanner s = new Scanner(new File(file));
while (s.hasNextLine()){
values.add(s.nextLine());
}
String[] result = new String[values.size()];
for (int i = 0; i < values.size(); i++) {
result[i] = values.get(i).toString();
}
return result;
}catch (FileNotFoundException e) {
e.printStackTrace();
}
return null;
}
答案 1 :(得分:0)
以下代码不会向数组添加项目:
mString = new String[]{mString + s.nextLine()};
修改您的方法如下:
public static String[] readString(String fileName) {
List<String> contents = new ArrayList<String>();
try {
File file = new File(fileName);
Scanner scanner = new Scanner(file);
while (scanner.hasNext()) {
System.out.println(scanner.next());
}
scanner.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
String[] arrContent = contents.toArray(arrContent);
return arrContent;
}