簡體   English   中英

如何將 Json 字符串填充到 Android 微調器中

[英]How to populate Json String into Android spinner

我的Json響應不是數組。 它是單個Json object (具有如下動態鍵和值對):

{
    "key1": "value1",
    "key2": "value2",
    "key3": "value3",
    "key4": "value4",
    "key5": "value5",
    "key6": "value6",
    "key7": "value7",
    "key8": "value8",
}

如何將值填充到 Android 微調器或如何從此Json響應創建 Map?

JsonObject json = new JsonObject(<yourresponse>);

解決方案

    Iterator<String> keys = json.keys();
    List<String> valueList = new ArrayList<String>();
    List<String> keyList = new ArrayList<String>();
    while( keys.hasNext() ){
        String key = (String)keys.next();
        String value = jObject.getString(key); 
        valueList.add(value);
        keyList.add(key);
    }

將鍵列表或值列表傳遞給 Spinner 的 ArrayAdapter

整個 JSON 響應可以讀取為JSONObject ,您可以遍歷其元素並將字符串數據放入列表中。

    String jsonResponse = "{\n" +
            "    \"key1\": \"value1\",\n" +
            "    \"key2\": \"value2\",\n" +
            "    \"key3\": \"value3\",\n" +
            "    \"key4\": \"value4\",\n" +
            "    \"key5\": \"value5\",\n" +
            "    \"key6\": \"value6\",\n" +
            "    \"key7\": \"value7\",\n" +
            "    \"key8\": \"value8\"\n" +
            "}";

    ArrayList<String> spinnerList = new ArrayList<>();
    try {
        JSONObject root = new JSONObject(jsonResponse);

        for (int i = 1; i <= root.length(); i++) {
            String value = root.getString("key" + i);
            spinnerList.add(value);
        }

    } catch (JSONException e) {
        e.printStackTrace();
    }


    Spinner spinner = findViewById(R.id.spinner);
    ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, spinnerList);
    spinner.setAdapter(adapter);

好的,我找到了解決方案。 對於響應類型,我沒有使用 JsonObject。 我使用HashMap<String, String>

     @GET("api")
 fun getListItems(
         @Header(NetworkUtils.CONTENT_TYPE) contentType: String = NetworkUtils.CONTENT_TYPE_PARAMS,
         @Header(NetworkUtils.AUTHORIZATION) bearerToken: String,
         @Query("language") language: String?
): Observable<Response<HashMap<String, String>>>

然后只需在 Spinner 上使用 HashMap

override fun populatesCaseTypesSpinner(response: HashMap<String, String>) {
     val adapter = ArrayAdapter(context!!, android.R.layout.simple_spinner_item, ArrayList(response.keys))

     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)

     spinnerCaseTypes.adapter = adapter

     spinnerCaseTypes.setOnTouchListener(View.OnTouchListener { _, _ ->
         hideKeyboard()
         false
     })

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM