我到处都搜索过这个例外但是找不到分辨率&任何帮助,将不胜感激。 我已经尝试过设置断点,但是它们没有被击中,错误在log.v中也可见,而不是在log.e中。 该代码适用于前几次调用10-12次,然后变慢(开始失败并出现此错误),并最终每次都抛出此错误。
_actionRunble = new Runnable() {
public void run() {
try{
##..##
_imView.setImageBitmap(bmImg);
Drawable oldD = _imView.getBackground();
Drawable dd = new BitmapDrawable(bmImg);
_imView.setBackgroundDrawable(dd);
//(((BitmapDrawable)oldD).getBitmap()).recycle();
Thread t = new Thread(_r);
t.start();
}catch(Exception e)
{
e.printStackTrace();
}
}
};
_r = new Runnable() {
@Override
public void run() {
downloadFile(imageUrl);
}
};
Bitmap bmImg;
void downloadFile(String fileUrl){
URL myFileUrl =null;
try {
myFileUrl= new URL(fileUrl);
} catch (MalformedURLException e) {
e.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
}
try {
HttpURLConnection conn= (HttpURLConnection)myFileUrl.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
bmImg = BitmapFactory.decodeStream(is);
//this.runOnUiThread(_actionRunble);
_mHandler.postDelayed(_actionRunble, 2000);
//_mHandler.postAtFrontOfQueue(_actionRunble);
//_mHandler.post(_actionRunble);
} catch (IOException e) {
e.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
}
}
活动oncreate调用downloadfile(...)并在返回调用后再次使用相同的url调用以获取更新的映像。我尝试将主队列上的发布消息延迟2秒(虽然我不想要),但这也不起作用:(。 请随时进一步澄清。
答案 0 :(得分:2)
我终于解决了。 为了特别摆脱这个异常,我开始使用单个HttpURLConnection(重用它直到它失败,你再次创建它),但我遇到了“BitmapFactory.decodeStream返回null”问题,同时做“bmImg = BitmapFactory .decodeStream(是); “这是因为我无法再次在同一个连接上使用相同的输入流,因此我必须在再次使用它之前关闭它(is.close(),in.close())。但是这个dint因为某些原因而起作用(我不知道!)。 最后,不是从HttpURLConnection获取输入流(使用conn.getInputStream()),而是直接从URL(myFileUrl.openStream())获取它。 BitmapFactory.decodeStream(是)有时仍然可以返回null(更好地处理那种情况 - 问我为什么:)),在这种情况下我再次尝试下载。 这里是更新的downloadFile(...)方法,希望它可以帮助某人:)
void downloadFile(String fileUrl){
URL myFileUrl =null;
try {
myFileUrl= new URL(fileUrl);
} catch (MalformedURLException e) {
//print exception;
}
catch (Exception e) {
//print exception;
}
try {
//InputStream in = conn.getInputStream();--avoid this, get it from url directly instead, unless u really need to read from httpconnection because u want to configure headers or some other reason.
InputStream in = myFileUrl.openStream();
InputStream is = new BufferedInputStream(in);
bmImg = BitmapFactory.decodeStream(is);
in.close();
is.close();
if(bmImg==null)
{
downloadFile(fileUrl);
return;
}
//this.runOnUiThread(_actionRunble);
//_mHandler.postAtFrontOfQueue(_actionRunble);
//_mHandler.post(_actionRunble);
_mHandler.postDelayed(_actionRunble, 1000);
}
catch (IOException e) {
downloadFile(fileUrl);
//print exception;
}
catch (Exception e) {
downloadFile(fileUrl);
//print exception;
}
}
答案 1 :(得分:0)
您的问题出在imageUrl
:它可能必须以 http 或 https 开头,并且您要连接的实际服务器或主机名必须是要么是有效的IP地址,要么是名称 - 正确解析为IP地址。