我在Android应用程序中使用ok-http。
我有来自网络服务的.pdf文件的网址。
我必须在ImageView的点击事件上下载pdf文件。我在谷歌搜索过但是找不到具体的答案。
如果有人知道,请给我解决方案。 感谢。
答案 0 :(得分:1)
查看官方OkHttp的食谱: https://github.com/square/okhttp/wiki/Recipes
答案 1 :(得分:0)
String root = Environment.getExternalStorageDirectory().toString();
File myDir = new File(root + "/ergonomics/pdf_test");
myDir.mkdirs();
String fname = "TestPdf-01A.pdf";
File file = new File(myDir, fname);
if (file.exists()) file.delete();
InputStream is = response.body().byteStream();
BufferedInputStream bis = new BufferedInputStream(is);
ByteArrayBuffer baf = new ByteArrayBuffer(50);
int current = 0;
while ((current = bis.read()) != -1) {
baf.append((byte) current);
}
FileOutputStream fos = new FileOutputStream(file);
fos.write(baf.toByteArray());
fos.close();
只是FYI ByteArrayBuffer与Android中的所有Apache内容一起被弃用。但是,从理论上讲,它是有效的,并且应该很容易让你遵循。
答案 2 :(得分:0)
我使用OKHttp下载具有此类功能的PDF。下载PDF和json文件的唯一区别是处理响应的方式。我将 response.body?.byteStream()用于PDF。
fun downloadPdf(context: Context, pdfUrl: String, completion: (Boolean) -> Unit) {
val request = Request.Builder()
.url(pdfUrl)
.build()
val client = OkHttpClient.Builder()
.build()
client.newCall(request).enqueue(object: Callback {
override fun onResponse(call: Call, response: Response) {
println("successful download")
val pdfData = response.body?.byteStream()
//At this point you can do something with the pdf data
//Below I add it to internal storage
if (pdfData != null) {
try {
context.openFileOutput("myFile.pdf", Context.MODE_PRIVATE).use { output ->
output.write(pdfData.readBytes())
}
} catch (e: IOException) {
e.printStackTrace()
}
}
completion(true)
}
override fun onFailure(call: Call, e: IOException) {
println("failed to download")
completion(true)
}
})
}