我必须从网址下载图片。你推荐Bitmap还是Drawable?无论如何,我已经尝试了两次,但那些都不起作用。你知道可能是什么问题吗? (我已经写了互联网和外部存储权限)。您将看到我通过JSON对象接收URL,但我收到了正确的结果。
如果我想在Drawable元素中接收它:
protected Drawable getDrawable()
{
try{
JSONObject jsonResponse = new JSONObject(content);
String src=jsonResponse.getString(data);
InputStream is = (InputStream)new URL(src).getContent();
Drawable d=Drawable.createFromStream(is, "basket.png");
return d;
}
catch(Exception e)
{
String err="This is the error: ";
Log.e(err,e.getMessage());
//e.printStackTrace();
return null;
}
}
如果我想接收一个Bitmap元素:
protected Bitmap getBitMap()
{
try{
JSONObject jsonResponse = new JSONObject(content);
String src=jsonResponse.getString(data);
java.net.URL url = new java.net.URL(src);
HttpURLConnection con=(HttpURLConnection)url.openConnection();
con.setDoInput(true);
con.connect();
InputStream input=con.getInputStream();
Bitmap myBitmap=BitmapFactory.decodeStream(input);
return myBitmap;
}
catch(Exception e){
String err="This is the error: ";
Log.e(err,e.getMessage());
//e.printStackTrace();
return null;
}
}
这是我拥有ImageView的地方:
public class Accedido extends AppCompatActivity {
ImageView imagen;
Button ok;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_accedido);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
imagen=(ImageView)findViewById(R.id.Img);
ok=(Button)findViewById(R.id.btnOk);
ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Bitmap img=null;
Ajax im=new Ajax();
try {
String imagen = im.execute(MainActivity.IP_ADDRESS + "Imagen").get();
LeerConsulta lec = new LeerConsulta(imagen, "img");
//img=lec.getBitMap();
/*String res=lec.getContent();
String res2=lec.getData();
Toast.makeText(Accedido.this, "Content:"+res+"Data:"+res2, Toast.LENGTH_LONG).show();*/
img=lec.getBitMap();
}
catch(Exception exc) {
Toast.makeText(Accedido.this, exc.getMessage(), Toast.LENGTH_SHORT).show();
}
imagen.setImageBitmap(img);
}
});
}
当我运行这些代码时,程序会抛出一个错误,上面写着println needs a message
...但我从未在程序中写过system.out.println
答案 0 :(得分:1)
使用Asynck任务下载图像。
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
public DownloadImageTask(ImageView bmImage) {
this.bmImage = bmImage;
}
protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap mIcon = null;
try {
InputStream in = new java.net.URL(urldisplay).openStream();
mIcon = BitmapFactory.decodeStream(in);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return mIcon;
}
protected void onPostExecute(Bitmap result) {
bmImage.setImageBitmap(result);
}
}
您可以参考此链接http://www.wingnity.com/blog/android-json-parsing-and-image-loading-tutorial/
答案 1 :(得分:0)
我认为位图更好。 试试吧。 确保从JSON获得的URL仅为图像。
JSONObject jsonResponse = new JSONObject(content);
String src=jsonResponse.getString(data);
java.net.URL url = new java.net.URL(src);
Bitmap bitmap = BitmapFactory.decodeStream(url.openConnection().getInputStream());
此外,还提供Universal Image Loader库。试试这个。
答案 2 :(得分:0)
Volley是一个HTTP库,它使Android应用程序的网络更容易,最重要的是,更快。在较高的层次上,您可以通过创建RequestQueue并将其传递给Request对象来使用Volley。 RequestQueue管理工作线程以运行网络操作,读取和写入缓存以及解析响应。
您可以使用Volley
进行图片下载:
在Gradle中添加回购:
compile 'com.android.volley:volley:1.0.0'
您需要在存在ImageView
的班级中添加此代码,只需添加代码(如果您有任何内容,请在下载按钮中):
ImageRequest imageRequest = new ImageRequest(your_image_url, new Response.Listener<Bitmap>() {
@Override
public void onResponse(final Bitmap response) {
your_image_view.setImageBitmap(response);
}
}, 0, 0, ImageView.ScaleType.CENTER_INSIDE, null, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(your_activity_context.this, error.toString(), Toast.LENGTH_LONG).show();
}
});
RequestQueue requestQueue = Volley.newRequestQueue(your_activity_context.this);
requestQueue.add(imageRequest);
答案 3 :(得分:0)
您可以使用Glide library将图片直接从网址下载到图片视图中。
Glide.with(context).load(url).diskCacheStrategy(DiskCacheStrategy.ALL).into(imageView);