首先,对不起我的英语不好,其次,我有一个“小”问题。
我测试了StackOverFlow中的许多代码,但我仍然遇到同样的问题。
我正在尝试从URL下载一些图像。我有一个ExpandableListView,我使用一个名为Downloadusers的类来下载有关用户的所有信息。
在本课程中,我获取用户的照片URL,并使用以下代码下载图像:
private void downloadFile(String url) {
String filepath = null;
try
{
URL nurl = new URL(url);
HttpURLConnection urlConnection = (HttpURLConnection) nurl.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);
urlConnection.connect();
File SDCardRoot = getExternalFilesDir(null);
String filename = url.substring(url.lastIndexOf('/') + 1);
Log.i("Local filename:",""+filename+" SDCardRoot: "+SDCardRoot.toString());
File file = new File(SDCardRoot,filename);
if(file.createNewFile())
{
file.createNewFile();
}
FileOutputStream fileOutput = new FileOutputStream(file);
InputStream inputStream = urlConnection.getInputStream();
int totalSize = urlConnection.getContentLength();
int downloadedSize = 0;
byte[] buffer = new byte[PHOTO_FILE_MAX_SIZE];
int bufferLength = 0;
while ( (bufferLength = inputStream.read(buffer)) > 0 )
{
fileOutput.write(buffer, 0, bufferLength);
downloadedSize += bufferLength;
Log.i("Progress:","downloadedSize:"+downloadedSize+"totalSize:"+ totalSize) ;
}
fileOutput.close();
if(downloadedSize==totalSize) filepath=file.getPath();
}
catch (MalformedURLException e)
{
e.printStackTrace();
}
catch (IOException e)
{
filepath=null;
e.printStackTrace();
}
Log.i("filepath:"," "+filepath);
}
我还验证了URL是否正确,并已加载到浏览器中。
使用Log.i(“文件路径:”,“”+文件路径);我可以看到文件路径是正确的,所以我认为图像是正确下载的,但不是,图像文件是损坏的文件,所以当我将图像加载到ImageView中时,我遇到了NullPointException,因为由于图像损坏,bMap readed为空。
我拥有所有权限:Internet、写入和读取外部存储以及手机状态。
我也尝试使用AsyncTask下载图像,但我也遇到了同样的问题。
有人知道我的问题是什么?
谢谢