2014-10-04 2 views
1

ArrayList list1과 ArrayListArrayList> final_list를 만들었습니다. list1에는 단일 고객에 대한 정보와 많은 고객에 대한 final_list가 포함됩니다. 나는 간결함을 위해 네 서사 코드 세그먼트를 제공한다.ArrayList를 오버라이드

public class CheckItineraries extends FragmentActivity { 

private ProgressDialog pDialog; 
String username, origin_lat, origin_lng, destination_lat, destination_lng, 
     waypoint1_lat, waypoint1_lng, waypoint2_lat, waypoint2_lng, 
     waypoints; 
int i, j, b; 
TextView v1, v2; 
String start_pro , final_pro; 

double z = 0; 
ListView list; 
ArrayList<LatLng> markerPoints; 
ArrayList<Double> sum = new ArrayList<Double>(); 
ArrayList<Double> differ = new ArrayList<Double>(); 

ArrayList<HashMap<String, String>> final_List = new ArrayList<HashMap<String, String>>(); 

// URL to get contacts JSON 
private static String LOGIN_URL = "http://XXXXXXXXXXXXXXXX/check_itineraries.php"; 

public static final String PREFS_NAME = "MyPreferencesFile"; 

// JSON Node names 

JSONParser jsonParser = new JSONParser(); 

// contacts JSONArray 
JSONArray contacts = null; 

// Hashmap for ListView 
ArrayList<HashMap<String, String>> itinList; 

ArrayList<String> list1 = new ArrayList<String>(); 

ArrayList<ArrayList<String>> final_list = new ArrayList<ArrayList<String>>(); 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.checkitineraries); 

    itinList = new ArrayList<HashMap<String, String>>(); 

    new GetData().execute(); 
} 

private class GetData extends AsyncTask<Void, Void, Void> { 

    public void onPreExecute() { 
     super.onPreExecute(); 
     Log.d("meg", "meg"); 

     pDialog = new ProgressDialog(CheckItineraries.this); 
     pDialog.setMessage("Επεξεργάζομαι τα στοιχεία..."); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(true); 
     pDialog.show(); 

     SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
     username = settings.getString("username", "nikos"); 

    } 

    protected Void doInBackground(Void... args) { 
     // TODO Auto-generated method stub 

     try { 

      // Building Parameters 
      List<NameValuePair> params = new ArrayList<NameValuePair>(); 
      params.add(new BasicNameValuePair("username", username)); 

      JSONObject json = jsonParser.makeHttpRequest(LOGIN_URL, "POST", 
        params); 

      // JSONObject jObj = new JSONObject(); 
      JSONArray itin_results = json.getJSONArray("itin_results"); 

      for (int i = 0; i < itin_results.length(); i++) { 
       JSONObject c = itin_results.getJSONObject(i); 

       String username = c.getString("username"); 
       String startPoliPro = c.getString("startPoliPro"); 
       String start_lat_pro = c.getString("start_lat_pro"); 
       String start_lng_pro = c.getString("start_lng_pro"); 
       String finalPoliPro = c.getString("finalPoliPro"); 
       String final_lat_pro = c.getString("final_lat_pro"); 
       String final_lng_pro = c.getString("final_lng_pro"); 

       list1.add(username); 
       list1.add(startPoliPro); 
       list1.add(finalPoliPro); 

       final_list.add(i, list1); 

       Log.d("list1",list1.toString()); 

       Log.d("final_list", final_list.toString()); 

       list1.clear(); 

문제는 두 번째 list1 항목의 final_list가 첫 번째 항목을 무시한다는 것입니다.

10-04 15:46:22.249: D/list1(25850): [p, Athens, Halkida] 
10-04 15:46:22.249: D/final_list(25850): [[p, Athens, Halkida]] 
10-04 15:46:22.249: D/list1(25850): [e, Athens, Larissa] 
10-04 15:46:22.249: D/final_list(25850): [[e, Athens, Larissa], [e, Athens, Larissa]] 

로그 캣 나는 그 기본을 알고하지만 난 어떤 도움을 주셔서 감사합니다.

답변

0

ArrayList<String> list1 = new ArrayList<String>();을 클래스 수준에서 선언하지 않으면 문제가 참조가 추가됩니다 (딥 복사본이 아닌). 대신, for() 루프를 선언 -

for (int i = 0; i < itin_results.length(); i++) { 
    List<String> list1 = new ArrayList<>(); // <-- Use the interface and Java 7+ 
              //  can use diamond operator 
    JSONObject c = itin_results.getJSONObject(i); 
    // ... 
    // list1.clear(); // <-- didn't work because of shallow copy. 
} 

또는

final_list.add(i, new ArrayList<>(list1)); // <-- Diamond Operator 
+0

많은 감사 엘리엇에

final_list.add(i, list1); 

에서 변경하여 깊은 복사본을 사용 –