Java Arraylist多次显示最后一个元素
我创建了一个arraylist来存储从Web服务获取的数据。每次迭代后都会获取数据,但arraylist中只显示最后一个元素。我尝试了各种解决方案,但没有一种对我的情况有帮助Java Arraylist多次显示最后一个元素,java,android,Java,Android,我创建了一个arraylist来存储从Web服务获取的数据。每次迭代后都会获取数据,但arraylist中只显示最后一个元素。我尝试了各种解决方案,但没有一种对我的情况有帮助 public void onResponse(JSONObject paramAnonymousJSONObject) { JSONObject localJSONObject; int j; try { localJSONObject = p
public void onResponse(JSONObject paramAnonymousJSONObject)
{
JSONObject localJSONObject;
int j;
try
{
localJSONObject = paramAnonymousJSONObject.getJSONObject("status");
j = localJSONObject.getInt("code");
if (j == 200) {
JSONArray carModelArray = paramAnonymousJSONObject.getJSONArray("carModels");
for (int i = 0; i <= carModelArray.length(); i++) {
JSONObject tariffResponse = null;
JSONObject tariff = carModelArray.getJSONObject(i);
try {
carId = tariff.getString("id");
segment = tariff.getString("segment");
imageURL = tariff.getString("imageURL");
tariffResponse = tariff.getJSONObject("tariffResponse");
CarType = tariffResponse.getString("carModel");
weekdayTariff = tariffResponse.getString("weekdayTariff");
weekendTariff = tariffResponse.getString("weekendTariff");
peakSeasonTariff = tariffResponse.getString("peakSeasonTariff");
maintenanceCharge = tariffResponse.getString("maintainanceFee");
securityDeposite = tariffResponse.getString("securityDeposite");
ArrayList arrayList = TariffActivity.this.tariffModelsList;
arrayList.add(new TariffModel(carId, CarType, imageURL, "\u20b9 " + weekdayTariff, "\u20b9 " + weekendTariff, "\u20b9 " + peakSeasonTariff, "\u20b9 " + securityDeposite, segment, "\u20b9 " + maintenanceCharge));
TariffActivity.this.tariffAdapter = new TariffAdapter(TariffActivity.this.mContext,arrayList);
TariffActivity.this.mRecyclerView.setAdapter(tariffAdapter);
} catch (JSONException e) {
e.printStackTrace();
}
}
public void onResponse(JSONObject paranamonymousjsonobject)
{
JSONObject本地JSONObject;
int j;
尝试
{
localJSONObject=paranamonymousjsonobject.getJSONObject(“状态”);
j=localJSONObject.getInt(“代码”);
如果(j==200){
JSONArray carModelArray=paranamonousjsonobject.getJSONArray(“carModels”);
对于(inti=0;i在循环之外声明它
ArrayList arrayList = TariffActivity.this.tariffModelsList;
这些也在循环之外:
TariffActivity.this.tariffAdapter = new TariffAdapter(TariffActivity.this.mContext,arrayList);
TariffActivity.this.mRecyclerView.setAdapter(tariffAdapter);
并从循环中删除上面的行。因为正在生成新的ArrayList,并且正在为每次迭代设置新的适配器
希望这能有所帮助。执行以下操作
public void onResponse(JSONObject paramAnonymousJSONObject)
{
JSONObject localJSONObject;
int j;
try
{
localJSONObject = paramAnonymousJSONObject.getJSONObject("status");
j = localJSONObject.getInt("code");
if (j == 200) {
JSONArray carModelArray = paramAnonymousJSONObject.getJSONArray("carModels");
ArrayList arrayList = TariffActivity.this.tariffModelsList;
for (int i = 0; i <= carModelArray.length(); i++) {
JSONObject tariffResponse = null;
JSONObject tariff = carModelArray.getJSONObject(i);
try {
carId = tariff.getString("id");
segment = tariff.getString("segment");
imageURL = tariff.getString("imageURL");
tariffResponse = tariff.getJSONObject("tariffResponse");
CarType = tariffResponse.getString("carModel");
weekdayTariff = tariffResponse.getString("weekdayTariff");
weekendTariff = tariffResponse.getString("weekendTariff");
peakSeasonTariff = tariffResponse.getString("peakSeasonTariff");
maintenanceCharge = tariffResponse.getString("maintainanceFee");
securityDeposite = tariffResponse.getString("securityDeposite");
arrayList.add(new TariffModel(carId, CarType, imageURL, "\u20b9 " + weekdayTariff, "\u20b9 " + weekendTariff, "\u20b9 " + peakSeasonTariff, "\u20b9 " + securityDeposite, segment, "\u20b9 " + maintenanceCharge));
} catch (JSONException e) {
e.printStackTrace();
}
}
TariffActivity.this.tariffAdapter = new TariffAdapter(TariffActivity.this.mContext,arrayList);
TariffActivity.this.mRecyclerView.setAdapter(tariffAdapter);
public void onResponse(JSONObject paranamonymousjsonobject)
{
JSONObject本地JSONObject;
int j;
尝试
{
localJSONObject=paranamonymousjsonobject.getJSONObject(“状态”);
j=localJSONObject.getInt(“代码”);
如果(j==200){
JSONArray carModelArray=paranamonousjsonobject.getJSONArray(“carModels”);
ArrayList ArrayList=TariffActivity.this.tariffModelsList;
for(int i=0;i将setAdapter()
移出for循环,并在循环外部定义arrayList
变量。您已经在for循环中设置了Adapter
,在循环破坏时,您将从活动中获得列表
:
ArrayList arrayList = TariffActivity.this.tariffModelsList;
使用以下代码:
public void onResponse(JSONObject paramAnonymousJSONObject) {
JSONObject localJSONObject;
int j;
try {
localJSONObject = paramAnonymousJSONObject.getJSONObject("status");
j = localJSONObject.getInt("code");
if (j == 200) {
JSONArray carModelArray = paramAnonymousJSONObject.getJSONArray("carModels");
ArrayList arrayList = TariffActivity.this.tariffModelsList;
for (int i = 0; i <= carModelArray.length(); i++) {
JSONObject tariffResponse = null;
JSONObject tariff = carModelArray.getJSONObject(i);
try {
carId = tariff.getString("id");
segment = tariff.getString("segment");
imageURL = tariff.getString("imageURL");
tariffResponse = tariff.getJSONObject("tariffResponse");
CarType = tariffResponse.getString("carModel");
weekdayTariff = tariffResponse.getString("weekdayTariff");
weekendTariff = tariffResponse.getString("weekendTariff");
peakSeasonTariff = tariffResponse.getString("peakSeasonTariff");
maintenanceCharge = tariffResponse.getString("maintainanceFee");
securityDeposite = tariffResponse.getString("securityDeposite");
arrayList.add(new TariffModel(carId, CarType, imageURL, "\u20b9 " + weekdayTariff, "\u20b9 " + weekendTariff, "\u20b9 " + peakSeasonTariff, "\u20b9 " + securityDeposite, segment, "\u20b9 " + maintenanceCharge));
} catch (JSONException e) {
e.printStackTrace();
}
}
TariffActivity.this.tariffAdapter = new TariffAdapter(TariffActivity.this.mContext, arrayList);
TariffActivity.this.mRecyclerView.setAdapter(tariffAdapter);
}
}
}
public void onResponse(JSONObject paranamonymousjsonobject){
JSONObject本地JSONObject;
int j;
试一试{
localJSONObject=paranamonymousjsonobject.getJSONObject(“状态”);
j=localJSONObject.getInt(“代码”);
如果(j==200){
JSONArray carModelArray=paranamonousjsonobject.getJSONArray(“carModels”);
ArrayList ArrayList=TariffActivity.this.tariffModelsList;
对于(int i=0;i试试这个
public void onResponse(JSONObject paramAnonymousJSONObject)
{
JSONObject localJSONObject;
int j;
ArrayList arrayList = TariffActivity.this.tariffModelsList;
try
{
localJSONObject = paramAnonymousJSONObject.getJSONObject("status");
j = localJSONObject.getInt("code");
if (j == 200) {
JSONArray carModelArray = paramAnonymousJSONObject.getJSONArray("carModels");
for (int i = 0; i <= carModelArray.length(); i++) {
JSONObject tariffResponse = null;
JSONObject tariff = carModelArray.getJSONObject(i);
try {
carId = tariff.getString("id");
segment = tariff.getString("segment");
imageURL = tariff.getString("imageURL");
tariffResponse = tariff.getJSONObject("tariffResponse");
CarType = tariffResponse.getString("carModel");
weekdayTariff = tariffResponse.getString("weekdayTariff");
weekendTariff = tariffResponse.getString("weekendTariff");
peakSeasonTariff = tariffResponse.getString("peakSeasonTariff");
maintenanceCharge = tariffResponse.getString("maintainanceFee");
securityDeposite = tariffResponse.getString("securityDeposite");
arrayList.add(new TariffModel(carId, CarType, imageURL, "\u20b9 " + weekdayTariff, "\u20b9 " + weekendTariff, "\u20b9 " + peakSeasonTariff, "\u20b9 " + securityDeposite, segment, "\u20b9 " + maintenanceCharge));
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
catch (Exception e) {
e.printStackTrace();
}
TariffActivity.this.tariffAdapter = new TariffAdapter(TariffActivity.this.mContext,arrayList);
TariffActivity.this.mRecyclerView.setAdapter(tariffAdapter);
}
public void onResponse(JSONObject paranamonymousjsonobject)
{
JSONObject本地JSONObject;
int j;
ArrayList ArrayList=TariffActivity.this.tariffModelsList;
尝试
{
localJSONObject=paranamonymousjsonobject.getJSONObject(“状态”);
j=localJSONObject.getInt(“代码”);
如果(j==200){
JSONArray carModelArray=paranamonousjsonobject.getJSONArray(“carModels”);
对于(int i=0;i您需要clear()
循环之前的数组列表,否则您将从列表中显示的onResponse
中获得重复数据
仅提取JSON数据并将其添加到循环内的列表中。如果仍然看到数据副本,请参阅
在循环外部,您可以设置适配器()
或,您可以调用适配器。notifyDataSetChanged()
假设您已经有一些适配器
另外,iArrayList ArrayList=TariffActivity.this.tariffModelsList
将这一行放在for loop之前欢迎使用堆栈溢出!看起来您需要学习使用调试器。请自己解决一些问题。如果以后仍有问题,请随时返回并提供更多详细信息。如果您使用的是改型+Gson,则无需手动解析您的代码JSON@shivadeep,TrafficAdapter设置为inc正确的位置,因为它在循环内-值被覆盖,因此arraylist的最后一个值被设置为它。因此,在循环结束后,您必须将arraylist分配给流量适配器,请检查我下面的答案。如果我看到这类问题,我的第一个问题是:TariffModel
是否只有静态字段?因为o无论您创建了多少个TariffModel
对象,它们都将具有相同的属性。不,它不包含欢迎使用堆栈溢出!虽然您可能已经解决了此用户的问题,但仅使用代码的答案对将来遇到此问题的用户没有多大帮助。请编辑您的答案,解释代码解决此问题的原因原始问题。@JoeC:我已经添加了解释。@shivadeep您是否删除了ArrayList ArrayList=TariffActivity.this.tariffModelsList;这是从循环内部删除的?@cricket_007这不是重新分配。我告诉他只在循环外部声明,而不是在内部声明。不,我的意思是tariffModelsList.add()
应该可以直接调用。不需要数组列表
引用。@cricket\u 007是的,他当然可以。我只是遵循了提问者的模式:p@shivadeep将适配器设置为loopWelcome to Stack Overflow!虽然您可能已经解决了此用户的问题,但仅代码的答案对解决此问题没有多大帮助将来遇到此问题的用户。请编辑您的答案,解释为什么您的代码解决了原始问题,就像我说的,您需要在循环之前清除。作为onResponse
中的第一件事。如果您只看到一项,那么您的JSON数组只能有一项。您的意思是e.printStackTrace();
?当然,您有一个错误。请将这两行放在for之后调试应用程序,然后尝试:TariffActivity.this.tariffAdapter=new tariffAdapter(TariffActivity.this.mContext,arrayList);TariffActivity.this.mRecyclerView.setAdapter(tariffAdapter);i