10

我正在寻找类似数组的东西,但它需要存储多种数据类型。Oracle Java 教程说:“数组是一个容器对象,它包含固定数量的单一类型的值。” 因此,如果我不能将数组用于多种类型,我应该使用什么?

我有这段代码一次只向地图添加一个标记,因为它在每个循环中写入我的 lat 和 long 值,并且只将最后一个传递给 onPostExecute。所以我需要像数组这样的东西来传递多种形式的联系信息。即,我从每个 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
}

然后将您的纬度/经度对添加到ArrayList类型LocationData

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

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

您可以创建自定义类的数组。

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(...) 方法返回您的自定义类:

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

或者一个数组:

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

或者一个数组列表:

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

编辑:当然,您也可以制作自定义对象的ArrayList

于 2013-09-04T22:36:09.797 回答
6

您应该考虑使用类型安全的异构容器模式

在那里,数据存储在 a 中Map<Key<?>, Object>,并且对地图的访问隐藏在通用方法后面,这些方法会自动转换返回值。

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

对于put.

于 2013-09-04T23:33:31.670 回答
0

存储不同数据类型的对象最简单的方法就是将数组(或集合)的类型声明为“对象”。

Object[] arr = new Object[10];

   arr[0] = "ab";
   arr[1] = 2;
   arr[2] = 2.3;

Java.lang.Object 类是类层次结构的根或超类。所有预定义类和用户定义类都是 Object 类的子类。因此,所有其他类的对象也是“对象”类型,因此可以存储。

于 2021-05-27T08:12:42.403 回答