使用 ArrayList 中的数据填充 Android ListView 会将每个项目设置为与第一个项目相同
Populating an Android ListView with data from an ArrayList is setting each item to be the same as the first
我正在与 android 工作室合作,并尝试用数据填充 ListView,这些数据存储在设备内部存储器的文件中。我可以创建一个包含确切项目数的列表,因为有文件,但它们都应该显示不同的信息。目前,它们都显示与 ArrayList 中的第一项相同的数据。
代码如下:
ContextWrapper contextWrapper = new ContextWrapper(getApplicationContext());
File directory = contextWrapper.getDir(filepath, Context.MODE_PRIVATE);
int counter = 0;
int fileNameNumber = 1;
filename = "newAssessment(" + fileNameNumber + ").json";
internalFile = new File(directory, filename);
JSONObject jsonObject;
while (internalFile.exists()) {
files.add(counter, internalFile);
try {
FileInputStream fis = new FileInputStream(internalFile);
DataInputStream in = new DataInputStream(fis);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
while ((strLine = br.readLine()) != null) {
myData = myData + strLine;
}
}catch(IOException e){
e.printStackTrace();
}
try {
jsonObject = new JSONObject(myData);
String assessmentDate = jsonObject.getString("assessmentDate");
String orchard = jsonObject.getString("orchard");
data.add(counter, assessmentDate + " : " + orchard);
}catch(JSONException e){
e.printStackTrace();
}
counter++;
fileNameNumber++;
filename = "newAssessment(" + fileNameNumber + ").json";
internalFile = new File(directory, filename);
}
LVAssessments.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, data));
我可以确认正在存储不同的数据。更改先出现的项目是数组更改所有项目。
感谢您的帮助。
您需要使用for循环从json对象中获取所有数据并将它们添加到myData
您没有在外部 while 循环中初始化 myData。因此,在外部 while 循环中初始化您的 myData。
while (internalFile.exists()) {
files.add(counter, internalFile);
try {
FileInputStream fis = new FileInputStream(internalFile);
DataInputStream in = new DataInputStream(fis);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
while ((strLine = br.readLine()) != null) {
myData = myData + strLine;
}
}catch(IOException e){
e.printStackTrace();
}
try {
jsonObject = new JSONObject(myData);
String assessmentDate = jsonObject.getString("assessmentDate");
String orchard = jsonObject.getString("orchard");
data.add(counter, assessmentDate + " : " + orchard);
}catch(JSONException e){
e.printStackTrace();
}
counter++;
fileNameNumber++;
myData = "";
filename = "newAssessment(" + fileNameNumber + ").json";
internalFile = new File(directory, filename);
}
LVAssessments.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, data));
问题在这里:
while ((strLine = br.readLine()) != null) {
myData = myData + strLine;
}
当 while 循环再次重复时,myData 仍然有旧数据。在上述 while 循环再次重复之前,您需要将 myData 初始化为一个新字符串。
myData = "";
while ((strLine = br.readLine()) != null) {
myData = myData + strLine;
}
我正在与 android 工作室合作,并尝试用数据填充 ListView,这些数据存储在设备内部存储器的文件中。我可以创建一个包含确切项目数的列表,因为有文件,但它们都应该显示不同的信息。目前,它们都显示与 ArrayList 中的第一项相同的数据。
代码如下:
ContextWrapper contextWrapper = new ContextWrapper(getApplicationContext());
File directory = contextWrapper.getDir(filepath, Context.MODE_PRIVATE);
int counter = 0;
int fileNameNumber = 1;
filename = "newAssessment(" + fileNameNumber + ").json";
internalFile = new File(directory, filename);
JSONObject jsonObject;
while (internalFile.exists()) {
files.add(counter, internalFile);
try {
FileInputStream fis = new FileInputStream(internalFile);
DataInputStream in = new DataInputStream(fis);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
while ((strLine = br.readLine()) != null) {
myData = myData + strLine;
}
}catch(IOException e){
e.printStackTrace();
}
try {
jsonObject = new JSONObject(myData);
String assessmentDate = jsonObject.getString("assessmentDate");
String orchard = jsonObject.getString("orchard");
data.add(counter, assessmentDate + " : " + orchard);
}catch(JSONException e){
e.printStackTrace();
}
counter++;
fileNameNumber++;
filename = "newAssessment(" + fileNameNumber + ").json";
internalFile = new File(directory, filename);
}
LVAssessments.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, data));
我可以确认正在存储不同的数据。更改先出现的项目是数组更改所有项目。
感谢您的帮助。
您需要使用for循环从json对象中获取所有数据并将它们添加到myData
您没有在外部 while 循环中初始化 myData。因此,在外部 while 循环中初始化您的 myData。
while (internalFile.exists()) {
files.add(counter, internalFile);
try {
FileInputStream fis = new FileInputStream(internalFile);
DataInputStream in = new DataInputStream(fis);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
while ((strLine = br.readLine()) != null) {
myData = myData + strLine;
}
}catch(IOException e){
e.printStackTrace();
}
try {
jsonObject = new JSONObject(myData);
String assessmentDate = jsonObject.getString("assessmentDate");
String orchard = jsonObject.getString("orchard");
data.add(counter, assessmentDate + " : " + orchard);
}catch(JSONException e){
e.printStackTrace();
}
counter++;
fileNameNumber++;
myData = "";
filename = "newAssessment(" + fileNameNumber + ").json";
internalFile = new File(directory, filename);
}
LVAssessments.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, data));
问题在这里:
while ((strLine = br.readLine()) != null) {
myData = myData + strLine;
}
当 while 循环再次重复时,myData 仍然有旧数据。在上述 while 循环再次重复之前,您需要将 myData 初始化为一个新字符串。
myData = "";
while ((strLine = br.readLine()) != null) {
myData = myData + strLine;
}