从JSON创建ListAdapter [英] Create ListAdapter from a JSON

查看:257
本文介绍了从JSON创建ListAdapter的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我得到了一些问题,在Android应用:我想阅读供稿RSS和present他们一些Android设备上查看信息。
我使用了 Android的异步http1.4.3.jar 库到我的应用程序连接到这个网站:<一href=\"http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&q=http://f1grandprix.motorionline.com/feed/\" rel=\"nofollow\">http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&q=http://f1grandprix.motorionline.com/feed/

通过这种连接,我下载了XML文件,我把它变成与GSON库一个JSON文件,但是当我尝试了APP到我的Andr​​oid手机,我得到一个空指针异常。本类连接,以获得XML和将其转化为JSON code是以下内容:

 私人无效loadTitle(){
    字符串的URL = \"http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&q=http://f1grandprix.motorionline.com/feed/\";    AsyncHttpClient客户端=新AsyncHttpClient();    client.get(网址,新AsyncHtt presponseHandler(){
        @覆盖
        公共无效的onSuccess(字符串文本){
            super.onSuccess(文本);            GSON德codeR =新GSON();            JsonResponse JR =去coder.fromJson(文字,JsonResponse.class);            输入[]项= jr.responseData.feed.entries;
            的for(int i = 0; I&LT; entries.length;我++){
                Log.d(NET,伊尔TITOLO德拉+ I +项E:+条目[I] .title伪);
            }
            最终的ListView lv_title =(ListView控件)findViewById(R.id.lv_title);
            // ListAdapter la_title =新TitleAdapter(MainActivity.this,项);
            //Log.d(\"LIST_ADAPTER,Caricato correttamente金正日名单适配器:+ la_title);
            //lv_title.setAdapter(la_title);
            lv_title.setAdapter(新TitleAdapter(MainActivity.this,参赛作品));
            pleaseWait.hide();
        }        @覆盖
        公共无效onFailure处(Throwable的为arg0,ARG1字符串){
            super.onFailure(为arg0,ARG1);
            Log.d(不及格,失败);
            pleaseWait.hide();
        }
    });
}

该TitleAdapter.java如下:

 公共类TitleAdapter扩展ArrayAdapter&LT;钥匙进入GT; {公共TitleAdapter(上下文的背景下,输入[]标题){
    超(背景下,R.layout.list_item,R.id.lv_title,标题);
}

}

最后我得到这个错误:

  12月2日至23日:46:05.525:E / AndroidRuntime(4577):致命异常:主要
