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);
                    File outputFile = new File(downloadDir, fileName);

                    downloadImage(imageUrl, outputFile);
                    return '获取链接成功' + imageUrl;
                } 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();
}

private void downloadImage(String imageUrl, File outputFile) {
    OkHttpClient client = new OkHttpClient();

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

    try {
        Response response = client.newCall(request).execute();
        if (response.isSuccessful()) {
            FileOutputStream fos = new FileOutputStream(outputFile);
            fos.write(response.body().bytes());
            fos.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

代码说明:

  1. 使用 OkHttpClient 发送 HTTP 请求获取 API 数据。
  2. 使用 JsonParser 解析 API 返回的 JSON 数据,提取图片地址。
  3. 使用 OkHttpClient 下载图片到本地。
  4. 使用 Snackbar 和 Toast 显示提示信息。
  5. 使用 ClipboardManager 将图片地址复制到剪贴板。

代码优化:

  • 将下载图片代码封装到 downloadImage 方法中,提高代码可复用性。
  • 使用 try-catch 块处理网络请求和文件操作中的异常。
  • 使用 Snackbar 和 Toast 显示提示信息,提升用户体验。

注意:

  • 需要添加 android.permission.INTERNETandroid.permission.WRITE_EXTERNAL_STORAGE 权限。
  • 确保 MainActivity 中包含 EditText 控件,用于输入图片 ID。
  • API 地址需要替换成实际的 API 地址。
  • 图片下载路径可以根据实际需求进行修改。
Android 图片下载示例 - 使用 OkHttpClient 和 Json 解析

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

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