gpt4 book ai didi

java - AutoCompleteTextView 不显示从内部存储加载的字符串

转载 作者:行者123 更新时间:2023-12-01 09:41:37 26 4
gpt4 key购买 nike

我想制作一个 AutoCompleteTextview ,它将从内部存储加载以前保存的建议。我成功地将字符串从内部存储加载到字符串数组(我使用日志记录来检查......)。

然后,当我将字符串数组加载到适配器并将适配器设置为 AutoCompleteTextview 时,之后 AutoCompleteTextview 不会显示我从内部存储加载的建议字符串,但会显示建议字符串我在运行时将其加载到字符串数组中。

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

//this is the array where i am trying to save my data into
loadedString=new String[1];
loadedString[0]="the pre-loaded String"

adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, loadedString);


atcv = (AutoCompleteTextView) findViewById(R.id.autocomplete);

int objectCounter = 0;

try {

FileInputStream fis = this.openFileInput(FILENAME);
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr);

String temp;


while ((temp = br.readLine()) != null) {
//here i am calculating the lines of my data-file
//as 1 line contains 1 string object
//so that i can initialize the string array


objectCounter++;
}


} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

//intializing the array
// objectCounter+1 and index =1 because i loaded an object before

loadedString = new String[objectCounter+1];

int index = 1;


try {

FileInputStream fis = this.openFileInput(FILENAME);
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr);


String temp;


while ((temp = br.readLine()) != null) {


loadedString[index] = temp;
index++;
}


} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}





adapter.notifyDataSetChanged();
atcv.setAdapter(adapter);
atcv.setThreshold(1);


}

这是我用来保存数据的方法

 public void saver(View view) {

String string;


if(actv.getText()!=null){
advice = advices.getText().toString();}

advice=advice+"\n";


try{

FileOutputStream fos = openFileOutput(FILENAME, context.MODE_APPEND);

fos.write(advice.getBytes());
fos.close();
Toast.makeText(this, "File saved" , Toast.LENGTH_LONG).show();

}


catch (Exception e){
Toast.makeText(this, "File could not be saved", Toast.LENGTH_LONG).show();
}

请帮忙。请注意,我使用了notifyDataSetChanged()方法。我将非常感激。

最佳答案

Note that i used notifyDataSetChanged() method

就你的情况而言,这是没有用的。 ArrayAdapter将继续使用您的旧String[1] 。它不知道你的新String[] .

首先,不要像您在这里所做的那样在主应用程序线程上执行磁盘 I/O。使用某种形式的后台操作,例如 AsyncTask .

其次,不要两次读取数据,因为这对用户来说会慢两倍。例如,您可以使用类似 ArrayList<String> 的数据结构,它可以动态扩展其大小。

然后,不要创建 ArrayAdapter直到加载字符串之后。

关于java - AutoCompleteTextView 不显示从内部存储加载的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38410349/

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