十二月2日至23日:46:05.525:E / AndroidRuntime(4577):显示java.lang.NullPointerException
十二月2日至23日:46:05.525:E / AndroidRuntime(4577):在android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:355)
十二月2日至23日:46:05.525:E / AndroidRuntime(4577):在android.widget.ArrayAdapter.getView(ArrayAdapter.java:323)
十二月2日至23日:46:05.525:E / AndroidRuntime(4577):在android.widget.AbsListView.obtainView(AbsListView.java:1495)
十二月2日至23日:46:05.525:E / AndroidRuntime(4577):在android.widget.ListView.measureHeightOfChildren(ListView.java:1216)
十二月2日至23日:46:05.525:E / AndroidRuntime(4577):在android.widget.ListView.onMeasure(ListView.java:1127)
十二月2日至23日:46:05.525:E / AndroidRuntime(4577):在android.view.View.measure(View.java:8335)
十二月2日至23日:46:05.525:E / AndroidRuntime(4577):在android.widget.RelativeLayout.measureChild(RelativeLayout.java:566)
十二月2日至23日:46:05.525:E / AndroidRuntime(4577):在android.widget.RelativeLayout.onMeasure(RelativeLayout.java:381)
十二月2日至23日:46:05.525:E / AndroidRuntime(4577):在android.view.View.measure(View.java:8335)
十二月2日至23日:46:05.525:E / AndroidRuntime(4577):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
十二月2日至23日:46:05.525:E / AndroidRuntime(4577):在android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
十二月2日至23日:46:05.525:E / AndroidRuntime(4577):在android.view.View.measure(View.java:8335)
十二月2日至23日:46:05.525:E / AndroidRuntime(4577):在android.widget.LinearLayout.measureVertical(LinearLayout.java:531)
十二月2日至23日:46:05.525:E / AndroidRuntime(4577):在android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
十二月2日至23日:46:05.525:E / AndroidRuntime(4577):在android.view.View.measure(View.java:8335)
十二月2日至23日:46:05.525:E / AndroidRuntime(4577):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
十二月2日至23日:46:05.525:E / AndroidRuntime(4577):在android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
十二月2日至23日:46:05.525:E / AndroidRuntime(4577):在android.view.View.measure(View.java:8335)
十二月2日至23日:46:05.525:E / AndroidRuntime(4577):在android.view.ViewRoot.performTraversals(ViewRoot.java:843)
十二月2日至23日:46:05.525:E / AndroidRuntime(4577):在android.view.ViewRoot.handleMessage(ViewRoot.java:1892)
十二月2日至23日:46:05.525:E / AndroidRuntime(4577):在android.os.Handler.dispatchMessage(Handler.java:99)
十二月2日至23日:46:05.525:E / AndroidRuntime(4577):在android.os.Looper.loop(Looper.java:130)
十二月2日至23日:46:05.525:E / AndroidRuntime(4577):在android.app.ActivityThread.main(ActivityThread.java:3835)
十二月2日至23日:46:05.525:E / AndroidRuntime(4577):在java.lang.reflect.Method.invokeNative(本机方法)
十二月2日至23日:46:05.525:E / AndroidRuntime(4577):在java.lang.reflect.Method.invoke(Method.java:507)
十二月2日至23日:46:05.525:E / AndroidRuntime(4577):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:864)
十二月2日至23日:46:05.525:E / AndroidRuntime(4577):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
十二月2日至23日:46:05.525:E / AndroidRuntime(4577):在dalvik.system.NativeStart.main(本机方法)

有人可以帮我解决这个问题?
谢谢!


解决方案

  

有人可以帮助我解决这个问题?


在传递给您的自定义的阵列 ArrayAdapter (您仍然称之为 super.getView()方法(或你没有重写吧),对不对?)看来,你有值。这是一个问题,如果你使用 ArrayAdapter getView()方法的默认实现,如 ArrayAdapter 将在方法调用,默认情况下,的toString()它的类型对象办法(进入在你的案件对象)来获得字符串显示一行。

因此​​,请确保您传递给你的落实 ArrayAdapter 包含空值的数组。

I'm getting some problem in an Android APP: I want to read info from a Feed RSS and present them in some android view. I'm using the android-async-http1.4.3.jar libs to connect my APP to this site: http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&q=http://f1grandprix.motorionline.com/feed/

With this connection I'm downloading the XML file and I'm transforming it into a JSON file with gson libs, but when i try the APP to my Android Phone I'm getting a Null Pointer Exception. The class to connect, to get the xml and to transform it into JSON code is the following:

    private void loadTitle() {
    String URL = "http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&q=http://f1grandprix.motorionline.com/feed/";

    AsyncHttpClient client = new AsyncHttpClient();

    client.get(URL, new AsyncHttpResponseHandler() {
        @Override
        public void onSuccess(String text) {
            super.onSuccess(text);

            Gson decoder = new Gson();

            JsonResponse jr = decoder.fromJson(text, JsonResponse.class);

            Entry[] entries = jr.responseData.feed.entries;
            for (int i = 0; i < entries.length; i++) {
                Log.d("NET", "Il titolo della " + i + " entry è: " + entries[i].title);
            }


            final ListView lv_title = (ListView) findViewById(R.id.lv_title);
            //ListAdapter la_title = new TitleAdapter(MainActivity.this, entries);
            //Log.d("LIST_ADAPTER", "Caricato correttamente il list adaptor: "+ la_title);
            //lv_title.setAdapter(la_title);
            lv_title.setAdapter(new TitleAdapter(MainActivity.this, entries));
            pleaseWait.hide();
        }

        @Override
        public void onFailure(Throwable arg0, String arg1) {
            super.onFailure(arg0, arg1);
            Log.d("FAIL", "Failure");
            pleaseWait.hide();
        }
    });
}

