Android Studio实现解析HTML获取图片URL将图片保存到本地

这篇具有很好参考价值的文章主要介绍了Android Studio实现解析HTML获取图片URL将图片保存到本地。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

效果

Android Studio实现解析HTML获取图片URL将图片保存到本地,android studio,html,android
Android Studio实现解析HTML获取图片URL将图片保存到本地,android studio,html,android
项目本来是要做成图片保存到手机然后读取数据后瀑布流展示,但是有问题,目前只能做到保存到手机文章来源地址https://www.toymoban.com/news/detail-654616.html

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="horizontal">
    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="生成瀑布流"
        tools:ignore="MissingConstraints" />
    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>
MainActivity
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.Manifest;
import android.annotation.SuppressLint;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.os.FileUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.request.target.CustomTarget;
import com.bumptech.glide.request.transition.Transition;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private ImageView imageView;
    private static final String TAG = "MainActivity";
    private static final int PERMISSION_REQUEST_CODE = 1;
    private Button mButton;
    private List<ImageItem> mImageList;
    private RecyclerView mRecyclerView;
    private ImageAdapter mAdapter;
    @SuppressLint("MissingInflatedId")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mButton = findViewById(R.id.button);
        mImageList = new ArrayList<>();
        mRecyclerView = findViewById(R.id.recycler_view);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        mAdapter = new ImageAdapter(mImageList, this);
        mRecyclerView.setAdapter(mAdapter);
        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
              if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
                        != PackageManager.PERMISSION_GRANTED) {
                    ActivityCompat.requestPermissions(MainActivity.this,
                            new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                            PERMISSION_REQUEST_CODE);
                } else {
                    // 开始解析HTML并下载图片
                    startParsingAndDownloading();
                    imageView = findViewById(R.id.image_view);
                    Log.e(TAG,"开始解析HTML并下载图片");
                }

            }
        });

        }
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == PERMISSION_REQUEST_CODE) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // 写入外部存储权限已授予,解析HTML并下载图片
                new ParseHtmlTask().execute("https://example.com"); // 替换为你要解析的HTML网页URL
            } else {
                // 用户拒绝了权限请求,可以根据需要进行处理
            }
        }
    }
     //开始解析HTML
    private void startParsingAndDownloading() {
        new ParseHtmlTask().execute("https://home.meishichina.com/show-top-type-recipe.html");
    }
      private class ParseHtmlTask extends AsyncTask<String, Void, List<ImageItem>> {
       @Override
       protected List<ImageItem> doInBackground(String... urls) {
           String url = urls[0];
           Document document = null;
           try {
               document = Jsoup.connect(url).get();
               Elements imgElements = document.select("div.pic");
               for (Element element : imgElements) {
                   String imgUrl = element.select("a").select("img").attr("data-src");
                   mImageList.add(new ImageItem(imgUrl));
                   downloadImage(imgUrl);
               }

           } catch (IOException e) {
               Log.e(TAG,"111");
               //throw new RuntimeException(e);
           }
            return mImageList;
       }
       @Override
       protected void onPostExecute(List<ImageItem> imageList) {
           mAdapter.notifyDataSetChanged();
       }

           private void downloadImage(String imgUrl) {
               Glide.with(MainActivity.this)
                       .downloadOnly()
                       .load(imgUrl)
                       .into(new CustomTarget<File>() {
                           @Override
                           public void onResourceReady(@NonNull File resource, @Nullable Transition<? super File> transition) {
                               // 下载完成后的处理逻辑,可根据需求进行保存或其他操作
                               // 这里将图片文件保存到手机的公共图片目录下
                               String fileName = "image_" + System.currentTimeMillis() + ".jpg";
                               File destFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), fileName);
                               try {
                                   copyFile(resource, destFile);
                               } catch (IOException e) {
                                   e.printStackTrace();
                               }
                           }

                           @Override
                           public void onLoadCleared(@Nullable Drawable placeholder) {
                               // 可选的清除逻辑
                           }
                       });
           }
               private void copyFile(File sourceFile, File destFile) throws IOException {
                   InputStream inputStream = null;
                   OutputStream outputStream = null;
                   try {
                       inputStream = new FileInputStream(sourceFile);
                       outputStream = new FileOutputStream(destFile);
                       byte[] buffer = new byte[1024];
                       int length;
                       while ((length = inputStream.read(buffer)) != -1) {
                           outputStream.write(buffer, 0, length);
                       }
                   } finally {
                       if (inputStream != null) {
                           inputStream.close();
                       }
                       if (outputStream != null) {
                           outputStream.close();
                       }
                   }
               }
ImageItem
public class ImageItem {
    private String imageUrl;

    public ImageItem(String imageUrl) {
        this.imageUrl = imageUrl;
    }

    public String getImageUrl() {
        return imageUrl;
    }
}

ImageAdapter
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.bumptech.glide.Glide;

import java.util.List;

