2011-08-23 4 views
2

웹에서 [ "Country1", "Country2", "Country3"] 형식의 간단한 JSON 배열을 가져 오려고합니다. 내 안드로이드 애플 리케이션의 목록보기. 나는이 JSON 배열을 만드는 방법에 얽매이지 않고있다. 애플의 listview로 가져 오는 방법에 대해서 혼란 스러울 뿐이다.Android App : 웹에서 목록보기로 JSON 배열

몇 가지 다른 튜토리얼을 시도했지만 그 중 어느 것도 내 레이아웃과 같은 레이아웃을 사용하지 않습니다.

내 응용 프로그램은 viewflipper를 사용하여 응용 프로그램 전체에서 탭 기반 레이아웃을 항상 볼 수 있도록하므로 자습서 중 아무 것도 내 레이아웃에서 작동하지 않는 것 같습니다.

도움을 주시면 감사하겠습니다.

편집 :

는 여기에 몇 가지 코드입니다, 그래 내가 웹 서비스에서 그것을 분석하고리스트 뷰에 표시하려고합니다.

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 

} 


} 

업데이트 : 아직 작동하지 않습니다. 아래 코드에서 잘못된 아이디어가 있습니까? 로그 캣 의해보고

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 

} 


} 

업데이트, 여기서는 jarray의 값이다 :

08-26 16 : 49 : 07.246 : VERBOSE/애플리케이션 (472)는 jarray 값 : "COUNTRY1", "COUNTRY2 ","Country3 "]

다음은 올바른 값입니다!

+0

당신이 JSON 배열을 만들거나 목록보기에 표시를 구문 분석 할? 몇 가지 코드를 제공해야합니다. – user370305

답변

7

이 내가 방금 만든 간단한 테스트 응용 프로그램에서 작동 ...

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

이것은 완벽하게 작동합니다. 웹 서버의 php에서 json String을 얻는 것, 아이디어가 있습니까? – EI756