用 JSON 填充 Spinner
Populate Spinner with JSON
我发现了这个很棒的 JSON 为 Android 解析 tutorial 并且因为我对这个领域还很陌生,我想问一下如何用给定的数据。当用户单击名称时,其余名称将加载,然后当用户再次选择一个名称时,它必须保持活动状态。任何帮助将不胜感激!!!
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// we will using AsyncTask during parsing
new AsyncTaskParseJson().execute();
}
// you can make this class as another java file so it will be separated from your main activity.
public class AsyncTaskParseJson extends AsyncTask<String, String, String> {
final String TAG = "AsyncTaskParseJson.java";
// set your json string url here
String yourJsonStringUrl = "http://demo.codeofaninja.com/tutorials/json-example-with-php/index.php";
// contacts JSONArray
JSONArray dataJsonArr = null;
@Override
protected void onPreExecute() {}
@Override
protected String doInBackground(String... arg0) {
try {
// instantiate our json parser
JsonParser jParser = new JsonParser();
// get json string from url
JSONObject json = jParser.getJSONFromUrl(yourJsonStringUrl);
// get the array of users
dataJsonArr = json.getJSONArray("Users");
// loop through all users
for (int i = 0; i < dataJsonArr.length(); i++) {
JSONObject c = dataJsonArr.getJSONObject(i);
// Storing each json item in variable
String firstname = c.getString("firstname");
String lastname = c.getString("lastname");
String username = c.getString("username");
// show the values in our logcat
Log.e(TAG, "firstname: " + firstname
+ ", lastname: " + lastname
+ ", username: " + username);
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String strFromDoInBg) {}
}
}
从 json 创建列表,这样
List<String> list = new ArrayList<String>();
list.add(json element);
list.add(json element);
list.add(json element);
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, list);
spinner.setAdapter(dataAdapter);
Spinner 使用列表对象来提供数据。所以你应该有一个 Spinner 对象的支持列表。
在 for 循环之前,执行以下操作:
List<String> namesList = new ArrayList<String>();
然后在您的 for 循环中,将名称添加到此列表中:
//I'm assuming you are going to display only the first name
namesList.add(firstName);
然后创建一个将列表绑定到 Spinner 的 ArrayAdapter 对象。
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, namesList);
yourSpinner.setAdapter(adapter);
感谢大家的帮助,但真正的解决方案在于需要在 OnPostExecute() 中添加以下代码:
Spinner yourSpinner= (Spinner) findViewById(R.id.yourSpinner);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(<YourActivityNAme>.this, android.R.layout.simple_spinner_item, namesList);
yourSpinner.setAdapter(adapter);
我发现了这个很棒的 JSON 为 Android 解析 tutorial 并且因为我对这个领域还很陌生,我想问一下如何用给定的数据。当用户单击名称时,其余名称将加载,然后当用户再次选择一个名称时,它必须保持活动状态。任何帮助将不胜感激!!!
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// we will using AsyncTask during parsing
new AsyncTaskParseJson().execute();
}
// you can make this class as another java file so it will be separated from your main activity.
public class AsyncTaskParseJson extends AsyncTask<String, String, String> {
final String TAG = "AsyncTaskParseJson.java";
// set your json string url here
String yourJsonStringUrl = "http://demo.codeofaninja.com/tutorials/json-example-with-php/index.php";
// contacts JSONArray
JSONArray dataJsonArr = null;
@Override
protected void onPreExecute() {}
@Override
protected String doInBackground(String... arg0) {
try {
// instantiate our json parser
JsonParser jParser = new JsonParser();
// get json string from url
JSONObject json = jParser.getJSONFromUrl(yourJsonStringUrl);
// get the array of users
dataJsonArr = json.getJSONArray("Users");
// loop through all users
for (int i = 0; i < dataJsonArr.length(); i++) {
JSONObject c = dataJsonArr.getJSONObject(i);
// Storing each json item in variable
String firstname = c.getString("firstname");
String lastname = c.getString("lastname");
String username = c.getString("username");
// show the values in our logcat
Log.e(TAG, "firstname: " + firstname
+ ", lastname: " + lastname
+ ", username: " + username);
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String strFromDoInBg) {}
}
}
从 json 创建列表,这样
List<String> list = new ArrayList<String>();
list.add(json element);
list.add(json element);
list.add(json element);
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, list);
spinner.setAdapter(dataAdapter);
Spinner 使用列表对象来提供数据。所以你应该有一个 Spinner 对象的支持列表。
在 for 循环之前,执行以下操作:
List<String> namesList = new ArrayList<String>();
然后在您的 for 循环中,将名称添加到此列表中:
//I'm assuming you are going to display only the first name
namesList.add(firstName);
然后创建一个将列表绑定到 Spinner 的 ArrayAdapter 对象。
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, namesList);
yourSpinner.setAdapter(adapter);
感谢大家的帮助,但真正的解决方案在于需要在 OnPostExecute() 中添加以下代码:
Spinner yourSpinner= (Spinner) findViewById(R.id.yourSpinner);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(<YourActivityNAme>.this, android.R.layout.simple_spinner_item, namesList);
yourSpinner.setAdapter(adapter);