2

学校名と ID を含む以下のような JSON ファイルを解析し、「名前」フィールドの値を使用してスピナー ラベルを設定するにはどうすればよいですか?

スピナーが選択した SchoolID を次のアクティビティに出力するようにします。たとえば、「Hill View Elementary」が表示されます。これを選択すると、値「HVE」が次のアクティビティに出力されます。

{
"schools": [
{
"Name": "Hill View Elementary",
"SchoolID": "HVE"},
{
"Name": "Mill View",
"SchoolID": "MVE"},
{
"Name": "Big School",
"SchoolID": "BSC"},
]
}

フィードの読み取りを試みるために使用している onCreate は次のとおりです...

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);  

    String readFeed = readFeed();
    try {
      JSONArray jsonArray = new
      JSONArray(readFeed);
      Log.i(MainActivity.class.getName(),
          "Number of entries " + jsonArray.length());

      for (int i = 0; i < jsonArray.length(); i++) {
        JSONObject jsonObject = jsonArray.getJSONObject(i);

        // Here instead of Logging I want to use each schools "Name" to 
        // be put into an array that I can use to populate the strings 
        // for the spinner

        Log.i(MainActivity.class.getName(), jsonObject.getString("schools"));

      }
    } catch (Exception e) {
      e.printStackTrace();
    }
}

私はまだAndroidでスピードを上げているので、明確に理解していただければ幸いです。

ここにreadfeedがあります:

public String readFeed() {
    StringBuilder builder = new StringBuilder();
    HttpClient client = new DefaultHttpClient();

    // domain intentionally obfuscated for security reasons
    HttpGet httpGet = new HttpGet("http://www.domain.com/schools.php");
    try 
 {
      HttpResponse response = client.execute(httpGet);
      StatusLine statusLine = response.getStatusLine();
      int statusCode = statusLine.getStatusCode();
      if (statusCode == 200) {
        HttpEntity entity = response.getEntity();
        InputStream content = entity.getContent();
        BufferedReader reader = new BufferedReader(new InputStreamReader(content));
        String
 line;
        while ((line = reader.readLine()) != null) {
          builder.append(line);
        }
      } else {
        Log.e(MainActivity.class.toString(), "Failed to download file");
      }
    } catch (ClientProtocolException e) {
      e.printStackTrace();
    } catch (IOException e)
 {
      e.printStackTrace();
    }
    return builder.toString();
  }
4

1 に答える 1

13

私はこのようなことをします:

public class School {
    private String name;
    private String id;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
}

作成時:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);  

    String readFeed = readFeed();

    // you can use this array to find the school ID based on name
    ArrayList<School> schools = new ArrayList<School>();
    // you can use this array to populate your spinner
    ArrayList<String> schoolNames = new ArrayList<String>();

    try {
      JSONObject json = new JSONObject(readFeed);
      JSONArray jsonArray = new JSONArray(json.optString("schools"));
      Log.i(MainActivity.class.getName(),
          "Number of entries " + jsonArray.length());

      for (int i = 0; i < jsonArray.length(); i++) {
        JSONObject jsonObject = jsonArray.getJSONObject(i);

        School school = new School();
        school.setName(jsonObject.optString("Name"));
        school.setId(jsonObject.optString("SchoolID"));
        schools.add(school);
        schoolNames.add(jsonObject.optString("Name"));

      }
    } catch (Exception e) {
      e.printStackTrace();
    }
    Spinner mySpinner = (Spinner)findViewById(R.id.my_spinner);
    mySpinner.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, schoolNames));
}

main_activity.xml には、Spinner. 上記のコードは、以下のような名前の Spinner で機能します。

<Spinner
    android:id="@+id/my_spinner"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"/>
于 2012-10-16T03:09:13.743 に答える