簡體   English   中英

使用 Retrofit 和 Glide 下載圖像

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM