【问题标题】:How to populate Json String into Android spinner如何将 Json 字符串填充到 Android 微调器中
【发布时间】:2020-06-18 02:44:58
【问题描述】:

我的Json 响应不是数组。它是一个单一的Json 对象(具有如下动态键和值对):

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

如何将值填充到 Android 微调器中或如何根据此 Json 响应创建地图?

【问题讨论】:

    标签: android json dictionary spinner


    【解决方案1】:

    整个 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);
    

    【讨论】:

      【解决方案2】:
      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 响应中创建地图?这是我想不通的部分
      • 这是 API 调用结果的一部分吗?
      • 是的。我发送的是 API 响应 { "key1": "value1", "key2": "value2", "key3": "value3", "key4": "value4", "key5": "value5", “key6”:“value6”,“key7”:“value7”,“key8”:“value8”,}
      【解决方案3】:

      好的,我找到了解决方案。对于响应类型,我没有使用 JsonObject。我用HashMap&lt;String, String&gt;

           @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
           })
      

      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-06
        • 1970-01-01
        • 2023-04-10
        相关资源
        最近更新 更多