解析JSON数据转换成Android的ListView控件 [英] Parse JSON data into Android ListView

查看:112
本文介绍了解析JSON数据转换成Android的ListView控件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直潜伏在这个网站相当长的一段时间了,幸运的是到现在为止我所有的问题都得到了解答。我希望你们中的一些可以在这里阐明我的问题的一些情况。我能顺利拿到一个ListView显示字符串数组 - 但是当我尝试解析JSON数据到一个数组中 - 那么我的程序正义的力量关闭,LogCat中并不能帮助我很多。 Anywho - 这里是code我用

 的String []期刊= {填料};
字符串结果;
JSONArray jArray [];
@覆盖
公共无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    尝试{
  // HTTP POST
            HttpClient的HttpClient的=新DefaultHttpClient();
            HttpPost httppost =新HttpPost(http://xxx.xxx.xxx.xxx/query.php);
            org.apache.http.Htt presponse响应= httpclient.execute(httppost);
            HttpEntity实体= response.getEntity();
            InputStream的是= entity.getContent();


  //转换响应串
            的BufferedReader读卡器=新的BufferedReader(新InputStreamReader的(就是,ISO-8859-1),8);
            StringBuilder的SB =新的StringBuilder();
            串线= NULL;
            而((行= reader.readLine())!= NULL){
                    sb.append(行+\ N);
            }
            is.close();

            结果= sb.toString();

   //我认为这个问题是在这里某处....
            JSONArray jArray =新JSONArray(结果);
            的for(int i = 0; I< jArray.length();我++){
                    的JSONObject json_data = jArray.getJSONObject(ⅰ);
                    期刊[I] = json_data.getString(JournalName);
                    Log.i(log_tag,JournalID:+ json_data.getInt(JournalID)+
                            ,JournalName:+ json_data.getString(JournalName));
            }
    }
    赶上(例外五){
    }

    //还是在这里 - 我知道这code应该被分开,而不是在的onCreate  - 我觉得这就是我一半的问题
    setListAdapter(新ArrayAdapter<字符串>(这一点,R.layout.list_item,期刊));
    ListView的LV = getListView();
 

在此先感谢你们!我AP preciate吧。

  03-07 22:24:33.060:ERROR / AndroidRuntime(7986型):致命异常:主要
03-07 22:24:33.060:ERROR / AndroidRuntime(7986型):java.lang.RuntimeException的:无法启动的活动ComponentInfo {Andrew.Badura.A4A.com/Andrew.Badura.A4A.com.SurvAcademia}:java.lang中.RuntimeException:无法启动活动ComponentInfo {Andrew.Badura.A4A.com/Andrew.Badura.A4A.com.JournalActivity}:显示java.lang.NullPointerException
03-07 22:24:33.060:ERROR / AndroidRuntime(7986型):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
03-07 22:24:33.060:ERROR / AndroidRuntime(7986型):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
03-07 22:24:33.060:ERROR / AndroidRuntime(7986型):在android.app.ActivityThread.access $ 2300(ActivityThread.java:125)
03-07 22:24:33.060:ERROR / AndroidRuntime(7986型):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:2033)
03-07 22:24:33.060:ERROR / AndroidRuntime(7986型):在android.os.Handler.dispatchMessage(Handler.java:99)
03-07 22:24:33.060:ERROR / AndroidRuntime(7986型):在android.os.Looper.loop(Looper.java:123)
03-07 22:24:33.060:ERROR / AndroidRuntime(7986型):在android.app.ActivityThread.main(ActivityThread.java:4627)
03-07 22:24:33.060:ERROR / AndroidRuntime(7986型):在java.lang.reflect.Method.invokeNative(本机方法)
03-07 22:24:33.060:ERROR / AndroidRuntime(7986型):在java.lang.reflect.Method.invoke(Method.java:521)
03-07 22:24:33.060:ERROR / AndroidRuntime(7986型):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868)
03-07 22:24:33.060:ERROR / AndroidRuntime(7986型):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
03-07 22:24:33.060:ERROR / AndroidRuntime(7986型):在dalvik.system.NativeStart.main(本机方法)
03-07 22:24:33.060:ERROR / AndroidRuntime(7986型):java.lang.RuntimeException的:产生的原因无法启动活动ComponentInfo {Andrew.Badura.A4A.com/Andrew.Badura.A4A.com.JournalActivity}:显示java.lang.NullPointerException
03-07 22:24:33.060:ERROR / AndroidRuntime(7986型):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
03-07 22:24:33.060:ERROR / AndroidRuntime(7986型):在android.app.ActivityThread.startActivityNow(ActivityThread.java:2503)
03-07 22:24:33.060:ERROR / AndroidRuntime(7986型):在android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
03-07 22:24:33.060:ERROR / AndroidRuntime(7986型):在android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
03-07 22:24:33.060:ERROR / AndroidRuntime(7986型):在android.widget.TabHost $ IntentContentStrategy.getContentView(TabHost.java:654)
03-07 22:24:33.060:ERROR / AndroidRuntime(7986型):在android.widget.TabHost.setCurrentTab(TabHost.java:326)
03-07 22:24:33.060:ERROR / AndroidRuntime(7986型):在android.widget.TabHost.addTab(TabHost.java:216)
03-07 22:24:33.060:ERROR / AndroidRuntime(7986型):在Andrew.Badura.A4A.com.SurvAcademia.onCreate(SurvAcademia.java:25)
03-07 22:24:33.060:ERROR / AndroidRuntime(7986型):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-07 22:24:33.060:ERROR / AndroidRuntime(7986型):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
03-07 22:24:33.060:ERROR / AndroidRuntime(7986型):11 ...更多
03-07 22:24:33.060:ERROR / AndroidRuntime(7986型):由:显示java.lang.NullPointerException
03-07 22:24:33.060:ERROR / AndroidRuntime(7986型):在java.util.Arrays中的$的ArrayList< INIT>(Arrays.java:49)。
03-07 22:24:33.060:ERROR / AndroidRuntime(7986型):在java.util.Arrays.asList(Arrays.java:171)
03-07 22:24:33.060:ERROR / AndroidRuntime(7986型):在android.widget.ArrayAdapter< INIT>(ArrayAdapter.java:125)
03-07 22:24:33.060:ERROR / AndroidRuntime(7986型):在Andrew.Badura.A4A.com.JournalActivity.onCreate(JournalActivity.java:69)
03-07 22:24:33.060:ERROR / AndroidRuntime(7986型):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-07 22:24:33.060:ERROR / AndroidRuntime(7986型):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
 

