2017-07-30 4 views
0

キーと値を取得するには、JsonObjectJsonArrayにマップするにはどうすればよいですか?jsonオブジェクトをJavaのjsonarrayにどのようにマップするのですか?

私は値を使用してスピナーを設定し、スピナーから選択したアイテムのIDにキーを設定します。

"data": { 
    "214": "FIRST CITY MONUMENT BANK PLC", 
    "215": "UNITY BANK PLC", 
    "221": "STANBIC IBTC BANK PLC", 
    "232": "STERLING BANK PLC", 
    "301": "JAIZ BANK", 
    "304": "Stanbic Mobile", 
    "305": "PAYCOM", 
    "307": "Ecobank Mobile", 
    "309": "FBN MOBILE", 
    "311": "Parkway", 
    "315": "GTBank Mobile Money", 
    "322": "ZENITH Mobile", 
    "323": "ACCESS MOBILE", 
    "401": "Aso Savings and Loans", 
    "044": "ACCESS BANK NIGERIA", 
    "014": "AFRIBANK NIGERIA PLC", 
    "063": "DIAMOND BANK PLC", 
    "050": "ECOBANK NIGERIA PLC", 
    "084": "ENTERPRISE BANK LIMITED", 
    "070": "FIDELITY BANK PLC", 
    "011": "FIRST BANK PLC", 
    "058": "GTBANK PLC", 
    "030": "HERITAGE BANK", 
    "082": "KEYSTONE BANK PLC", 
    "076": "SKYE BANK PLC", 
    "068": "STANDARD CHARTERED BANK NIGERIA LIMITED", 
    "032": "UNION BANK OF NIGERIA PLC", 
    "033": "UNITED BANK FOR AFRICA PLC", 
    "035": "WEMA BANK PLC", 
    "057": "ZENITH BANK PLC" 
} 

このコードは動作しません。私はGoogleのVolleyライブラリを使用しています。私はJsonObjectJsonArrayに変換するように言われました。

private void getData() { 
    JsonObjectRequest obreq = new JsonObjectRequest(Request.Method.GET, serverUrl_list, 
      new Response.Listener<JSONObject>() { 
       @Override 
       public void onResponse(JSONObject response) { 
        try { 
         JSONArray obj = response.getJSONArray("Data"); 

         for (int k=0; k<obj.length(); k++) { 
          while (mapIterator.hasNext()) { 
           Map.Entry mapEntry = (Map.Entry) mapIterator.next(); 
           Integer keyValue = (Integer) mapEntry.getKey(); 
           String value = (String) mapEntry.getValue(); 
           //iterate over the array and print each value 
           for (int i=0; i<mapEntry.; i++) { 
            System.out.print(value[i] + " "); 
           } 
           System.out.println(); 
          } 
         } 

         students.add(obj.getString("Data")); 

         ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, students); 
         spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
         Bank.setAdapter(spinnerAdapter); 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        Log.e("Volley", "Error"); 
       } 
      } 
     ); 

    RequestQueue requestQueue = Volley.newRequestQueue(getActivity()); 
    requestQueue.add(obreq); 
} 
+2

私が正しく理解していれば、 'Map 'を 'List >'に変換したいですか?いくつかのコードを表示していただければ幸いです。 – 4castle

+0

"id"と "bankname"を持つjsonarrayに変換し、 "bankname"でスピナーを設定し、bankidに "id"を設定します。 –

+1

上記のjsonにはjsonarrayがありません。だから間違ったときにあなたのコードをしてください –

答えて

0

それはあなたがオブジェクトを持って{"data": { ... }}ない{"data": [ ... ] }

あるので、あなたは、あなたのJSONから配列を取得することはできません、あなたはキー

private void getData() { 
    final ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item); 
    spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    bank.setAdapter(spinnerAdapter); 

    JsonObjectRequest obreq = new JsonObjectRequest(Request.Method.GET, serverUrl_list, 
      new Response.Listener<JSONObject>() { 
       @Override 
       public void onResponse(JSONObject response) { 
        try { 
         JSONObject obj = response.getJSONObject("Data"); 
         Iterator<String> keys = obj.keys(); 
         while(keys.hasNext()) { 
          String v = obj.optString(keys.next()); 
          spinnerAdapter.add(v); 
         } 
        } catch () { } 
       } 
      }, 
+0

Iteratorで問題を抱えてください。 keys = obj.getKeys()、エラーは「メソッド 'getKeys()'を解決できません」 –

+0

またはdefine Iteratorの使用方法 keys = obj.getKeys(); –

+0

おっと、キーhttps://developer.android.com/reference/org/json/JSONObject.html#keys() –

0

チェックを反復処理する必要がありますこのlibraryから取り組んできました。これはボレーにも基づいています。データを解析する代わりに、ライブラリ自体がデータを解析します。あなたがしなければならないのは、マップフィールドを含むオブジェクトを作成しているので、同様にデータを呼ばれる:ライブラリを使用して

public class Model { 
    private Map<String, String> data; 
} 

、それはマップに満たされたあなたの結果をお届けします。

関連する問題