The TitleAdapter.java is the following:

public class TitleAdapter extends ArrayAdapter<Entry> {

public TitleAdapter(Context context, Entry[] title) {
    super(context, R.layout.list_item, R.id.lv_title, title);
}

}

And finally I'm getting this error:

02-23 12:46:05.525: E/AndroidRuntime(4577): FATAL EXCEPTION: main
02-23 12:46:05.525: E/AndroidRuntime(4577): java.lang.NullPointerException
02-23 12:46:05.525: E/AndroidRuntime(4577):     at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:355)
02-23 12:46:05.525: E/AndroidRuntime(4577):     at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323)
02-23 12:46:05.525: E/AndroidRuntime(4577):     at android.widget.AbsListView.obtainView(AbsListView.java:1495)
02-23 12:46:05.525: E/AndroidRuntime(4577):     at android.widget.ListView.measureHeightOfChildren(ListView.java:1216)
02-23 12:46:05.525: E/AndroidRuntime(4577):     at android.widget.ListView.onMeasure(ListView.java:1127)
02-23 12:46:05.525: E/AndroidRuntime(4577):     at android.view.View.measure(View.java:8335)
02-23 12:46:05.525: E/AndroidRuntime(4577):     at android.widget.RelativeLayout.measureChild(RelativeLayout.java:566)
02-23 12:46:05.525: E/AndroidRuntime(4577):     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:381)
02-23 12:46:05.525: E/AndroidRuntime(4577):     at android.view.View.measure(View.java:8335)
02-23 12:46:05.525: E/AndroidRuntime(4577):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
02-23 12:46:05.525: E/AndroidRuntime(4577):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
02-23 12:46:05.525: E/AndroidRuntime(4577):     at android.view.View.measure(View.java:8335)
02-23 12:46:05.525: E/AndroidRuntime(4577):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:531)
02-23 12:46:05.525: E/AndroidRuntime(4577):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
02-23 12:46:05.525: E/AndroidRuntime(4577):     at android.view.View.measure(View.java:8335)
02-23 12:46:05.525: E/AndroidRuntime(4577):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
02-23 12:46:05.525: E/AndroidRuntime(4577):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
02-23 12:46:05.525: E/AndroidRuntime(4577):     at android.view.View.measure(View.java:8335)
02-23 12:46:05.525: E/AndroidRuntime(4577):     at android.view.ViewRoot.performTraversals(ViewRoot.java:843)
02-23 12:46:05.525: E/AndroidRuntime(4577):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1892)
02-23 12:46:05.525: E/AndroidRuntime(4577):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-23 12:46:05.525: E/AndroidRuntime(4577):     at android.os.Looper.loop(Looper.java:130)
02-23 12:46:05.525: E/AndroidRuntime(4577):     at android.app.ActivityThread.main(ActivityThread.java:3835)
02-23 12:46:05.525: E/AndroidRuntime(4577):     at java.lang.reflect.Method.invokeNative(Native Method)
02-23 12:46:05.525: E/AndroidRuntime(4577):     at java.lang.reflect.Method.invoke(Method.java:507)
02-23 12:46:05.525: E/AndroidRuntime(4577):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
02-23 12:46:05.525: E/AndroidRuntime(4577):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
02-23 12:46:05.525: E/AndroidRuntime(4577):     at dalvik.system.NativeStart.main(Native Method)

Can someone help me to fix this problem? Thank you!

解决方案

Can someone help me to fix this problem?

In the entries array that you pass to your custom ArrayAdapter(for which you still call the super.getView() method(or you didn't overriden it), right?) it appears that you have null values. This is a problem if you use the default implementation of ArrayAdapter's getView() method, as ArrayAdapter will call in that method, by default, the toString() method on its type object(Entry object in your case) to obtain a String to show in the row.

So make sure the array that you pass to your implementation of the ArrayAdapter doesn't contain null values.

这篇关于从JSON创建ListAdapter的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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