как сохранить строку arrayList to Map 'как ключ и как ее получить ..! - PullRequest
0 голосов
/ 02 ноября 2018

Я хочу получить карту (ArrayList) в соответствии с ключом, помогите мне с кодом ниже

public class MainActivity extends AppCompatActivity {
    Map<String,ArrayList<Model>> map=new ArrayMap<>();   <----

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
     ......
         .....
     for (int j=0;j<jsonArray.length();j++)
        {
         JSONObject tempObj=jsonArray.getJSONObject(j);
         String price =tempObj.getString("price");
         String product=tempObj.getString("Product");
         String qty=tempObj.getString("Qty");
         modelList.add(new Model(id,price,product,qty,date));
         map.put(key,modelList);   <----
         modelList.clear();
         }
  ......
     ......
//here to retrieve that map in the same mainactivity
    CODE....???????     <----

вот мой json, где эти месяцы динамичны (январь, апрель, июнь, ... они не постоянны).

{
  "response": "success",
  "servicecode": "134",
  "forecast": {
    "month": {
      "jan": [
        {
          "id": "1",
          "price": "12",
          "Product": "1086",
          "Qty": "14"
        },
        {
          "id": "2",
          "price": "19",
          "Product": "1746",
          "Qty": "45"
        }
      ],
      "april": [
        {
          "id": "3",
          "price": "89",
          "Product": "1986",
          "Qty": "15"
        },
        {
          "id": "1",
          "price": "12",
          "Product": "1086",
          "Qty": "145"
        }
      ],
      "jun": [
        {
          "id": "81",
          "price": "132",
          "Product": "17086",
          "Qty": "1445"
        },
        {
          "id": "11",
          "price": "132",
          "Product": "10786",
          "Qty": "1445"
        }
      ]
    }
  },
  "message": "Competitor Sales."
}

Я взял все ответы отдельно с ключом и сохранил их в MAp. Теперь я хочу отобразить массив в соответствии с месяцем в View pager. так скажи мне карту подойдет или любую альтернативу ....

Ответы [ 3 ]

0 голосов
/ 02 ноября 2018

Является ли месяц ключом вашей карты? Если это так, то вы можете просто определить список месяцев и получить соответствующие значения, примерно так:

for(String month: Arrays.asList("jan", "feb", "mar", "apr", "...")) {
    if(map.containsKey(month)) { //skip months if not present
        //--> code here
        Model model = map.get(month);
    }
}
0 голосов
/ 02 ноября 2018

У вас определенно правильная идея с картами, поскольку вы можете каждый месяц назначать объект.

Однако вы можете рассмотреть возможность использования LinkedHashMap вместо ArrayMap, поскольку LinkedHashMap сохраняет порядок вставки, в то время как Документы ArrayMap нигде не упоминают о сохранении порядка вставки.

Причина сохранения вставки важна потому, что объект months в JSON представлен в том порядке, в котором вы хотите его отобразить. Поэтому, если вы сначала проанализируете «январь», он будет гарантированно находиться на передняя часть карты.

Вы можете объявить и инициализировать LinkedHashMap следующим образом:

Map<String, ArrayList<Model>> map = new LinkedHashMap<>();

Я предполагаю, что вы правильно разбили этот json на ваши объекты, так как вы ничего не сказали относительно неправильного заполнения карты и размещения стрелок "<-----" </p>

Теперь, чтобы код действительно использовал Карту.

for (String monthName : map.keySet()) {
    ArrayList<Model> modelArray = map.get(monthName);
    //now do whatever your view pager needs to do with this Model and its fields
    for (Model model : modelArray) {
        String price = model.getPrice(); //if you have a getter
        String product = model.product; //if the field is public
    }
}

Примечания:

Использование набора ключей LinkedHashMap действительно, поскольку документация гарантирует, что набор ключей будет в порядке вставки. Кроме того, этот SO-ответ также подтверждает этот факт.

Я лично рекомендую GSON для разбора объектов JSON, но, поскольку вы, кажется, в порядке с синтаксическим анализом, это не имеет большого значения.

0 голосов
/ 02 ноября 2018

Если вы правильно установите ArrayMap, вы можете получить его, как показано ниже:

Model model = map.get("april");
String id = model.id; 
String price = model.price;
.....

Вы должны убедиться, что переменная key в ваших кодах является названием месяца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...