2011-08-23 4 views
2

J'essaye juste d'obtenir un simple tableau JSON dans le format suivant: ["Country1", "Country2", "Country3"] du web et ensuite utiliser ce tableau comme une liste de lecture dans mon application Android. Je ne suis pas coincé sur la façon de faire ce tableau JSON, je suis juste confus sur la façon de l'obtenir dans une liste dans l'application.Android App: JSON array du web à listview

J'ai essayé quelques tutoriels différents, mais aucun d'entre eux n'utilise la même disposition que la mienne.

Mon application utilise un viewflipper, pour garder une disposition tabulée en tout temps dans l'application, donc aucun des tutoriels ne semble fonctionner avec ma mise en page.

Toute aide est très appréciée.

EDIT:

est ici un code, oui je veux l'analyser à partir d'un service Web et l'afficher dans un listview.

public class Activity extends TabActivity implements OnClickListener { 

Button doSomething; 
TabHost tabHost; 
ViewFlipper flipper; 
ListView listview; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.tablayout_1); 



    doSomething = (Button) findViewById(R.id.btn_do_something); 
    doSomething.setOnClickListener(this); 

    flipper = (ViewFlipper) findViewById(R.id.layout_tab_one); 

    listview = (ListView) findViewById(R.id.listview); 

    @SuppressWarnings("unchecked") 
ListAdapter adapter = new  ArrayAdapter(this,android.R.layout.simple_list_item_1,fetchTwitterPublicTimeline()); 


    //ListAdapter adapter = new SimpleAdapter(this, this.fetchTwitterPublicTimeline() , R.layout.main, new int[] { R.id.item_title, R.id.item_subtitle }); 


    listview.setAdapter(adapter); 

    flipper.setOnClickListener(this); 

    String tabname1 = getString(R.string.tabexample_tab1); 
    String tabname2 = getString(R.string.tabexample_tab2); 
    String tabname3 = getString(R.string.tabexample_tab3); 
    String tabname4 = getString(R.string.tabexample_tab4); 

    tabHost = getTabHost(); 
     tabHost.addTab(tabHost.newTabSpec("tab1").setContent(R.id.layout_tab_one).setIndicator(tabname1)); 
    tabHost.addTab(tabHost.newTabSpec("tab2").setContent(R.id.layout_tab_two).setIndicator(tabname2)); 
    tabHost.addTab(tabHost.newTabSpec("tab3").setContent(R.id.layout_tab_three).setIndicator(tabname3)); 
    tabHost.addTab(tabHost.newTabSpec("tab4").setContent(R.id.layout_tab_four).setIndicator(tabname4)); 

    tabHost.setCurrentTab(0); 




    listview.setOnItemClickListener(new OnItemClickListener(){ 
     public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
      flipper.showNext(); 


     }}); 




} 


public ArrayList<String> fetchTwitterPublicTimeline() 
{ 
    ArrayList<String> listItems = new ArrayList<String>(); 

    try { 
     URL twitter = new URL(
       "JSON.php"); 
     URLConnection tc = twitter.openConnection(); 
     BufferedReader in = new BufferedReader(new InputStreamReader(
       tc.getInputStream())); 

     String line; 
     while ((line = in.readLine()) != null) { 
      JSONArray ja = new JSONArray(line); 

      for (int i = 0; i < ja.length(); i++) { 
       JSONObject jo = (JSONObject) ja.get(i); 
       listItems.add(jo.getString("")); 
      } 
     } 
    } catch (MalformedURLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return listItems; 
} 


@Override 
public void onClick(View arg0) { 
    // TODO Auto-generated method stub 

} 


} 

MISE À JOUR: Je ne peux toujours pas le faire fonctionner, des idées ce qui ne va pas dans le code ci-dessous?

public class Activity extends TabActivity implements OnClickListener { 

Button doSomething; 
TabHost tabHost; 
ViewFlipper flipper; 
ListView listview; 
HttpResponse re; 
String json; 
JSONObject j; 



@SuppressWarnings("deprecation") 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    //final String TAG = "MainActivity"; 
    //final String URL = "JSON.php"; 

    super.onCreate(savedInstanceState); 



    setContentView(R.layout.tablayout_1); 



    final String[] listItems = new String[] { }; 



    /*======================================== 


// JSON object to hold the information, which is sent to the server 
    JSONObject jsonObjSend = new JSONObject(); 

    try { 
    // Add key/value pairs 
    jsonObjSend.put("key_1", "value_1"); 
    jsonObjSend.put("key_2", "value_2"); 

    // Add a nested JSONObject (e.g. for header information) 
    JSONObject header = new JSONObject(); 
    header.put("deviceType","Android"); // Device type 
    header.put("deviceVersion","2.0"); // Device OS version 
    header.put("language", "es-es"); // Language of the Android client 
    jsonObjSend.put("header", header); 

    // Output the JSON object we're sending to Logcat: 
    Log.i(TAG, jsonObjSend.toString(2)); 

    } catch (JSONException e) { 
    e.printStackTrace(); 
    } 

// Send the HttpPostRequest and receive a JSONObject in return 
      JSONObject jsonObjRecv = HTTPClient.SendHttpPost(URL, jsonObjSend); 
      String temp = jsonObjRecv.toString(); 


    /*==============================================*/ 



    doSomething = (Button) findViewById(R.id.btn_do_something); 
    doSomething.setOnClickListener(this); 

