簡體   English   中英

無法使用 Recycler View Adapter 從 Picasso 加載圖像 URL 的數組列表。 但直接能夠從 Url 字符串加載

[英]Unable to load Array List of image URLs from Picasso using Recycler View Adapter. But directly able to load from Url string

我正在使用 Jsoup 解析來自網站的漫畫圖像並將它們放入回收站視圖以顯示它們,但圖像無法加載。 pasing漫畫圖片鏈接的網頁鏈接在這里: https://mangaeffect.com/manga/strongest-abandoned-son-2/chapter-1/

DisplayActivity.java

'''

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_display);

    chTextView=findViewById(R.id.chapterTextView);
    recyclerView = findViewById(R.id.displayImageRecyclerView);
    displayChapterAdapter = new DisplayChapterAdapter(displayChapterModelArrayList,DisplayActivity.this);
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(DisplayActivity.this,LinearLayoutManager.VERTICAL,false);
    recyclerView.setLayoutManager(linearLayoutManager);
    recyclerView.setAdapter(displayChapterAdapter);

    DisplayTask displayTask = new DisplayTask();
    displayTask.execute();
}


public class DisplayTask extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        displayChapterModelArrayList.clear();
    }

    @Override
    protected void onPostExecute(Void unused) {
        super.onPostExecute(unused);
        displayChapterAdapter.notifyDataSetChanged();
        chTextView.setText(chx);

    }

    @Override
    protected void onCancelled() {
        super.onCancelled();
    }

    @Override
    protected Void doInBackground(Void... voids) {
        String imgUrl = getIntent().getStringExtra("contentUrl");

        try {
            Document data = Jsoup.connect(imgUrl).get();
            chx = data.select(".container > .row").select(".sidebar-hidden.col-sm-12.col-md-12.main-col")
                    .select("#chapter-heading").text();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            Document data = Jsoup.connect(imgUrl).get();
            Elements x = data.select(".reading-content").select(".page-break");
           String chapterSrc = data.select(".reading-content").select(".page-break").select("img").attr("data-src");
           Log.i("src: ",displayChapterModelArrayList.get(0).getImgUrl());
           displayChapterModelArrayList.add(new DisplayChapterModel(chapterSrc));
            for(Element i:x){
                String chapterSrc = i.select("img").attr("data-src");
                str.add((String)chapterSrc);
                displayChapterModelArrayList.add(new DisplayChapterModel(chapterSrc));
            }


        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }
}

'''

DisplayChapterModel.java

'''

public DisplayChapterModel(String imgUrl) {
    this.imgUrl = imgUrl;
}

public String getImgUrl() {
    return imgUrl;
}

public void setImgUrl(String imgUrl) {
    this.imgUrl = imgUrl;
}

'''

DisplayChapterAdapter.java ''' ArrayList displayChapterModelArrayList; 語境語境;

public DisplayChapterAdapter(ArrayList<DisplayChapterModel> displayChapterModelArrayList, Context context) {
    this.displayChapterModelArrayList = displayChapterModelArrayList;
    this.context = context;
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(context).inflate(R.layout.recycler_view_image_layout, parent, false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    DisplayChapterModel displayChapterModel = displayChapterModelArrayList.get(position);
    String str =displayChapterModel.getImgUrl();
        Picasso.get().load(str).error(R.drawable.ic_baseline_image_24).into(holder.imgUrl);
        Log.i(" jdfgjkdf: ", str);
}

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


public class ViewHolder extends RecyclerView.ViewHolder {
    ImageView imgUrl;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        imgUrl = itemView.findViewById(R.id.cardImageViewX);

    }
}

'''

Output 使用直接鏈接的圖像:喜歡,displayChapterModelArrayList.add(new DisplayChapterModel([鏈接]“https://mangaeffect.com/wp-content/uploads/WP-manga/data/manga_612dbbc700b22/10bbb81546c3c21c7c39ccf516a706a0/1.jpg”)) ;

[1] https://i.stack.imgur.com/X1EYS.png

Output 帶有數組列表鏈接的圖像: [2] https://i.stack.imgur.com/BFiJg.png

請幫忙!!!

我覺得問題在於您在獲取數據時正在更新本地 ArrayList,但是您傳遞給適配器的數據沒有得到更新。

所以我建議您改為將以下方法添加到您的適配器中。 像這樣的東西

public void addImages(ArrayList<DisplayChapterModel> imgList) {
   displayChapterModelArrayList.clear();
   displayChapterModelArrayList.addAll(imgList);
   notifyDataSetChanged();
}

在你的活動中,你將圖像存儲在本地數組中,然后onPostExecute做這樣的事情

@Override
    protected void onPostExecute(Void unused) {
        super.onPostExecute(unused);
        displayChapterAdapter.addImages(displayChapterModelArrayList);
        chTextView.setText(chx);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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