2013-09-04 58 views
9

Tôi đang tìm một cái gì đó giống như một mảng, nhưng nó cần lưu trữ nhiều loại dữ liệu. Các hướng dẫn Java Java nói, "Một mảng là một đối tượng chứa chứa một số giá trị cố định của một loại duy nhất." Vì vậy, nếu tôi không thể sử dụng một mảng cho nhiều loại, tôi phải sử dụng cái gì?Làm thế nào để lưu trữ nhiều kiểu dữ liệu trong một mảng?

Tôi đã có mã này chỉ thêm một điểm đánh dấu vào bản đồ tại một thời điểm vì nó ghi trên giá trị vĩ độ và giá trị dài của tôi mỗi vòng lặp và chỉ chuyển giá trị cuối cùng đến onPostExecute. Vì vậy, tôi sẽ cần một cái gì đó giống như một mảng để vượt qua nhiều hình thức thông tin liên lạc. tức là tôi đang kéo vị trí từ mỗi chuỗi JSON, nhưng tôi cũng cần phải kéo và chuyển số điện thoại & đến giao diện người dùng từ chuỗi nền này.

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

Nó có phải là một mảng không? và bạn không thể sử dụng arrayList?Nếu câu trả lời của Phillip Johada sẽ hoạt động, nếu nó không thực sự cần thiết thì bạn có thể sử dụng ArrayList và đôi khi việc nhập kiểu là cần thiết – misserandety

+1

Nói chung, khi bạn thấy mình muốn lưu trữ nhiều loại dữ liệu khác nhau, bạn nên viết một lớp mới giữ loại đó, thay vì đổ tất cả các đối tượng đó vào cùng một mảng hoặc cùng một danh sách. –

Trả lời

6

Bạn có thể tạo một mảng của lớp tùy chỉnh của mình.

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 ... 
} 

Bên tùy chỉnh-class của bạn, bạn có thể có nhiều lĩnh vực như bạn muốn, nơi bạn có thể lưu trữ dữ liệu của bạn, và sau đó sử dụng nó như thế:

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

Bạn cũng có thể để cho các AsyncTasks doInBackground (...) phương pháp trở Custom-lớp học của bạn:

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

Hoặc một mảng:

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

Hoặc một ArrayList:

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

Edit: Tất nhiên, bạn cũng có thể làm cho một ArrayList của đối tượng tùy chỉnh của bạn.

10

Bạn có thể sử dụng ArrayList.

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

Sau đó thêm các mục vào nó.

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

Hoặc tạo đối tượng của riêng bạn mà gói gọn tất cả các lĩnh vực mà bạn yêu cầu như

public class LocationData { 
    private double lat; 
    private double longitude; 

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

và sau đó thêm cặp vĩ độ/kinh của bạn đến một ArrayList loại LocationData

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

listOfObjects.add(new LocationData(lat, longitude)); 
+3

Ông cũng có thể làm điều này với một mảng thường xuyên của 'Object []' – blgt

+0

yeah. chắc chắn. – user2748689

+2

Nó sẽ không khuyên bạn nên làm việc trên một mảng 'Object' nguyên trực tiếp. Nó nên được đóng gói đằng sau một số loại cơ chế an toàn. – mike

2

Bạn nên xem xét việc sử dụng typesafe heterogeneous container pattern.

Có dữ liệu được lưu trữ trong Map<Key<?>, Object> và quyền truy cập vào bản đồ bị ẩn sau các phương thức chung, tự động truyền giá trị trả về.

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

Tương tự cho put.

Các vấn đề liên quan