    flipper = (ViewFlipper) findViewById(R.id.layout_tab_one); 

    listview = (ListView) findViewById(R.id.listview); 







    /* try { 

      JSONArray array = jsonObjRecv.getJSONArray(""); //(JSONArray) new JSONTokener(json).nextValue(); 

      String[] stringarray = new String[array.length()]; 
      for (int i = 0; i < array.length(); i++) { 
       stringarray[i] = array.getString(i); 
      } 
      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, stringarray); 
      listview.setAdapter(adapter); 
    } catch (JSONException e) { 
      // handle JSON parsing exceptions... 
    }*/ 


    //@SuppressWarnings("unchecked") 
    ListAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,fetchTwitterPublicTimeline()); 


    //ListAdapter adapter = new SimpleAdapter(this, this.fetchTwitterPublicTimeline() , R.layout.main, new int[] { R.id.item_title, R.id.item_subtitle }); 


    listview.setAdapter(adapter); 

    flipper.setOnClickListener(this); 

    String tabname1 = getString(R.string.tabexample_tab1); 
    String tabname2 = getString(R.string.tabexample_tab2); 
    String tabname3 = getString(R.string.tabexample_tab3); 
    String tabname4 = getString(R.string.tabexample_tab4); 

    tabHost = getTabHost(); 
    tabHost.addTab(tabHost.newTabSpec("tab1").setContent(R.id.layout_tab_one).setIndicator(tabname1)); 
    tabHost.addTab(tabHost.newTabSpec("tab2").setContent(R.id.layout_tab_two).setIndicator(tabname2)); 
    tabHost.addTab(tabHost.newTabSpec("tab3").setContent(R.id.layout_tab_three).setIndicator(tabname3)); 
    tabHost.addTab(tabHost.newTabSpec("tab4").setContent(R.id.layout_tab_four).setIndicator(tabname4)); 

    tabHost.setCurrentTab(0); 




    listview.setOnItemClickListener(new OnItemClickListener(){ 
     public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
      flipper.showNext(); 


     }}); 




} 



public ArrayList<String> fetchTwitterPublicTimeline() 
{ 
    ArrayList<String> listItems = new ArrayList<String>(); 

    try { 
     URL twitter = new URL(
       "JSON.php"); 
     URLConnection tc = twitter.openConnection(); 
     BufferedReader in = new BufferedReader(new InputStreamReader(
       tc.getInputStream())); 


     String line = null; 

     //make sure youe String line is completely filled after that.. 
     if (!line.equals(null) && !line.equals("") && line.startsWith("[")) 
     { 
     JSONArray jArray = new JSONArray(line); 
     for (int i = 0; i < jArray.length(); i++) 
     { 
      JSONObject jobj = jArray.getJSONObject(i); 
     // also make sure you get the value from the jsonObject using some key 
     // like, jobj.getString("country"); 

     listItems.add(jobj.getString("")); 
     } 
      } 



    } catch (MalformedURLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return listItems; 
} 



    /* public ArrayList<String> fetchTwitterPublicTimeline() 
{ 
    ArrayList<String> listItems = new ArrayList<String>(); 

    try { 
     URL twitter = new URL(
       "JSON.php"); 
     URLConnection tc = twitter.openConnection(); 
     BufferedReader in = new BufferedReader(new InputStreamReader(
       tc.getInputStream())); 



     //make sure youe String line is completely filled after that.. 
     if (!line.equals(null) && !line.equals("") && line.startsWith("[")) 
     { 
     JSONArray jArray = new JSONArray(line); 
     for (int i = 0; i < jArray.length(); i++) 
     { 
      JSONObject jobj = jArray.getJSONObject(i); 
     // also make sure you get the value from the jsonObject using some key 
     // like, jobj.getString("country"); 

     listItems.add(jobj.getString("")); 
     } 
      } 




     /* String line; 
     while ((line = in.readLine()) != null) { 
      JSONArray ja = new JSONArray(line); 

      for (int i = 0; i < ja.length(); i++) { 
       JSONObject jo = (JSONObject) ja.get(i); 
       listItems.add(jo.getString("")); 
      } 
     } 
    } catch (MalformedURLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return listItems; 
}*/ 


@Override 
public void onClick(View arg0) { 
    // TODO Auto-generated method stub 

} 


} 

mise à jour, voici les valeurs de jarray tel que rapporté par Logcat:

08-26 16: 49: 07,246: -Verbose/app (472): Valeur jarray: [ "Pays1", "Pays2 "," Country3 "]

Ce sont les valeurs correctes!

+0

vous voulez créer un tableau JSON ou si vous voulez l'analyser pour l'affichage dans listview? vous devriez fournir du code. – user370305

Répondre

7

Cela fonctionne dans une application de test simple que je viens de créer ...

ListView list = (ListView) findViewById(...); 
String json = "[\"Country1\",\"Country2\",\"Country3\"]"; 
try { 
     JSONArray array = (JSONArray) new JSONTokener(json).nextValue(); 

     String[] stringarray = new String[array.length()]; 
     for (int i = 0; i < array.length(); i++) { 
      stringarray[i] = array.getString(i); 
     } 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, stringarray); 
     list.setAdapter(adapter); 
} catch (JSONException e) { 
     // handle JSON parsing exceptions... 
} 
+0

cela fonctionne parfaitement, c'est juste une question maintenant d'obtenir le json String du php sur le serveur web, des idées? – EI756