从JSON创建ListAdapter [英] Create ListAdapter from a JSON
问题描述
我得到了一些问题,在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到我的Android手机,我得到一个空指针异常。本类连接,以获得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 customArrayAdapter
(for which you still call thesuper.getView()
method(or you didn't overriden it), right?) it appears that you havenull
values. This is a problem if you use the default implementation ofArrayAdapter
'sgetView()
method, asArrayAdapter
will call in that method, by default, thetoString()
method on its type object(Entry
object in your case) to obtain aString
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屋!