解决方案

您可以使用一个开放的API Gson.jar从的Json获取数据。它获取的数据标化的方式......尝试,例如... http://blog.foos-bar.com/2010/08 /parsing-facebook-json.html

I've been lurking this site for quite some time now, fortunately until now all my questions have been answered. I was hoping some of you could shed some light on my problem here. I can successfully get a ListView to display an array of strings -- but when I try to parse JSON data into an array -- Well my program just force closes and LogCat doesn't help me much. Anywho -- here is the code I'm using.

String[] journals = {"Filler"};
String result;
JSONArray jArray[];
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    try{
  //http post
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://xxx.xxx.xxx.xxx/query.php");
            org.apache.http.HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            InputStream is = entity.getContent();


  //convert response to string
            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
            }
            is.close();

            result=sb.toString();

   //I think the problem is somewhere here ....
            JSONArray jArray = new JSONArray(result);
            for(int i=0;i<jArray.length();i++){
                    JSONObject json_data = jArray.getJSONObject(i);
                    journals[i] = json_data.getString("JournalName");
                    Log.i("log_tag","JournalID: "+json_data.getInt("JournalID") +
                            ",JournalName: " + json_data.getString("JournalName"));
            }
    }
    catch (Exception e) {
    }

    //Or here -- I know this code should REALLY be separated and not in onCreate -- I feel like that's half my problem
    setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, journals));
    ListView lv = getListView();

Thanks in advance guys! I appreciate it.

03-07 22:24:33.060: ERROR/AndroidRuntime(7986): FATAL EXCEPTION: main
03-07 22:24:33.060: ERROR/AndroidRuntime(7986): java.lang.RuntimeException: Unable to start activity ComponentInfo{Andrew.Badura.A4A.com/Andrew.Badura.A4A.com.SurvAcademia}: java.lang.RuntimeException: Unable to start activity ComponentInfo{Andrew.Badura.A4A.com/Andrew.Badura.A4A.com.JournalActivity}: java.lang.NullPointerException
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.os.Looper.loop(Looper.java:123)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.app.ActivityThread.main(ActivityThread.java:4627)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at java.lang.reflect.Method.invokeNative(Native Method)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at java.lang.reflect.Method.invoke(Method.java:521)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at dalvik.system.NativeStart.main(Native Method)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986): Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{Andrew.Badura.A4A.com/Andrew.Badura.A4A.com.JournalActivity}: java.lang.NullPointerException
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.app.ActivityThread.startActivityNow(ActivityThread.java:2503)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:654)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.widget.TabHost.setCurrentTab(TabHost.java:326)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.widget.TabHost.addTab(TabHost.java:216)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at Andrew.Badura.A4A.com.SurvAcademia.onCreate(SurvAcademia.java:25)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     ... 11 more
03-07 22:24:33.060: ERROR/AndroidRuntime(7986): Caused by: java.lang.NullPointerException
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at java.util.Arrays$ArrayList.<init>(Arrays.java:49)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at java.util.Arrays.asList(Arrays.java:171)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:125)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at Andrew.Badura.A4A.com.JournalActivity.onCreate(JournalActivity.java:69)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)

解决方案

you can use a open API Gson.jar to fetch the data from Json.. It fetch data in standarized manner... try it for example... http://blog.foos-bar.com/2010/08/parsing-facebook-json.html

这篇关于解析JSON数据转换成Android的ListView控件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