我正在寻找类似于Array的东西,但它需要存储多种数据类型。 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"));
}
答案 0 :(得分:10)
您可以使用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));
答案 1 :(得分:6)
您可以创建自定义类的数组。
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类:
protected void onPostExecute(YourCustomClass result) {
// do stuff...
}
或数组:
protected void onPostExecute(YourCustomClass [] result) {
// do stuff...
}
或ArrayList:
protected void onPostExecute(ArrayList<YourCustomClass> result) {
// do stuff...
}
修改:当然,您也可以制作自定义对象的 ArrayList 。
答案 2 :(得分:4)
您应该考虑使用 typesafe heterogeneous container pattern 。
数据存储在Map<Key<?>, Object>
中,对地图的访问隐藏在通用方法后面,自动转换返回值。
public <T> T getObjectByKey(Key<T> key)
return (T) map.get(key);
put
也一样。
答案 3 :(得分:0)
存储不同数据类型的对象最简单的方法就是将数组(或集合)的类型声明为“对象”。
Object[] arr = new Object[10];
arr[0] = "ab";
arr[1] = 2;
arr[2] = 2.3;
Java.lang.Object 类是类层次结构的根或超类。所有预定义类和用户定义类都是 Object 类的子类。因此,所有其他类的对象也是“对象”类型,因此可以存储。