我有一个特殊的问题,即在数组循环中分配元素时,事情就会发生。
当我离开循环并检查时,所有索引的相同数组值将设置为最后一个索引的数组值。以下是代码
JSONObject js = new JSONObject(json_string);
JSONArray jsonArray=js.getJSONArray("customer");
DataModelCollection[] dataModelCollection = new DataModelCollection[7];
for (int i=0;i<jsonArray.length();i++) {
JSONObject json = jsonArray.getJSONObject(i);
amont = json.getLong("BalanceAmount");
custName = json.getString("CustName");
partitionKey = json.getInt("PartitionKey");
String date1 = json.getString("date");
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = df.parse(date1);
dataModelCollection[i] = new DataModelCollection();
dataModelCollection[i].setName(custName);
dataModelCollection[i].setAccountNo(partitionKey);
dataModelCollection[i].setAmount(amont);
dataModelCollection[i].setCollectedDate(date);
Log.i("inside_loop", ""+dataModelCollection[i].getName());
}
Log.i("outside_loop", ""+dataModelCollection[0].getName());
Log.i("outside_loop", ""+dataModelCollection[1].getName());
Log.i("outside_loop", ""+dataModelCollection[2].getName());
Log.i("outside_loop", ""+dataModelCollection[3].getName());
Log.i("outside_loop", ""+dataModelCollection[4].getName());
Log.i("outside_loop", ""+dataModelCollection[5].getName());
Log.i("outside_loop", ""+dataModelCollection[6].getName());
当我打印基本上在循环中的inside_loop
时,正确显示了值。执行结束时检查&#34; outside_loop&#34;所有索引的值都变为dataModelCollection [6] .getName() - 这是最后一个索引的值。 amount
,date
,partitionKey
的情况也一样。
不确定我哪里出错了。
无论它的价值在哪里,DataModelCollection
模态类:
public class DataModelCollection {
public static long accountNo;
public static String name;
public static double amount;
public static Date collectedDate;
public DataModelCollection(long accountNo, String name, double amount, Date collectedDate) {
this.accountNo = accountNo;
this.name = name;
this.amount = amount;
this.collectedDate = collectedDate;
}
public DataModelCollection() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getAmount() {
return amount;
}
public void setAmount(double amount) {
this.amount = amount;
}
public Date getCollectedDate() {
return collectedDate;
}
public void setCollectedDate(Date collectedDate) {
this.collectedDate = collectedDate;
}
public long getAccountNo() {
return accountNo;
}
public void setAccountNo(long accountNo) {
this.accountNo = accountNo;
}
我真的对导致这种情况的原因一无所知。请帮忙。
答案 0 :(得分:2)
public static long accountNo;
public static String name;
public static double amount;
public static Date collectedDate;
这些必须是实例变量,而不是静态变量。
删除static
关键字,它应该按您的意愿运行。
答案 1 :(得分:1)
您必须从每个关键字中删除关键字static
。也可以将其从public
更改为private
,因为您使用setter和getter来更改这些值。
public static long accountNo;
public static String name;
public static double amount;
public static Date collectedDate;
到
private long accountNo;
private String name;
private double amount;
private Date collectedDate;
它们都成为最后一个设定值的原因是因为static
表示变量属于class
而不是实例“对象”。因此,即使您使用dataModelCollection[i] = new DataModelCollection();
创建新对象,当您更改静态变量时,它们也会影响所有DataModelCollection
个对象。有关static / instance here的更多信息。
答案 2 :(得分:1)
DataModelCollection
类的属性是静态的!
这意味着它们对于该类的所有实例都是通用的。
因此,您的循环每次只更改这些静态变量的值,因为它们对所有实例都是通用的。
答案 3 :(得分:1)
让我教你一些魔力!
删除您在 DataModelCollection 类中声明的变量中的关键字 static ,您的代码可以正常运行。