2013-03-22 2 views
0

Мне нужна помощь здесь. Я хочу провести синтаксический разбор с json из 2-х серверов url, а затем показать массив в 1 listview. это мой код.как разобраться с json с 2-х разных серверов?

public class MainActivity extends Activity { 
private JSONObject jObject; 
private String jsonResult =""; 
private JSONObject jObject2; 
private String jsonResult2 =""; 
private String url = "http://10.0.2.2/kota/daftarkota.php"; 
private String url2 = "http://10.0.2.2/kota/delkota.php"; 
private String url3 = "http://www.hatsa.byethost33.com/kota_daftarkota.php"; 
String[] daftarid; 
String[] daftarnama; 
String[] daftarlatitude; 
String[] daftarlongitude; 
Menu menu; 
public static MainActivity ma; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    ma=this; 
    RefreshList(); 
} 

public void RefreshList() { 
    try { 
     jsonResult = getRequest(url); 

     jObject = new JSONObject(jsonResult); 
     JSONArray menuitemArray = jObject.getJSONArray("kota"); 

     daftarid = new String[menuitemArray.length()]; 
     daftarnama = new String[menuitemArray.length()]; 
     daftarlatitude = new String[menuitemArray.length()]; 
     daftarlongitude = new String[menuitemArray.length()]; 

     for (int i = 0; i < menuitemArray.length(); i++) 
     { 
      daftarid[i] = menuitemArray.getJSONObject(i).getString("id").toString(); 
      daftarnama[i] = menuitemArray.getJSONObject(i).getString("nama").toString(); 
      daftarlatitude[i] = menuitemArray.getJSONObject(i).getString("latitude").toString(); 
      daftarlongitude[i] = menuitemArray.getJSONObject(i).getString("longitude").toString(); 
     } 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    try { 
     jsonResult2 = getRequest(url3); 

     jObject2 = new JSONObject(jsonResult2); 
     JSONArray menuitemArray = jObject2.getJSONArray("kota"); 

     daftarid = new String[menuitemArray.length()]; 
     daftarnama = new String[menuitemArray.length()]; 
     daftarlatitude = new String[menuitemArray.length()]; 
     daftarlongitude = new String[menuitemArray.length()]; 

     for (int i = 0; i < menuitemArray.length(); i++) 
     { 
      daftarid[i] = menuitemArray.getJSONObject(i).getString("id").toString(); 
      daftarnama[i] = menuitemArray.getJSONObject(i).getString("nama").toString(); 
      daftarlatitude[i] = menuitemArray.getJSONObject(i).getString("latitude").toString(); 
      daftarlongitude[i] = menuitemArray.getJSONObject(i).getString("longitude").toString(); 
     } 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    ListView ListView01 = (ListView)findViewById(R.id.ListView01); 
    ListView01.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, daftarnama)); 

    ListView01.setSelected(true); 
    ListView01.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
       long arg3) { 
      final String selectionid = daftarid[arg2]; 
      final String selectionnama = daftarnama[arg2]; 
      final String selectionlatitude = daftarlatitude[arg2]; 
      final String selectionlongitude = daftarlongitude[arg2]; 
      final CharSequence[] dialogitem = {"Edit", "Delete"}; 
      AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 
      builder.setTitle("Pilih ?"); 
      builder.setItems(dialogitem, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int item) { 
        switch(item){ 
        case 0 : 
         Intent i = new Intent(getApplicationContext(), EditActivity.class); 
         i.putExtra("id", selectionid); 
         i.putExtra("nama", selectionnama); 
         i.putExtra("latitude", selectionlatitude); 
         i.putExtra("longitude", selectionlongitude); 
         startActivity(i); 

         break; 
        case 1 : 
         getRequest(url2 + "?id=" + selectionid); 
         RefreshList(); 

         break; 
        } 
       } 
      }); 
      builder.create().show(); 
     }}); 

    ((ArrayAdapter)ListView01.getAdapter()).notifyDataSetInvalidated(); 

} 

/** 
* Method untuk Mengirimkan data ke server 
*/ 
public String getRequest(String Url){ 

    String sret=""; 
    HttpClient client = new DefaultHttpClient(); 
    HttpGet request = new HttpGet(Url); 
    try{ 
     HttpResponse response = client.execute(request); 
     sret =request(response); 

    }catch(Exception ex){ 
     Toast.makeText(this,"Gagal "+sret, Toast.LENGTH_SHORT).show(); 
    } 
    return sret; 

} 
/** 
* Method untuk Menerima data dari server 
*/ 
public static String request(HttpResponse response){ 
    String result = ""; 
    try{ 
     InputStream in = response.getEntity().getContent(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 
     StringBuilder str = new StringBuilder(); 
     String line = null; 
     while((line = reader.readLine()) != null){ 
      str.append(line + "\n"); 
     } 
     in.close(); 
     result = str.toString(); 
    }catch(Exception ex){ 
     result = "Error"; 
    } 
    return result; 
} 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    this.menu = menu; 

    menu.add(0, 1, 0, "Tambah").setIcon(android.R.drawable.btn_plus); 
    menu.add(0, 2, 0, "Refresh").setIcon(android.R.drawable.ic_menu_rotate); 
    menu.add(0, 3, 0, "Exit").setIcon(android.R.drawable.ic_menu_close_clear_cancel); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case 1: 
     Intent i = new Intent(MainActivity.this, AddActivity.class); 
     startActivity(i); 
     return true; 
    case 2:    
     RefreshList();   
     return true; 
    case 3: 
     finish(); 
     return true; 
    } 
    return false; 
} 

}

если я запускаю его, ListView только показать мне массив из 'URL' и нет ничего от 'url3'. Я не знаю, как должен мой код, если я хочу, чтобы listview отображал массив из 'url' и 'url3'. спасибо. :)

ответ

0

Это на самом деле выглядит наоборот. Я думаю, вы видите данные от url3, так как вы создаете массив daftarnama дважды - второй раз с данными от url3. Вместо массива используйте List<String>. Создайте список только один раз, а затем добавьте все элементы из обоих URL-адресов. Кроме того, вы должны переосмыслить свой код. Здесь у вас много дублирующего кода (DRY - не повторяйте себя).

Смежные вопросы