Android 如何解析这个json的;标题“&引用;作者&&引用;“小缩略图”;并使用GSON转换器检查json密钥是否存在
如何仅在GSON的帮助下解析“标题”、“作者”和“小缩略图”。注意:如果找不到作者和smallThunbnail,则输出应为NULL/notfound。如何在RecyclerViewIn(onBindViewHolder)方法中实现代码。我正在对网络部分进行改造。我已经把代码放在下面了。请帮助我,我是Android开发的新手。先谢谢你Android 如何解析这个json的;标题“&引用;作者&&引用;“小缩略图”;并使用GSON转换器检查json密钥是否存在,android,json,android-recyclerview,gson,retrofit,Android,Json,Android Recyclerview,Gson,Retrofit,如何仅在GSON的帮助下解析“标题”、“作者”和“小缩略图”。注意:如果找不到作者和smallThunbnail,则输出应为NULL/notfound。如何在RecyclerViewIn(onBindViewHolder)方法中实现代码。我正在对网络部分进行改造。我已经把代码放在下面了。请帮助我,我是Android开发的新手。先谢谢你 { "kind": "books#volumes", "items": [ {
{
"kind": "books#volumes",
"items": [
{
"id": "t4rgAAACAZAJ",
"volumeInfo": {
"title": "Harry Review",
"authors": [
"International ISBN Agency"
],
"imageLinks": {
"smallThumbnail": "http://books.google.com/books/content?id=t5rgAAAAMAAJ&printsec=frontcover&img=1&zoom=5&source=gbs_api",
}
}
},
{
"id": "t5rgAAAAMAAJ",
"volumeInfo": {
"title": "ISBN Review",
"authors": [
],
"imageLinks": {
}
}
}
]
}
如何在下面的代码中实现它
图书班
package com.example.retrofitbook;
import java.util.List;
public class Book {
private String title;
private List<Author> authors;
Imagelink imageLinks;
public Book(String title, List<Author> authors, Imagelink imageLinks) {
this.title = title;
this.authors = authors;
this.imageLinks = imageLinks;
}
public String getTitle() {
return title;
}
public List<Author> getAuthors() {
return authors;
}
public Imagelink getImageLinks() {
return imageLinks;
}
}
Imagelink类
public class Imagelink {
private String smallThumbnail;
public Imagelink(String smallThumbnail) {
this.smallThumbnail = smallThumbnail;
}
public String getSmallThumbnail() {
return smallThumbnail;
}
}
循环水泵
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {
private Context mContext;
private List<Book> mData;
public RecyclerViewAdapter(Context mContext, List<Book> mData) {
this.mContext = mContext;
this.mData = mData;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view;
LayoutInflater inflater = LayoutInflater.from(mContext);
view = inflater.inflate(R.layout.book_raw , parent , false);
final MyViewHolder viewHolder = new MyViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int i) {
Book book = mData.get(i);
holder.tvTitle.setText(book.getTitle());
Glide.with(mContext).load(book.getImageLinks().getSmallThumbnail()).into(holder.ivThumbnail);
}
@Override
public int getItemCount() {
return mData.size();
}
public static class MyViewHolder extends RecyclerView.ViewHolder {
ImageView ivThumbnail ;
TextView tvTitle , tvAuthor;
LinearLayout container ;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
ivThumbnail = itemView.findViewById(R.id.cover_image);
tvTitle = itemView.findViewById(R.id.book_title);
tvAuthor = itemView.findViewById(R.id.author);
container = itemView.findViewById(R.id.container);
}
}
}
公共类RecycleServiceAdapter扩展了RecyclerView.Adapter{
私有上下文;
私有列表数据;
公共RecycleServiceAdapter(上下文mContext,列表mData){
this.mContext=mContext;
this.mData=mData;
}
@非空
@凌驾
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
视图;
LayoutFlater充气机=LayoutFlater.from(mContext);
视图=充气机。充气(R.layout.book\u原始、父级、假);
最终MyViewHolder viewHolder=新MyViewHolder(视图);
返回视图持有者;
}
@凌驾
public void onBindViewHolder(@NonNull MyViewHolder,int i){
Book Book=mData.get(i);
holder.tvTitle.setText(book.getTitle());
Glide.with(mContext).load(book.getImageLinks().getSmallThumbnail())到(holder.ivThumbnail)中;
}
@凌驾
public int getItemCount(){
返回mData.size();
}
公共静态类MyViewHolder扩展了RecyclerView.ViewHolder{
图像视图;
TextView tvTitle,tvAuthor;
线性布局集装箱;
公共MyViewHolder(@NonNull View itemView){
超级(项目视图);
ivThumbnail=itemView.findViewById(R.id.cover\u图像);
tvTitle=itemView.findviewbyd(R.id.book\u title);
tvAuthor=itemView.findViewById(R.id.author);
container=itemView.findviewbyd(R.id.container);
}
}
}
MyWebService
public interface MyWebService {
String BASE_URL = "https://www.googleapis.com/books/";
Retrofit retrofit = new Retrofit.Builder().baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
@GET("v1/volumes")
Call<List<Book>> getApi (@Query("q") String str);
}
公共接口MyWebService{
字符串BASE_URL=”https://www.googleapis.com/books/";
改装改装=新改装.Builder().baseUrl(基本URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
@获取(“v1/卷”)
调用getApi(@Query(“q”)String str);
}
主要活动
public class MainActivity extends AppCompatActivity {
MyWebService nWebService;
private String text;
ArrayList<Book> mBooks= new ArrayList<>();
private RecyclerView mRecycleView;
private RecyclerViewAdapter mAdapter;
TextView emptyView;
ProgressBar loadingIndicator;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Find the reference to the progressbar
loadingIndicator = findViewById(R.id.loading_progress);
emptyView = findViewById(R.id.empty_view);
mRecycleView= findViewById(R.id.recycler_list);
mRecycleView.setHasFixedSize(true);
LinearLayoutManager manager = new LinearLayoutManager(this);
mRecycleView.setLayoutManager(manager);
nWebService = MyWebService.retrofit.create(MyWebService.class);
loadJson();
}
private void loadJson() {
Call<List<Book>> call = nWebService.getApi();
call.enqueue(new Callback<List<Book>>() {
@Override
public void onResponse(Call<List<Book>> call, Response<List<Book>> response) {
mBooks= new ArrayList<>(response.body());
mAdapter = new RecyclerViewAdapter(MainActivity.this, mBooks);
mRecycleView.setAdapter(mAdapter);
Toast.makeText(getApplicationContext(), "SUCCESS", Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(Call<List<Book>> call, Throwable t) {
Toast.makeText(getApplicationContext(), "Failure", Toast.LENGTH_SHORT).show();
}
});
}
}
public类MainActivity扩展了AppCompatActivity{
MyWebService-nWebService;
私有字符串文本;
ArrayList mBooks=新的ArrayList();
私人回收视图mRecycleView;
私人回收设施;
文本视图清空视图;
进度条加载指示器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//查找对progressbar的引用
loadingIndicator=findViewById(R.id.加载进度);
emptyView=findViewById(R.id.empty\u视图);
mRecycleView=findviewbyd(R.id.recycler\u列表);
mRecycleView.setHasFixedSize(true);
LinearLayoutManager=新的LinearLayoutManager(此);
mRecycleView.setLayoutManager(管理器);
nWebService=MyWebService.Reformation.create(MyWebService.class);
loadJson();
}
私有void loadJson(){
Call Call=nWebService.getApi();
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
mBooks=newArrayList(response.body());
mAdapter=新的回收服务适配器(MainActivity.this,mBooks);
mRecycleView.setAdapter(mAdapter);
Toast.makeText(getApplicationContext(),“SUCCESS”,Toast.LENGTH\u SHORT.show();
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Toast.makeText(getApplicationContext(),“Failure”,Toast.LENGTH_SHORT.show();
}
});
}
}
public class MainActivity extends AppCompatActivity {
MyWebService nWebService;
private String text;
ArrayList<Book> mBooks= new ArrayList<>();
private RecyclerView mRecycleView;
private RecyclerViewAdapter mAdapter;
TextView emptyView;
ProgressBar loadingIndicator;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Find the reference to the progressbar
loadingIndicator = findViewById(R.id.loading_progress);
emptyView = findViewById(R.id.empty_view);
mRecycleView= findViewById(R.id.recycler_list);
mRecycleView.setHasFixedSize(true);
LinearLayoutManager manager = new LinearLayoutManager(this);
mRecycleView.setLayoutManager(manager);
nWebService = MyWebService.retrofit.create(MyWebService.class);
loadJson();
}
private void loadJson() {
Call<List<Book>> call = nWebService.getApi();
call.enqueue(new Callback<List<Book>>() {
@Override
public void onResponse(Call<List<Book>> call, Response<List<Book>> response) {
mBooks= new ArrayList<>(response.body());
mAdapter = new RecyclerViewAdapter(MainActivity.this, mBooks);
mRecycleView.setAdapter(mAdapter);
Toast.makeText(getApplicationContext(), "SUCCESS", Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(Call<List<Book>> call, Throwable t) {
Toast.makeText(getApplicationContext(), "Failure", Toast.LENGTH_SHORT).show();
}
});
}
}