How to store multiple datatypes in an array?

I’m looking for something like an Array, but it needs to store multiple data types. The Oracle Java tutorials says, “An array is a container object that holds a fixed number of values of a single type.” So if I can’t use an array for multiple types, what do I use?

I’ve got this code that only adds one marker to the map at a time because it writes over my lat and long values each loop and only passes the last to the onPostExecute. So I will need something like an array to pass multiple forms of contact info. ie I’m pulling the location from each JSON string, but I need to pull and pass the name & phone number too to the UI from this background thread.

  • Android checkbox checked in one activity and then button appears in another activity
  • What is the best way to implement “coach marks” in Android?
  • Open Url in webView in android
  • Android simple spinner item
  • Tap on screen 5 Times in 3 seconds in android
  • How to load items in android homescreen listview widget?
  • 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"));
        }  
    

    Related posts:

    How to install/replace on Android without using Eclipse
    Android: Appcompat 21 how to add shadow on actionbar
    StaleDataException with dialog
    How to make Toolbar transparent?
    how to get frame rate of video in android os?
    Android create folders in Internal Memory
  • IllegalArgumentException: Unmanaged descriptor using gms.maps.model.Marker.setIcon
  • listview not updating with notifydatasetchanged() call
  • Real-time video stabilization
  • TextView in the center of the screen
  • How to remove a contact programmatically in android
  • How to disable key preview in popup keyboard (not in main softkeyboard layout)?
  • 3 Solutions collect form web for “How to store multiple datatypes in an array?”

    You can create an array of your 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 ...
    }
    

    Inside your custom-class you can have as many fields as you want where you can store your data, and then use it like that:

    // 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();
    

    You can also let the AsyncTasks doInBackground(…) method return your Custom-class:

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

    Or an array:

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

    Or a ArrayList:

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

    Edit: Of course, you can also make a ArrayList of your custom object.

    You can use an ArrayList.

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

    And then add items to it.

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

    Or create your own object that encapsulates all the field that you require like

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

    and then add your lat/long pairs to an ArrayList of type LocationData

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

    You should consider the use of the typesafe heterogeneous container pattern.

    There the data is stored in a Map<Key<?>, Object> and access to the map is hidden behind generic methods, that automatically cast the return value.

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

    The same for put.

    Android Babe is a Google Android Fan, All about Android Phones, Android Wear, Android Dev and Android Games Apps and so on.