Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何解析这个json的;标题“&引用;作者&&引用;“小缩略图”;并使用GSON转换器检查json密钥是否存在_Android_Json_Android Recyclerview_Gson_Retrofit - Fatal编程技术网

Android 如何解析这个json的;标题“&引用;作者&&引用;“小缩略图”;并使用GSON转换器检查json密钥是否存在

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": [ {

如何仅在GSON的帮助下解析“标题”、“作者”和“小缩略图”。注意:如果找不到作者和smallThunbnail,则输出应为NULL/notfound。如何在RecyclerViewIn(onBindViewHolder)方法中实现代码。我正在对网络部分进行改造。我已经把代码放在下面了。请帮助我,我是Android开发的新手。先谢谢你

{
  "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();
            }
        });
    }
}