Retrofit2 @Query и манипуляции с URL - PullRequest
0 голосов
/ 25 мая 2020

Я делаю простое приложение, в котором пользователь сможет искать книги по их имени с API-интерфейсом google.com book. А пока я хочу sh представить список книг с android в названии. Я делаю это с помощью Retrofit2 и RecycleView, но ничего не отображается. Я предполагаю, что эта проблема находится в моем запросе @query в RetroFit2, но не знаю, как решить эту проблему самостоятельно

my MainActivity:

public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;
List<KnjigaModel> listaKnjiga;
RecicleViewKnjiga recicleViewKnjiga;
Button button;
KnjigaApi knjigaApi;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    button = findViewById(R.id.dugme_za_pretragu);
    uzmiKomentare();
}

public void uzmiKomentare() {
    Gson gson = new GsonBuilder().serializeNulls().create();
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("https://www.googleapis.com/")
            .addConverterFactory(GsonConverterFactory.create(gson))
            .build();
    knjigaApi = retrofit.create(KnjigaApi.class);
    Call<List<KnjigaModel>> pozivZaKomentare = knjigaApi.getKnjige("android");

    pozivZaKomentare.enqueue(new Callback<List<KnjigaModel>>() {
        @Override
        public void onResponse(Call<List<KnjigaModel>> call, Response<List<KnjigaModel>> response) {
            if (!response.isSuccessful()) {
                return;
            }
            generateRecycleView(response.body());
        }

        @Override
        public void onFailure(Call<List<KnjigaModel>> call, Throwable t) {

        }
    });
}
private void generateRecycleView(List<KnjigaModel> knjige) {
    listaKnjiga = new ArrayList<>();
    recyclerView = findViewById(R.id.recycle_view);
    recicleViewKnjiga = new RecicleViewKnjiga(this, knjige);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    recyclerView.setAdapter(recicleViewKnjiga);
    recicleViewKnjiga.notifyDataSetChanged();
}

}

и мой интерфейс api:

public interface KnjigaApi {
@GET("books/v1/volumes{knjiga}&filter=paid-ebooks&maxResults=40")
Call<List<KnjigaModel>> getKnjige(@Path("knjiga") String knjiga);

}

my recycleview:

public class RecicleViewKnjiga extends RecyclerView.Adapter<RecicleViewKnjiga.KomentariViewHolder> {
private List<KnjigaModel> listaKnjiga;
private Context context;

public RecicleViewKnjiga(Context context, List<KnjigaModel> listaKnjiga) {
    this.listaKnjiga = listaKnjiga;
    this.context = context;
}


@Override
public KomentariViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    Context context = parent.getContext();
    LayoutInflater inflater = LayoutInflater.from(context);

    // Inflate the custom layout
    View postView = inflater.inflate(R.layout.single_item, parent, false);

    // Return a new holder instance
    return new KomentariViewHolder(postView);
}

@Override
public void onBindViewHolder(KomentariViewHolder holder, int position) {
    KnjigaModel knjige = listaKnjiga.get(position);
    holder.naslovKnjige.setText(knjige.getImeKnjige());
    holder.imeAutora.setText(knjige.getImeAutora());
    Glide.with(context)
            .load(knjige.getSlikaKnjige())
            .into(holder.slikaKnjige);
}

@Override
public int getItemCount() {
    return listaKnjiga.size();
}


public class KomentariViewHolder extends RecyclerView.ViewHolder {
    private TextView naslovKnjige;
    private TextView imeAutora;
    private ImageView slikaKnjige;


    public KomentariViewHolder(View itemView) {
        super(itemView);

        naslovKnjige = itemView.findViewById(R.id.ime_knjige);
        imeAutora = itemView.findViewById(R.id.autor_knjige);
        slikaKnjige = itemView.findViewById(R.id.sika_korica);
    }
}

} и, наконец, мой класс модели:

public class KnjigaModel {
@SerializedName("title")
private String imeKnjige;
@SerializedName("authors")
private String imeAutora;
@SerializedName("thumbnail")
private String slikaKnjige;

public KnjigaModel(String imeKnjige, String imeAutora,String slikaKnjige) {
    this.imeKnjige = imeKnjige;
    this.imeAutora = imeAutora;
    this.slikaKnjige = slikaKnjige;
}

public String getImeKnjige() {
    return imeKnjige;
}

public String getImeAutora() {
    return imeAutora;
}

public String getSlikaKnjige() {
    return slikaKnjige;
}

}

...