如何解决尝试在 android studio 的列表视图中显示解析的 JSON 对象
我正在尝试显示从 URI 中获取的已解析 JSON 对象,并在 Android 应用程序中以列表样式格式显示它。
我可以在 toString() 中独立地显示模型中对象的属性,但目的是让这些属性中的每一个都以列出的样式显示。
我正在使用 Volley 来尝试做到这一点。
在 MainActivity - 带有 onResponse 的 callService 函数:
public void callService(View v)
{
// get TextView for displaying result
final TextView outputTextView = (TextView) findViewById(R.id.outputTextView);
try
{
// make a string request (JSON request an alternative)
RequestQueue queue = Volley.newRequestQueue(this);
Log.d(TAG,"Making request");
try
{
StringRequest strObjRequest = new StringRequest(Request.Method.POST,SERVICE_URI,new Response.Listener<String>()
{
@Override
public void onResponse(String response)
{
// parse resulting string containing JSON to Greeting object
Type listType = new Typetoken<List<Model>>() {}.getType();
List<Model> yourList = new Gson().fromJson(response.toString(),listType);
// This displays the toString()
// Model model = new Gson().fromJson(response,Model.class);
// outputTextView.setText(model.toString());
// Log.d(TAG,"displaying data" + model.toString());
Customlistadapter adapter = new Customlistadapter(this,yourList);
ListView listView = (ListView) findViewById(R.id.list);
listView.setAdapter(adapter);
}
},new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error)
{
outputTextView.setText(error.toString());
Log.d(TAG,"Error" + error.toString());
}
});
queue.add(strObjRequest); // can have multiple in a queue,and can cancel
}
catch (Exception e1)
{
Log.d(TAG,e1.toString());
outputTextView.setText(e1.toString());
}
}
catch (Exception e2)
{
Log.d(TAG,e2.toString());
outputTextView.setText(e2.toString());
}
}
型号:
package com.example.albumtrackr;
// MODEL CLASS - NAME WILL BE CHANGED
public class Model
{
private Integer id;
private String artist;
private String name;
private String thumbnail;
private Object lists;
public String toString()
{
return "Artist Name: " + artist + "/n" + "Album Name: " + name;
}
}
JSON 对象:
还有 logcat 错误:
2021-03-24 21:31:57.762 31733-31733/com.example.albumtrackr E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.albumtrackr,PID: 31733
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
at com.google.gson.Gson.fromJson(Gson.java:939)
at com.google.gson.Gson.fromJson(Gson.java:892)
at com.google.gson.Gson.fromJson(Gson.java:841)
at com.example.albumtrackr.MainActivity$2.onResponse(MainActivity.java:96)
at com.example.albumtrackr.MainActivity$2.onResponse(MainActivity.java:89)
at com.android.volley.toolBox.StringRequest.deliverResponse(StringRequest.java:82)
at com.android.volley.toolBox.StringRequest.deliverResponse(StringRequest.java:29)
at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:102)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:350)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:80)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61)
at com.google.gson.Gson.fromJson(Gson.java:927)
at com.google.gson.Gson.fromJson(Gson.java:892)
at com.google.gson.Gson.fromJson(Gson.java:841)
at com.example.albumtrackr.MainActivity$2.onResponse(MainActivity.java:96)
at com.example.albumtrackr.MainActivity$2.onResponse(MainActivity.java:89)
at com.android.volley.toolBox.StringRequest.deliverResponse(StringRequest.java:82)
at com.android.volley.toolBox.StringRequest.deliverResponse(StringRequest.java:29)
at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:102)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
我对 android 开发很陌生,任何帮助将不胜感激!
谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。