public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ViewHolder> {
    private List<ImageItem> imageList;
    private Context context;

    public ImageAdapter(List<ImageItem> imageList, Context context) {
        this.imageList = imageList;
        this.context = context;
    }

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

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        ImageItem item = imageList.get(position);
        String imageUrl = item.getImageUrl();

        // 使用Glide加载图片
        Glide.with(context)
                .load(imageUrl)
                .into(holder.imageView);
    }

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

    public class ViewHolder extends RecyclerView.ViewHolder {
        ImageView imageView;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            imageView = itemView.findViewById(R.id.image_view);
        }
    }
}

到了这里,关于Android Studio实现解析HTML获取图片URL将图片保存到本地的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 小程序采用html2canvas实现html转canvas保存图片

    mpaas小程序中采用html2canvas实现html转canvas保存图片 使用uniapp将代码打包一份h5部署到服务器 h5要保存的图片组件页面report.vue 安装 npm install --save html2canvas 或 yarn add html2canvas 引入import html2canvas from ‘html2canvas’; ts 小程序中采用webview跳转到h5页面

    2024年02月11日
    浏览(34)
  • Android实现保存res下(drawable/mipmap)的图片到手机相册

    项目小需求需要保存二维码名片到手机相册的需求,该图片在res/mipmap或者res/drawable文件夹下,实现方法如下。 代码如下(示例): 代码如下(示例): 以上就是今天要讲的内容,本文仅仅简单介绍了在res/mipmap或者res/drawable文件夹下图片保存到手机相册的方法。

    2024年02月12日
    浏览(41)
  • Android Studio实现滑动图片验证码

    源代码链接 效果: MainActivity SlideImageView activity_main.xml

    2024年02月13日
    浏览(32)
  • 使用Android Studio实现图片滤镜应用

    简介: 本文将介绍如何使用Android Studio开发一个图片滤镜应用。通过应用中提供的滤镜效果,用户可以对图片进行美化和编辑。我们将使用Android Studio提供的图像处理库和一些常见的滤镜算法来实现这个应用。 步骤一:创建新项目 打开Android Studio并创建一个新的项目。在项目

    2024年02月12日
    浏览(33)
  • 若依的多图片上传/回显/保存多图片路径url逗号隔开存数据库,前后端都有,拷贝即用

    用户在前端上传不等数量图片,现在需要把其相对/绝对路径存进数据库中,方便后期使用和页面回显. 后端存储pic字段是字符串 用于  用\\\",\\\"逗号  拼接 多个图片 url  1.html代码: 前端走马灯浏览已经上传的图片 前端JS方法,一共四个, 1.上传前校验方法 2.上传方法 3.上传数量限制方

    2024年02月16日
    浏览(38)
  • 【Vue】url拼接参数获取解析

    前言: 前端在开发的时候有很多情况下需要提供不带参数的链接或者带参数的链接给自己使用或者给第三方系统,如果提供给第三方系统使用的话一般是第三方需要通过iframe/window.open/a标签打开链接进入对应的页面。 情况一:获取当前浏览器地址栏链接 1.location.href:获取当

    2023年04月09日
    浏览(34)
  • uniapp 微信小程序保存图片到系统相册( 获取用户是否开启 授权保存图片到相册。)

    当用户点击拒绝按钮后的截图:   用户点击不授权  则关闭弹窗 单独给用户点击授权后, 跳转到授权页面  开启授权后:

    2024年02月08日
    浏览(41)
  • Android Studio Electric Eel 2022.1.1 Patch 2 导入opencv 4.5,并实现图片灰度变换和图片叠加

    Android Studio Electric Eel 2022.1.1 Patch 2 https://sourceforge.net/projects/opencvlibrary/files/4.5.0/opencv-4.5.0-android-sdk.zip/download with API23: 导入opencv sdk: File-New-Import Module 添加工程依赖:File-Project Structure, sdk为opencv sdk. plugins { id ‘com.android.application’ version ‘7.4.2’ apply false id ‘com.android.library’

    2024年02月05日
    浏览(51)
  • 【Android studio】学号及姓名的输入保存页面

    设计一个页面有两个编辑框,分别输入学号和姓名。有两个按钮,一个是修改按钮,当按下修改按钮,编辑框可以进行编辑;一个是保存按钮,当按下保存按钮,使编辑框显示当前的内容并且编辑框不可编辑,此外,在关闭app之后再次打开app,编辑框内容是按下保存按钮之后

    2024年02月13日
    浏览(40)
  • Java 成功实现通过网址URL截图保存

    实操 DjNativeSwing 方式 的现象 1.截图效果(非百度网页):有图片,排版正常,但是部分样式丢失(输入框的文字掉下去了) 2.main 方法使用的里面没问题 ,但是springboot项目去启动以后,该方式触发报错 需要在启动类,关闭无头模式 3.本地项目成功实现以后 部署linux系统后,

    2024年02月13日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包