public void dow_imgone(final View view) {
    new AsyncTask<Void, Void, String>() {
        protected String doInBackground(Void... voids) {
            OkHttpClient client = new OkHttpClient();

            EditText editText = findViewById(R.id.edit_text);
            String inputText = editText.getText().toString();
            if (inputText.isEmpty()) {
                Snackbar.make(view, '输入框为空', Snackbar.LENGTH_LONG)
                        .setAction('Action', null).show();
                return '输入框为空';
            }

            String url = 'https://app.huashijie.art/api/work/detailV2?visitorId=-1&workId=' + inputText + '&cur_user_id=-1&platform=android&os_version=28&version_code=217&device_brand=vivo&device_model=vivo%20X21&token=&channel=vivo';

            Request request = new Request.Builder()
                    .url(url)
                    .build();

            try {
                Response response = client.newCall(request).execute();
                String responseBody = response.body().string();

                JsonParser parser = new JsonParser();
                JsonObject json = parser.parse(responseBody).getAsJsonObject();

                String imageUrl = json.get('data').getAsJsonObject().get('multiImages').getAsJsonArray().get(0).getAsJsonObject().get('imgPath').getAsString();

                if (imageUrl != null) {
                    String fileName = 'image.jpg';
                    File downloadDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
                    
                    downloadImage(MainActivity.this, imageUrl, downloadDir.getAbsolutePath(), fileName);
                    return '获取链接成功' + imageUrl + '文件将保存到:' + downloadDir;
                } else {
                    ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
                    ClipData clip = ClipData.newPlainText('imageUrl', imageUrl);
                    clipboard.setPrimaryClip(clip);
                    return '未能提取到图片地址' + imageUrl;
                }

            } catch (IOException e) {
                e.printStackTrace();
                return '下载失败';
            }
        }

        @Override
        protected void onPostExecute(String result) {
            Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show();
        }
    }.execute();
}

    public void  downloadImage(Context context, String url, String downloadDir, String fileName) {
        DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
        request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE)
                .setAllowedOverRoaming(false)
                .setTitle(fileName)
                .setMimeType('image/jpeg')
                .setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
                .setDestinationInExternalPublicDir(downloadDir, fileName);

        DownloadManager downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
        downloadManager.enqueue(request);
    }

代码说明:

  1. 获取 API 数据: 使用 OkHttpClient 发送 HTTP 请求获取 API 数据,并使用 Gson 解析 JSON 数据获取图片链接。
  2. 检查输入: 检查输入框是否为空,为空则提示用户。
  3. 提取图片地址: 从 API 返回的 JSON 数据中提取图片地址。
  4. 下载图片: 使用 DownloadManager 下载图片,并设置下载参数,例如允许的网络类型、通知设置等。
  5. 保存图片: 使用 setDestinationInExternalPublicDir() 方法将图片保存到用户的下载目录。
  6. 错误处理: 使用 try-catch 语句捕获异常,并提示用户下载失败。

代码中的关键点:

  • 使用 AsyncTask 在后台进行 API 请求和图片下载。
  • 使用 DownloadManager 下载图片,方便用户管理下载进度和文件。
  • 使用 Gson 解析 JSON 数据,方便获取 API 数据中的图片地址。
  • 对输入框进行验证,防止用户输入错误。
  • 对异常进行处理,提升代码健壮性。

注意:

  • 以上代码示例需要在 AndroidManifest.xml 文件中添加 android.permission.INTERNETandroid.permission.WRITE_EXTERNAL_STORAGE 权限才能正常运行。
  • 实际使用中,您需要根据自己的 API 文档和图片下载需求进行修改。

代码优化建议:

  • 可以使用 Kotlin 语言编写代码,使其更简洁易读。
  • 可以使用 Coroutines 替代 AsyncTask 进行异步操作,使其更轻量级。
  • 可以使用第三方库,例如 Glide 或 Picasso,简化图片加载和显示流程。
  • 可以使用 ViewModel 和 LiveData 管理数据,使其更易于测试和维护。

希望以上内容对您有所帮助!

Android 图片下载 - 从 API 获取图片并保存

原文地址: https://www.cveoy.top/t/topic/csoR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录