如何将 Json 字符串填充到 Android 微调器中
How to populate Json String into Android spinner
我的 Json
响应不是数组。它是单个 Json
对象(具有如下动态键和值对):
{
"key1": "value1",
"key2": "value2",
"key3": "value3",
"key4": "value4",
"key5": "value5",
"key6": "value6",
"key7": "value7",
"key8": "value8",
}
如何将值填充到 Android 微调器或如何根据此 Json
响应创建地图?
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
})
}
我的 Json
响应不是数组。它是单个 Json
对象(具有如下动态键和值对):
{
"key1": "value1",
"key2": "value2",
"key3": "value3",
"key4": "value4",
"key5": "value5",
"key6": "value6",
"key7": "value7",
"key8": "value8",
}
如何将值填充到 Android 微调器或如何根据此 Json
响应创建地图?
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
})
}