[英]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.