gpt4 book ai didi

java - 使用 GSON 和 Volley 在 Android 上显示 JSON 数据

转载 作者:搜寻专家 更新时间:2023-11-01 07:46:54 25 4
gpt4 key购买 nike

您好,我是 Android 编程的新手,正在尝试学习它。我关注了this教程,它工作正常,但我不知道如何在 ListView 中显示记录。

PostActivity.java 文件来自下面的教程,

package com.kylewbanks.gsonvolleytutorial;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import static android.R.id.list;

public class PostActivity extends Activity {

private static final String ENDPOINT = "https://kylewbanks.com/rest/posts.json";

private RequestQueue requestQueue;
private Gson gson;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_post);

requestQueue = Volley.newRequestQueue(getApplicationContext());
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setDateFormat("M/d/yy hh:mm a");
gson = gsonBuilder.create();

fetchPosts();
}

private void fetchPosts() {
StringRequest request = new StringRequest(Request.Method.GET, ENDPOINT, onPostsLoaded, onPostsError);

requestQueue.add(request);
}

private final Response.Listener<String> onPostsLoaded = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
//Log.i(PostActivity.class.getSimpleName(), response);

List<Post> posts = Arrays.asList(gson.fromJson(response, Post[].class));
//Log.i(PostActivity.class.getSimpleName(), posts.size() + " posts loaded.");

List listview = (List) findViewById(R.id.postListView);

for (Post post : posts) {
//Log.i(PostActivity.class.getSimpleName(), post.ID + ": " + post.title);
}
ArrayAdapter adapter = new ArrayAdapter(this,R.layout.single_post_item, posts);
listview.setAdapter(adapter);

}
};

private final Response.ErrorListener onPostsError = new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(PostActivity.class.getSimpleName(), error.toString());
}
};
}

Post.java

import java.util.Date;
import com.google.gson.annotations.SerializedName;

public class Post {

@SerializedName("id")
long ID;

@SerializedName("date")
Date dateCreated;

String title;
String author;
String url;
String body;

}

activity_post.xml

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".PostActivity">

<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/postListView"
android:layout_alignParentBottom="true" />
</RelativeLayout>

single_post_item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:text="TextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/textView" />
</LinearLayout>

更新错误 1:

:app:processDebugManifest
:app:processDebugResources
AGPBI: {"kind":"error","text":"Error parsing XML: XML or text declaration not at start of entity","sources":[{"file":"C:\\Users\\xxx\\Downloads\\GSONVolleyTutorial-master\\GSONVolleyTutorial-master\\app\\src\\main\\res\\layout\\activity_post.xml","position":{"startLine":0}}],"original":"","tool":"AAPT"}
AGPBI: {"kind":"error","text":"Error parsing XML: XML or text declaration not at start of entity","sources":[{"file":"C:\\Users\\xxx\\Downloads\\GSONVolleyTutorial-master\\GSONVolleyTutorial-master\\app\\src\\main\\res\\layout\\single_post_item.xml","position":{"startLine":0}}],"original":"","tool":"AAPT"}
C:\Users\xxx\Downloads\GSONVolleyTutorial-master\GSONVolleyTutorial-master\app\build\intermediates\res\merged\debug\layout\activity_post.xml:1: error: Error parsing XML: XML or text declaration not at start of entity

C:\Users\xxx\Downloads\GSONVolleyTutorial-master\GSONVolleyTutorial-master\app\build\intermediates\res\merged\debug\layout\single_post_item.xml:1: error: Error parsing XML: XML or text declaration not at start of entity

FAILED

FAILURE: Build failed with an exception.

更新错误2:

C:\Users\xxx\Downloads\GSONVolleyTutorial-master\GSONVolleyTutorial-master\app\src\main\java\com\kylewbanks\gsonvolleytutorial\PostActivity.java:70: error: no suitable constructor found for ArrayAdapter(<anonymous Listener<String>>,int,int,List<String>)
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.single_post_item,R.id.textView, posts_strs);
^
constructor ArrayAdapter.ArrayAdapter(Context,int,int,String[]) is not applicable
(argument mismatch; <anonymous Listener<String>> cannot be converted to Context)
constructor ArrayAdapter.ArrayAdapter(Context,int,int,List<String>) is not applicable
(argument mismatch; <anonymous Listener<String>> cannot be converted to Context)
Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output
1 error

:app:compileDebugJavaWithJavac FAILED

FAILURE: Build failed with an exception.

最佳答案

因为只有一个TextView在您的列表布局中意味着您打算显示单个项目

1.) 创建一个 String arraylist 并向其添加元素

2.) 提及@+id/textView"创建适配器时作为第三个参数

ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects)

public class PostActivity extends Activity {

private static final String ENDPOINT = "https://kylewbanks.com/rest/posts.json";

private RequestQueue requestQueue;
private Gson gson;
private List<String> posts_strs ;

// keep it here for later use in other methods
private List<Post> posts ;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// code

// initialize list
posts_strs = new ArrayList<String>();

// code
}


private final Response.Listener<String> onPostsLoaded = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
//Log.i(PostActivity.class.getSimpleName(), response);

posts = Arrays.asList(gson.fromJson(response, Post[].class));
//Log.i(PostActivity.class.getSimpleName(), posts.size() + " posts loaded.");

List listview = (List) findViewById(R.id.postListView);

for (Post post : posts) {
// add items to list
posts_strs.add( post.ID + ": " + post.title);
//Log.i(PostActivity.class.getSimpleName(), post.ID + ": " + post.title);
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(PostActivity.this,R.layout.single_post_item
,R.id.textView, posts_strs);
// use the textview id posts_strs while creating adapter
listview.setAdapter(adapter);

}
};
// code

}

问题:

1.) 添加<?xml version="1.0" encoding="utf-8"?>在你的顶部 XML布局 activity_postsingle_post_item

2.) 使用 PostActivity.this而不是 this因为this将引用匿名Response.Listener<String>类而不是 PostActivity .

关于java - 使用 GSON 和 Volley 在 Android 上显示 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42185763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com