[英]Download an image using Retrofit and Glide
我想使用 recyclerView 將來自https://picsum.photos/ 的圖像顯示到 imageView 中。 請注意,“https://picsum.photos/200”會為您提供一個隨機方形 (200x200) 圖像。 我不確定我是否正確使用 Glide 和改造(對於帶有鏈接的 arraylist,它工作得很好)。 我感謝任何提示。 謝謝! 編輯:鏈接到所有代碼的回購: https : //github.com/LightingTT/RecycleViewPictures
這是我的 ApiService:
public interface ApiService {
@GET("200/")
Call<List<Pictures>> getFile();
Api客戶端:
public class ApiClient {
public static String BASE_URL = "https://picsum.photos/";
private static Retrofit retrofit;
public static Retrofit getClient(){
if(retrofit == null){
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
對象類:
public class Pictures {
@SerializedName("picture")
private String picturesUrl;
public Pictures (String picturesUrl)
{
this.picturesUrl = picturesUrl;
}
public String getImageUrl() {
return picturesUrl;
}
適配器:
public class MyRecycleAdapter extends RecyclerView.Adapter<MyRecycleAdapter.ViewHolderClass> {
private static final String TAG = "MainActivity";
private Context context;
private List<Pictures> imageList;
//Constructor
public MyRecycleAdapter(Context context, List<Pictures> imageList)
{
this.context = context;
this.imageList = imageList;
}
//
public void setMyRecycleAdapter(List<Pictures> imageList)
{
this.imageList = imageList;
notifyDataSetChanged();
}
@NonNull
@Override
public ViewHolderClass onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.single_picture_view, parent, false);
ViewHolderClass linearViewHolderClass = new ViewHolderClass(view);
return linearViewHolderClass;
}
@Override
public void onBindViewHolder(@NonNull ViewHolderClass holder, int position) {
Glide
.with(context)
.load(imageList.get(position).getImageUrl())
.into(holder.imageView);
Log.d(TAG, "onBindViewHolder: ------>called<-----");
}
@Override
public int getItemCount() {
return imageList.size();
}
public class ViewHolderClass extends RecyclerView.ViewHolder{
private ImageView imageView;
//Constructor
public ViewHolderClass(@NonNull View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.single_picture_id);
}
}
和主要活動:
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
MyRecycleAdapter recyclerAdapter;
List<Pictures> imageList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageList = new ArrayList<>();
//Create RecycleView object and pin view
RecyclerView recycleView = findViewById(R.id.linear_layout_with_recycleView_ID);
GridLayoutManager linearLayoutManager = new GridLayoutManager (this, 2);
//Setup Adapter
recycleView.setLayoutManager(linearLayoutManager);
recyclerAdapter = new MyRecycleAdapter(MainActivity.this, imageList);
recycleView.setAdapter(recyclerAdapter);
Log.d(TAG, "onCreate: ------>called<-----");
//Creating reference for MyService and receiving deserialized data.
ApiService apiClient = ApiClient.getClient().create(ApiService.class);
Call<List<Pictures>> call = apiClient.getFile();
call.enqueue(new Callback<List<Pictures>>() {
@Override
public void onResponse(Call<List<Pictures>> call, Response<List<Pictures>> response) {
imageList = response.body();
Log.d(TAG, "onResponse: ------>called<-----");
recyclerAdapter.setMyRecycleAdapter(imageList);
}
@Override
public void onFailure(Call<List<Pictures>> call, Throwable t) {
Log.d("TAG","onFailure = ------>called<----- "+t.toString());
}
});
}
}
看來我問錯了api。 它應該是
public interface ApiService {
@GET("/v2/list")
Call<List<Pictures>> getFile();
}
對象類是錯誤的。 由http://www.jsonschema2pojo.org/生成
public class Pictures {
@SerializedName("id")
@Expose
private String id;
@SerializedName("author")
@Expose
private String author;
@SerializedName("width")
@Expose
private Integer width;
@SerializedName("height")
@Expose
private Integer height;
@SerializedName("url")
@Expose
private String url;
@SerializedName("download_url")
@Expose
private String downloadUrl;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public Integer getWidth() {
return width;
}
public void setWidth(Integer width) {
this.width = width;
}
public Integer getHeight() {
return height;
}
public void setHeight(Integer height) {
this.height = height;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getDownloadUrl() {
return downloadUrl;
}
public void setDownloadUrl(String downloadUrl) {
this.downloadUrl = downloadUrl;
}
}
現在它可以工作並在 gridview 中顯示漂亮的隨機圖片。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.