【问题标题】:Create ListAdapter from a JSON从 JSON 创建 ListAdapter
【发布时间】:2013-02-23 12:47:02
【问题描述】:

我在 Android 应用程序中遇到了一些问题:我想从 Feed RSS 中读取信息并将它们呈现在一些 android 视图中。 我正在使用android-async-http1.4.3.jar 库将我的应用程序连接到此站点:http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&q=http://f1grandprix.motorionline.com/feed/

通过此连接,我正在下载 XML 文件并将其转换为带有 gson 库的 JSON 文件,但是当我尝试将 APP 应用到我的 Android 手机时,我得到了一个空指针异常。用于连接、获取 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();
        }
    });
}

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);
}

}

最后我得到了这个错误:

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)

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

【问题讨论】:

    标签: java android asynchronous gson


    【解决方案1】:

    谁能帮我解决这个问题?

    在您传递给自定义ArrayAdapterentries 数组中(您仍然为此调用super.getView() 方法(或者您没有覆盖它),对吧?)看起来您有null价值观。如果您使用ArrayAdaptergetView() 方法的默认实现,这是一个问题,因为ArrayAdapter 将调用该方法,默认情况下,其类型对象上的toString() 方法(Entry 对象在您的case) 获取String 以显示在行中。

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

    【讨论】:

    • 谢谢!这是一个很好的建议!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-02
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多