简体   繁体   English

从JSON创建ListAdapter

[英]Create ListAdapter from a JSON

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. 我在Android APP中遇到问题:我想从Feed RSS中读取信息,并在某些Android视图中显示它们。 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/ 我正在使用android-async-http1.4.3.jar库将我的APP连接到以下站点: http: android-async-http1.4.3.jar = 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. 通过这种连接,我正在下载XML文件,并使用gson libs将其转换为JSON文件,但是当我在Android手机上尝试使用APP时,却收到了空指针异常。 The class to connect, to get the xml and to transform it into JSON code is the following: 连接,获取xml并将其转换为JSON代码的类如下:

    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: TitleAdapter.java是以下内容:

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. entries ,你传递给您的自定义阵列ArrayAdapter (您仍然可以调用已super.getView()方法(或者你没有重写它),对不对?)看来,你有null值。 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. 如果您使用ArrayAdaptergetView()方法的默认实现,这是一个问题,因为ArrayAdapter会在该方法中调用,默认情况下,对其类型对象(您的情况下为Entry对象toString()toString()方法获取一个String在行中显示。

So make sure the array that you pass to your implementation of the ArrayAdapter doesn't contain null values. 因此,请确保传递给ArrayAdapter的实现的数组包含空值。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM