如何将多个数据types存储在数组中?

我正在寻找像一个数组,但它需要存储多个数据types。 Oracle Java教程说:“一个数组是一个容器对象,它拥有固定数量的单一types的值。” 所以,如果我不能使用多个types的数组,我该用什么?

我有这样的代码,一次只向地图添加一个标记,因为它在每个循环中写入我的纬度和长度值,并且只传递最后一个到onPostExecute。 所以我需要像数组一样传递多种forms的联系信息。 即我拉从每个JSONstring的位置,但我需要拉和传递名称和电话号码也从这个后台线程的用户界面。

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")); } 

Solutions Collecting From Web of "如何将多个数据types存储在数组中?"

您可以创build一个自定义类数组。

 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

你可以使用一个ArrayList

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

然后添加项目。

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

或者创build自己的对象来封装所有你需要的字段

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

然后将您的经纬度对添加到LocationDatatypes的ArrayList

 ArrayList<LocationData> listOfObjects = new ArrayList<LocationData>(); listOfObjects.add(new LocationData(lat, longitude)); 

你应该考虑使用types安全的异构容器模式

那里的数据存储在一个Map<Key<?>, Object>并且映射的访问被隐藏在generics方法的后面,它自动地返回值。

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

put一样的。