Как хранить несколько типов данных в массиве?
Я ищу что-то вроде массива, но он должен храниться различные типы данных. В Oracle Java учебники говорит: "массив-это объект-контейнер, который содержит фиксированное количество значений одного типа."Итак, если я не могу использовать массив для нескольких типов, что мне использовать?
У меня есть этот код, который добавляет только один маркер на карту за раз, потому что он записывает мои значения lat и long каждый цикл и передает только последний onPostExecute. Поэтому мне понадобится что-то вроде массив для передачи нескольких форм контактной информации. т. е. я вытягиваю местоположение из каждой строки JSON, но мне нужно вытащить и передать имя и номер телефона в пользовательский интерфейс из этого фонового потока.
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"));
}
3 ответов
вы можете создать массив пользовательского класса.
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...
}
или ArrayList:
protected void onPostExecute(ArrayList<YourCustomClass> result) {
// do stuff...
}
Edit: конечно, вы также можете сделать ArrayList с пользовательского объекта.
можно использовать 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
}
а затем добавьте свои пары lat / long в ArrayList
типа LocationData
ArrayList<LocationData> listOfObjects = new ArrayList<LocationData>();
listOfObjects.add(new LocationData(lat, longitude));
вы должны рассмотреть возможность использования типизированного неравномерном контейнер.
там данные хранятся в Map<Key<?>, Object>
и доступ к карте скрыт за универсальными методами, которые автоматически отбрасывают возвращаемое значение.
public <T> T getObjectByKey(Key<T> key)
return (T) map.get(key);
то же самое для put
.