Java Arraylist多次显示最后一个元素

Java Arraylist多次显示最后一个元素,java,android,Java,Android,我创建了一个arraylist来存储从Web服务获取的数据。每次迭代后都会获取数据,但arraylist中只显示最后一个元素。我尝试了各种解决方案,但没有一种对我的情况有帮助 public void onResponse(JSONObject paramAnonymousJSONObject) { JSONObject localJSONObject; int j; try { localJSONObject = p

我创建了一个arraylist来存储从Web服务获取的数据。每次迭代后都会获取数据,但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");
         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