这段代码可以让您了解如何填充对象JSON
您可以从 API 获取。
你想要做的事情非常简单,但我试图让事情尽可能通用,这样其他人就不能使用这段代码。
the spinner
代码中表示的填充为ArrayList
of WorldPopulation
类型。你会注意到toString
of WorldPopulation
被覆盖,它可以用在ArrayAdapter
所以国家的名字将会被选取。
public class LoadDataActivity extends AppCompatActivity {
private Spinner spinner;
private ArrayList<WorldPopulation> worldPopulations;
private TextView rank_TextView;
private TextView country_TextView;
private TextView population_TextView;
private TextView url_TextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_load_data);
spinner = (Spinner) findViewById(R.id.LoadDataActivity_spinner);
rank_TextView = (TextView) findViewById(R.id.LoadDataActivity_rank_textView);
country_TextView = (TextView) findViewById(R.id.LoadDataActivity_country_textView);
population_TextView = (TextView) findViewById(R.id.LoadDataActivity_population_textView);
url_TextView = (TextView) findViewById(R.id.LoadDataActivity_url_textView);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
WorldPopulation population = (WorldPopulation) spinner.getItemAtPosition(position);
rank_TextView.setText("" + population.getRank());
country_TextView.setText("" + population.getCountry());
population_TextView.setText("" + population.getPopulation());
url_TextView.setText("" + population.getFlag());
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
new DownloadData().execute();
}
private class DownloadData extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params) {
try {
worldPopulations = new ArrayList<>();
URL url = new URL("http://www.androidbegin.com/tutorial/jsonparsetutorial.txt");
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.connect();
String result = IOUtils.toString(httpURLConnection.getInputStream());
System.out.println("" + result);
JSONObject jsonObject = new JSONObject(result);
JSONArray jsonArray = jsonObject.getJSONArray("worldpopulation");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject singleItem = jsonArray.getJSONObject(i);
WorldPopulation population = new WorldPopulation();
population.rank = singleItem.getString("rank");
population.country = singleItem.getString("country");
population.population = singleItem.getString("population");
population.flag = singleItem.getString("flag");
worldPopulations.add(population);
}
Log.d("TAG", "" + result);
Log.d("TAG", "size: " + worldPopulations.size());
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
ArrayAdapter<WorldPopulation> adapter = new ArrayAdapter<WorldPopulation>(getApplicationContext(), android.R.layout.simple_spinner_dropdown_item, worldPopulations);
adapter.setDropDownViewResource(android.R.layout.simple_list_item_1);
spinner.setAdapter(adapter);
}
}
class WorldPopulation {
private String rank;
private String country;
private String population;
private String flag;
public String getRank() {
return rank;
}
public void setRank(String rank) {
this.rank = rank;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getPopulation() {
return population;
}
public void setPopulation(String population) {
this.population = population;
}
public String getFlag() {
return flag;
}
public void setFlag(String flag) {
this.flag = flag;
}
@Override
public String toString() {
return country;
}
}
}
活动加载数据.xml
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="4dp"
android:orientation="vertical">
<Spinner
android:id="@+id/LoadDataActivity_spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_margin="4dp" />
<TextView
android:id="@+id/LoadDataActivity_rank_textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/LoadDataActivity_country_textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/LoadDataActivity_population_textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/LoadDataActivity_url_textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
Output
现在您已将数据填充到Spinner
您可以利用它来触发填充第二个spinner
取决于第一个的选择spinner
.
显然我没有看到任何链接可以告诉我第二个数据源,我将把答案留在这里直到下次更新。