ArrayLists
現在、検索結果を取得し、返された JSON オブジェクトを解析し、結果の断片を という名前で作成されたクラス内のいくつかに追加するアプリに取り組んでいますVenueList
。
サービスから結果を受け取り、JSON を解析するメソッドは次のとおりです。
private static List<String> getResultsFromJson(String json) {
ArrayList<String> resultList = new ArrayList<String>();
try {
JSONObject resultsWrapper = (JSONObject) new JSONTokener(json).nextValue();
JSONArray results = resultsWrapper.getJSONArray("results");
for (int i = 0; i < results.length(); i++) {
JSONObject result = results.getJSONObject(i);
resultList.add(result.getString("text"));
}
}
catch (JSONException e) {
Log.e(TAG, "Failed to parse JSON.", e);
}
return resultList;
}
この結果がList
変数呼び出しになりますmResults
(明確にするために: 。これは、結果をListFragment に表示するために使用されるmResults = getResultsFromJson(restResult);
に結果を入れる次のループで、他の場所で使用されます。ArrayAdapter
for (String result : mResults) {
VenueList.addVenue(result, "HELLO WORLD");
adapter.add(result);
}
VenueList
また、結果を管理し、複数のビューからアクセスできるようにするというクラスに結果を追加します。ArrayLists
基本的に、検索で返された会場ごとに異なるタイプの詳細を保持する複数を保持するだけです。会場を追加するために使用する方法をVenueList
以下に示します (上記の for ループで使用されていることがわかります)。
public static void addVenue(String name, String geo) {
venueNames.add(name);
venueGeos.add(geo);
}
メソッドが複数の引数を取り、クラスaddVenue
を更新できるようにしたい。それでも、 forループでメソッドVenueList
を呼び出すと、(ループのパラメーターから)それを渡すことしかできず、2番目の引数を渡す方法がわかりません(これは、によって解析されたJSONから取得する必要があります)今のところプレースホルダーとして使用しています。addVenue
String result
getResultsFromJson
"HELLO WORLD"
getResultsFromJson
リストが 1 つしか返されないことに気付きました。解析する JSON オブジェクトから複数の要素を取得し、それらを正しい順序で VenueList に追加できる必要があります。
だから私の質問は:
getResultsFromJson
1)メソッドとループが与えられた場合、メソッドを設計どおりfor
に使用するにはどうすればよいですか? addVenue()
JSON から複数の要素を解析し、それらを同時に VenueList に追加するにはどうすればよいですか? 後でさらに引数を追加する予定ですが、2 つでも機能する場合は、4 つまたは 5 つでも機能すると思います。
2) それが不可能な場合getResultsFromJson
、 、for
ループ、およびaddVenue
メソッドをどのように再設計して、適切に連携させる必要がありますか?
詳細やコードが必要な場合はお知らせください。喜んで提供いたします。ありがとうございました!
編集 - 完全な VenueList クラス:
public class VenueList {
private static ArrayList<String> venueNames;
private static ArrayList<String> venueGeos;
public VenueList() {
venueNames = new ArrayList<String>();
venueGeos = new ArrayList<String>();
}
public static void addVenue(String name, String geo) {
venueNames.add(name);
venueGeos.add(geo);
}
public static String getVenueName(int position) {
return venueNames.get(position);
}
public static String getVenueGeo(int position) {
return venueGeos.get(position);
}
public static void clearList() {
venueNames.clear();
venueGeos.clear();
}
}
明確化: 会場 (電話番号、住所など) について保存したいデータの要素ごとに追加の ArrayLists を用意します。