10

配列のようなものを探していますが、複数のデータ型を格納する必要があります。Oracle Java チュートリアルには、「配列は、単一の型の一定数の値を保持するコンテナ オブジェクトです」と書かれています。では、配列を複数の型に使用できない場合は、何を使用すればよいでしょうか?

ループごとに緯度と経度の値を上書きし、最後の値のみを onPostExecute に渡すため、一度に 1 つのマーカーのみをマップに追加するこのコードがあります。したがって、複数の形式の連絡先情報を渡すには、配列のようなものが必要になります。つまり、各 JSON 文字列から場所を取得していますが、このバックグラウンド スレッドから名前と電話番号も取得して UI に渡す必要があります。

try {

    String apples = endpoint.listContactInfo().execute().toString();

    JSONObject jObject = new JSONObject(apples);

    JSONArray jsonArr = jObject.getJSONArray("items");

     for(int i =0 ; i<jsonArr.length() ;i++ ){
         JSONObject jsonObj1 = jsonArr.getJSONObject(i);


                    // Storing each json item in variable
                    String id = jsonObj1.getString(TAG_ID);
                    String nameFirst1 = jsonObj1.getString(TAG_FIRSTNAME);
                    String nameLast1 = jsonObj1.getString(TAG_LASTNAME);
                    String emailAddress1 = jsonObj1.getString(TAG_EMAIL);
                    String streetAddress1 = jsonObj1.getString(TAG_ADDRESS);
                    String phone1 = jsonObj1.getString(TAG_PHONE);

                    //test to see if made it to string
                    Log.d("YOUR_TAG", "First Name: " + nameFirst1 + " Last Name: " + nameLast1);

                       address = coder.getFromLocationName(streetAddress1,5);

                        Address location1 = address.get(0);

                        // SET LAT LNG VALUES FOR MARKER POINT

                     lati = location1.getLatitude();
                         longi = location1.getLongitude();



                         Log.d("Location", "Location:" + lati + " " +  longi);


     }

    } catch (IOException e) {
    e.printStackTrace();
  } catch (JSONException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
      return (long) 0;


    }
         // ADD MARKER TO MAP UI
    protected void onPostExecute(Long result) {
        mMap.addMarker(new MarkerOptions()
        .position(new LatLng(lati, longi))
         .title("Hello world"));
    }  
4

4 に答える 4

12

を使用できますArrayList

ArrayList<Object> listOfObjects = new ArrayList<Object>();

そして、それにアイテムを追加します。

listOfObjects.add("1");
listOfObjects.add(someObject);

または、必要なすべてのフィールドをカプセル化する独自のオブジェクトを作成します

public class LocationData {
   private double lat;
   private double longitude;

   public LocationData(double lat, double longitude) {
       this.lat = lat;
       this.longitude = longitude;
   }
   //getters
   //setters
}

次に、緯度と経度のペアをArrayListof タイプに追加しますLocationData

ArrayList<LocationData> listOfObjects = new ArrayList<LocationData>();

listOfObjects.add(new LocationData(lat, longitude));
于 2013-09-04T22:42:15.533 に答える
7

Custom-Classの配列を作成できます。

public class YourCustomClass {

     String id;
     String name;
     double longitude;
     // and many more fields ...

    public YourCustomClass() {  // constructor 

    }

    public void setID(String id) {
        this.id = id;
    }

    public String getID() {
        return id;
    }

    // and many more getter and setter methods ...
}

カスタムクラス内には、データを保存できるフィールドをいくつでも持つことができ、次のように使用できます。

// with array 
YourCustomClass [] array = new YourCustomClass[10];
array[0] = new YourCustomClass();
array[0].setID("yourid");

String id = array[0].getID();

// with arraylist
ArrayList<YourCustomClass> arraylist = new ArrayList<YourCustomClass>();
arraylist.add(new YourCustomObject());
arraylist.get(0).setID("yourid");

String id = arraylist.get(0).getID();

AsyncTasks doInBackground(...) メソッドに Custom-class を返させることもできます:

protected void onPostExecute(YourCustomClass result) {
 // do stuff...
}

または配列:

protected void onPostExecute(YourCustomClass [] result) {
 // do stuff...
}

またはArrayList:

protected void onPostExecute(ArrayList<YourCustomClass> result) {
 // do stuff...
}

編集:もちろん、カスタム オブジェクトのArrayListを作成することもできます。

于 2013-09-04T22:36:09.797 に答える
6

タイプセーフな異種コンテナー パターンの使用を検討する必要があります。

データは に格納されMap<Key<?>, Object>、マップへのアクセスは、戻り値を自動的にキャストする汎用メソッドの背後に隠されています。

public <T> T getObjectByKey(Key<T> key)
  return (T) map.get(key);

についても同じですput

于 2013-09-04T23:33:31.670 に答える