Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从Android中的url下载图像_Java_Android_Bitmap_Drawable - Fatal编程技术网

Java 从Android中的url下载图像

Java 从Android中的url下载图像,java,android,bitmap,drawable,Java,Android,Bitmap,Drawable,我必须从url下载图像。你推荐位图还是可绘制的?不管怎样,我试过两次,但都不管用。你知道有什么问题吗??(我已写入internet和外部存储权限)。您将看到我通过一个JSON对象接收URL,但接收正确 如果我想在可绘制元素中接收它: protected Drawable getDrawable() { try{ JSONObject jsonResponse = new JSONObject(content); String

我必须从url下载图像。你推荐位图还是可绘制的?不管怎样,我试过两次,但都不管用。你知道有什么问题吗??(我已写入internet和外部存储权限)。您将看到我通过一个JSON对象接收URL,但接收正确

如果我想在可绘制元素中接收它:

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;
        }
    }
如果我想在位图元素中接收它:

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需要一条消息
…但我从未在程序中编写过system.out.println

位图。 试试这个。 确保从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());

此外,还提供了通用图像加载器库。也试试看。

我认为位图更好。 试试这个。 确保从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());

此外,还提供了通用图像加载器库。试试看。

Volley是一个HTTP库,它使Android应用程序的联网更容易,更重要的是,更快。在高层,您可以通过创建RequestQueue并向其传递请求对象来使用Volley。RequestQueue管理用于运行网络操作、读取和写入缓存以及解析响应的工作线程

您可以使用
Volley
下载图像:

在您的梯度中添加回购:

compile 'com.android.volley:volley:1.0.0'
您需要添加此代码,在存在
ImageView
的类中,只需添加代码(在下载按钮中,如果您有):

ImageRequest ImageRequest=newImageRequest(您的\u image\u url,new Response.Listener(){
@凌驾
公共无效onResponse(最终位图响应){
您的图像视图。setImageBitmap(响应);
}
},0,0,ImageView.ScaleType.CENTER_-INSIDE,null,新响应。ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Toast.makeText(您的活动上下文,错误.toString(),Toast.LENGTH.show();
}
});
RequestQueue RequestQueue=Volley.newRequestQueue(您的\u活动\u上下文。this);
添加(imageRequest);

礼貌

Volley是一个HTTP库,它使Android应用程序的联网更容易,最重要的是,更快。在高层,您可以通过创建RequestQueue并向其传递请求对象来使用Volley。RequestQueue管理用于运行网络操作、读取和写入缓存以及解析响应的工作线程

您可以使用
Volley
下载图像:

在您的梯度中添加回购:

compile 'com.android.volley:volley:1.0.0'
您需要添加此代码,在存在
ImageView
的类中,只需添加代码(在下载按钮中,如果您有):

ImageRequest ImageRequest=newImageRequest(您的\u image\u url,new Response.Listener(){
@凌驾
公共无效onResponse(最终位图响应){
您的图像视图。setImageBitmap(响应);
}
},0,0,ImageView.ScaleType.CENTER_-INSIDE,null,新响应。ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Toast.makeText(您的活动上下文,错误.toString(),Toast.LENGTH.show();
}
});
RequestQueue RequestQueue=Volley.newRequestQueue(您的\u活动\u上下文。this);
添加(imageRequest);

礼貌

使用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);
        }
    }
私有类下载ImageTask扩展异步任务{
图像视图bmImage;
公共下载ImageTask(ImageView bmImage){
this.bmImage=bmImage;
}
受保护位图doInBackground(字符串…URL){
字符串urldisplay=url[0];
位图mIcon=null;
试一试{
InputStream in=newjava.net.URL(urldisplay.openStream();
mIcon=BitmapFactory.decodeStream(in);
}捕获(例外e){
Log.e(“Error”,e.getMessage());
e、 printStackTrace();
}
返回mIcon;
}
受保护的void onPostExecute(位图结果){
bmImage.setImageBitmap(结果);
}
}

您可以参考此链接使用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);
        }
    }
私有类下载ImageTask扩展异步任务{
图像视图bmImage;
公共下载ImageTask(ImageView bmImage){
this.bmImage=bmImage;
}
受保护位图doInBackground(字符串…URL){
字符串urldisplay=url[0];
位图mIcon=null;
试一试{
InputStream in=newjava.net.URL(urldisplay.openStream();
mIcon=BitmapFactory.decodeStream(in);
}捕获(例外e){
Log.e(“Error”,e.getMessage());
e、 printStackTrace();
}
返回mIcon;
}
受保护的void onPostExecute(位图结果){
bmImage.setImageBitmap(结果);
}
}
您可以参考此链接

您可以使用此链接将图像直接从URL下载到图像视图中

Glide.with(context).load(url).diskCacheStrategy(DiskCacheStrategy.ALL).into(imageView);
您可以使用将图像直接从URL下载到图像视图中

Glide.with(context).load(url).diskCacheStrategy(DiskCacheStrategy.ALL).into(imageView);

您想将图像下载到存储器中还是在Imageview上?不想。我只想下载图像并在Imageview中显示。请详细解释“这些不起作用”的含义。例如,您可以从您的异常记录堆栈跟踪(您当前的代码没有这样做),然后在您的问题中包括堆栈跟踪。@F.Riggio查看我要下载的代码。您想将图像下载到存储器还是在Imageview上?不。我只想下载它并在Imageview中显示。请详细解释,什么“那些不起作用”的意思是。例如,您可以从