这清楚地表明,在获得响应之后,媒体文件url被接收到客户端。 我的问题是我如何使用直到获得响应后才能访问的URL下载文件? 并且有可能在获取URL的同时下载文件,或者接收URL然后下载文件吗?
我被困在这里,谁能在这里向我简要解释解决方案?
感谢您的帮助!
答案 0 :(得分:0)
您需要在模型中解析Json。
然后,您可以获取url属性并将其下载到文件系统。您可以使用HttpUrlConnection来执行此操作,或者如果您想将Picasso库与Target Picasso一起使用并下载到文件系统中。
让我给你看一个例子。
使用毕加索:
public static void downloadImageWithPicasso(Context context, String url) {
Picasso.with(context)
.load(your_url_from_model)
.into(saveUsingTarget(url));
}
private static Target saveUsingTarget(final String url){
Target target = new Target(){
@Override
public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from) {
new Thread(new Runnable() {
@Override
public void run() {
File file = new File(Environment.getExternalStorageDirectory().getPath() + "/" + url);
try {
file.createNewFile();
FileOutputStream ostream = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 80, ostream);
ostream.flush();
ostream.close();
} catch (IOException e) {
Log.e("IOException", e.getLocalizedMessage());
}
}
}).start();
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
};
return target;
}
使用 HttpUrlConnection
public void downloadImageWithUrlConnection(){
try{
URL url = new URL("your_url_from_model");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);
urlConnection.connect();
File sdCardPath = Environment.getExternalStorageDirectory().getAbsoluteFile();
String filename = "file_name.png";
File file = new File(sdCardPath,filename);
file.createNewFile();
FileOutputStream fileOutput = new FileOutputStream(file);
InputStream inputStream = urlConnection.getInputStream();
byte[] buffer = new byte[1024];
int bufferLength = 0;
while ( (bufferLength = inputStream.read(buffer)) > 0 ){
fileOutput.write(buffer, 0, bufferLength);
}
fileOutput.close();
}
catch (MalformedURLException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
重要:如果要使用HttpURLConnection选项,则需要在后台线程中运行它。
希望对您有帮助。