Android Listview没有填充JSON字符串

时间:2011-08-25 21:17:31

标签: android listview

我有一个应用程序,它有一个viewflipper,可以在整个应用程序中随时查看标签,以及标签下方的列表视图。我正在尝试使用来自Web服务器的JSON字符串填充列表视图,Web服务器以下列格式提供JSON字符串:[“X”,“Y”,“Z”] 所以基本上,我希望将列表视图列在不同行的每个字符串列表中。

应用程序启动正常,列表视图似乎为空。 这是我使用的教程:http://inchoo.net/mobile-development/android-development/simple-android-json-parsing-example-with-output-into-listactivity/ 以下是主要启动活动的完整代码:

public class Activity extends TabActivity implements OnClickListener {

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




    @SuppressWarnings({ "deprecation", "unchecked", "rawtypes" })
    @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,this.fetch());



       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> fetch()
    {
        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) {




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

            } 

        } 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

    }


}

Log Cat中的错误:

 08-25 21:38:15.742: ERROR/InputDispatcher(81): channel '40a14e38 com.app.android/com.app.android.Activity (server)' ~ Consumer closed input channel or an error occurred.  events=0x8

更新,以下是Logcat报告的jArray值:

08-26 16:49:07.246:VERBOSE / app(472):jarray值:[“Country1”,“Country2”,“Country3”]

这些是正确的值!

确定进入循环,退出输出以下内容:

08-26 16:59:55.756: WARN/System.err(506): org.json.JSONException: Value Country1 at 0 of type java.lang.String cannot be converted to JSONObject
08-26 16:59:55.756: WARN/System.err(506):     at org.json.JSON.typeMismatch(JSON.java:96)
08-26 16:59:55.766: WARN/System.err(506):     at org.json.JSONArray.getJSONObject(JSONArray.java:484)
08-26 16:59:55.775: WARN/System.err(506):     at com.app.android.Activity.fetch(Activity.java:165)
08-26 16:59:55.775: WARN/System.err(506):     at com.app.android.Activity.onCreate(eActivity.java:93)
08-26 16:59:55.786: WARN/System.err(506):     at android.app.Activity.performCreate(Activity.java:4397)
08-26 16:59:55.786: WARN/System.err(506):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
08-26 16:59:55.795: WARN/System.err(506):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1779)
08-26 16:59:55.806: WARN/System.err(506):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1831)
08-26 16:59:55.806: WARN/System.err(506):     at android.app.ActivityThread.access$500(ActivityThread.java:122)
08-26 16:59:55.815: WARN/System.err(506):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1024)
08-26 16:59:55.815: WARN/System.err(506):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-26 16:59:55.826: WARN/System.err(506):     at android.os.Looper.loop(Looper.java:132)
08-26 16:59:55.826: WARN/System.err(506):     at android.app.ActivityThread.main(ActivityThread.java:4123)
08-26 16:59:55.836: WARN/System.err(506):     at java.lang.reflect.Method.invokeNative(Native Method)
08-26 16:59:55.836: WARN/System.err(506):     at java.lang.reflect.Method.invoke(Method.java:491)
08-26 16:59:55.846: WARN/System.err(506):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
08-26 16:59:55.855: WARN/System.err(506):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
08-26 16:59:55.855: WARN/System.err(506):     at dalvik.system.NativeStart.main(Native Method)

1 个答案:

答案 0 :(得分:0)

我认为您的问题可能是您的网址只是“JSON.php”。您没有指定它所驻留的服务器(http://somewebsite.com/JSON.php)。设置调试点并逐步执行时会发生什么?什么是Twitter URL创建后的价值?我的猜测是它无法达到这个“JSON.php”。

编辑:试试这个:

而不是使用

JSONObject jobj = jArray.getJSONObject(i);

尝试

String country = jArray.getString(i);
listItems.add(country); 
相关问题