嗨,请帮助
在设备上运行时,位图为空,但在Genymotion(模拟器)上运行时运行正常
我正在尝试从网址下载图片 当我在Genymotion(模拟器)中运行它运行正常并显示图像时,但当我在设备上运行它时Bitmap为空。
以下是代码
public void DisplayImage(String url, ImageView imageView)
{
imageViews.put(imageView, url);
Bitmap bitmap = memoryCache.get(url);
if (bitmap != null)
imageView.setImageBitmap(bitmap);
else {
queuePhoto(url, imageView);
imageView.setImageResource(stub_id);
}
}
这是网址
url=http://www.hugosys.in/www.nett-torg.no/wp-content/uploads/2014/04/Lighthouse3-300x225.jpg
请帮帮我。
答案 0 :(得分:2)
您应该使用jsoup.jar文件从服务器下载图像。
对于前。
String baseUrl = "URL Here";
try
{
Document doc = Jsoup.connect(baseUrl).get();
Elements content = doc.select("a");
Element last = content.last();
lastEle=last.text();
String temp="";
int totalSize;
//
while (!a)
{
temp = content.get(i).text();
a=lastEle.equals(temp);
File f1 = new File(path);
File f = new File(f1, temp);
//Log.d("Image path", f+"");
tmpUrl = baseUrl + temp;
// Log.d("Full URL", tmpUrl);
if(!f.exists())
{
url = new URL(tmpUrl);
HttpURLConnection urlConnection=(HttpURLConnection)url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);
urlConnection.connect();
FileOutputStream fileOutput=new FileOutputStream(f);
InputStream inputStream = urlConnection.getInputStream();
totalSize = urlConnection.getContentLength();
int downloadedSize = 0;
byte[] buffer = new byte[1024];
int bufferLength = 0;
str= "";
while ( (bufferLength = inputStream.read(buffer)) > 0 )
{
fileOutput.write(buffer, 0, bufferLength);
downloadedSize += bufferLength;
}
}
else
{
Log.d("Image Available", "Available");
}
i++;
}
}
catch (IOException e)
{
Log.e(TAG, "Failed to load HTML code", e);
}
答案 1 :(得分:1)
您可以尝试加载这样的位图:
public Bitmap getBitmapFromUrl(String url) {
Bitmap bitmap = null;
HttpGet httpRequest = null;
httpRequest = new HttpGet(url);
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = null;
try {
response = (HttpResponse) httpclient.execute(httpRequest);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
if (response != null) {
HttpEntity entity = response.getEntity();
BufferedHttpEntity bufHttpEntity = null;
try {
bufHttpEntity = new BufferedHttpEntity(entity);
} catch (IOException e) {
e.printStackTrace();
}
InputStream instream = null;
try {
instream = bufHttpEntity.getContent();
} catch (IOException e) {
e.printStackTrace();
}
bitmap = BitmapFactory.decodeStream(instream);
}
return bitmap;
}
答案 2 :(得分:1)
这是真正帮助你的代码段......
文件包含使用ImageLoader.Java在图像视图上下载和设置图像 他们的ImageCache是为了节省时间而维护的。
在Manifest.xml中添加权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
在图像视图上设置图像的代码是......
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends Activity {
private Button button;
private ImageView image;
ImageLoader imageLoader;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final String url="http://www.hugosys.in/www.nett-torg.no/wp-content/uploads/2014/04/Lighthouse3-300x225.jpg";
imageLoader=new ImageLoader(MainActivity.this);
button=(Button)findViewById(R.id.button1);
image=(ImageView)findViewById(R.id.imageView1);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
imageLoader.DisplayImage(url, image);
}
});
}
}
答案 3 :(得分:0)
检查你的代码后,我发现清单中缺少权限,这就是为什么它会产生问题
案例1 - &gt; 当您在genymotion中使用ur代码时,它可以正常工作,因为您的模拟器中不需要读写访问权。
案例2 - &gt; 当你在设备中运行时,它需要适当的权限才能将图像存储在设备缓存中,因为它无法在设备中运行。
所以你必须在清单中添加两个权限..
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
希望这有效,请随时回复我...... !!!!