Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.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应用程序_Java_Android_Image_Url - Fatal编程技术网

Java 如何以编程方式将图像添加到android应用程序

Java 如何以编程方式将图像添加到android应用程序,java,android,image,url,Java,Android,Image,Url,我想能够使用url的图像源。我发现下面的函数可以转换为位图。但是,我得到了一个“NetworkOnMainThreadException” conn.connect(); ,是函数崩溃的地方 我还发现,由于这个异常,我应该使用AsyncTask类扩展。所以我在下面代码的第二部分中使用了它。我还是以同样的例外告终。我不完全理解错误的意思,只是我试图在同一时间在同一地点做太多的事情 有没有更简单的方法将url转换为我可以使用的图像?如何修复现有的功能 public static Bitmap g

我想能够使用url的图像源。我发现下面的函数可以转换为位图。但是,我得到了一个“NetworkOnMainThreadException”

conn.connect();
,是函数崩溃的地方

我还发现,由于这个异常,我应该使用AsyncTask类扩展。所以我在下面代码的第二部分中使用了它。我还是以同样的例外告终。我不完全理解错误的意思,只是我试图在同一时间在同一地点做太多的事情

有没有更简单的方法将url转换为我可以使用的图像?如何修复现有的功能

 public static Bitmap getImageBitmap(String url) {
            Log.i("bitmap","here?");
            Bitmap bm = null;
            Log.i("bitmap","here?");
            try {
                Log.i("bitmap","here?");
                URL aURL = new URL(url);
                Log.i("bitmap","here?");
                URLConnection conn = aURL.openConnection();
                Log.i("bitmap","last ?");
                conn.connect();
                Log.i("bitmap","here?");
                InputStream is = conn.getInputStream();
                Log.i("bitmap","here?");
                BufferedInputStream bis = new BufferedInputStream(is);
                Log.i("bitmap","here?");
                bm = BitmapFactory.decodeStream(bis);
                bis.close();
                Log.i("bitmap","here?");
                is.close();
                Log.i("bitmap","here?");
           } catch (IOException e) {
               Log.e("img", "Error getting bitmap", e);
           }
           return bm;
        }   
使用异步任务:

class taskRunner extends AsyncTask<String, URL, Bitmap>{

     public static Bitmap getImageBitmap(String url) {
            Log.i("bitmap","here?");
            Bitmap bm = null;
            Log.i("bitmap","here?");
            try {
                Log.i("bitmap","here?");
                URL aURL = new URL(url);
                Log.i("bitmap","here?");
                URLConnection conn = aURL.openConnection();
                Log.i("bitmap","last ?");
                conn.connect();
                Log.i("bitmap","here?");
                InputStream is = conn.getInputStream();
                Log.i("bitmap","here?");
                BufferedInputStream bis = new BufferedInputStream(is);
                Log.i("bitmap","here?");
                bm = BitmapFactory.decodeStream(bis);
                bis.close();
                Log.i("bitmap","here?");
                is.close();
                Log.i("bitmap","here?");
           } catch (IOException e) {
               Log.e("img", "Error getting bitmap", e);
           }
           return bm;
        }   
class taskRunner扩展了异步任务{
公共静态位图getImageBitmap(字符串url){
Log.i(“位图”,“此处?”);
位图bm=null;
Log.i(“位图”,“此处?”);
试一试{
Log.i(“位图”,“此处?”);
URL aURL=新URL(URL);
Log.i(“位图”,“此处?”);
URLConnection conn=aURL.openConnection();
Log.i(“位图”、“最后一个?”);
连接();
Log.i(“位图”,“此处?”);
InputStream is=conn.getInputStream();
Log.i(“位图”,“此处?”);
BufferedInputStream bis=新的BufferedInputStream(is);
Log.i(“位图”,“此处?”);
bm=BitmapFactory.decodeStream(bis);
二、关闭();
Log.i(“位图”,“此处?”);
is.close();
Log.i(“位图”,“此处?”);
}捕获(IOE异常){
Log.e(“img”,“获取位图时出错”,e);
}
返回bm;
}   

非常感谢您抽出时间阅读此文章。

首先,不要忘记清单中的互联网许可

<uses-permission android:name="android.permission.INTERNET"/>
应该是这样的,希望有帮助

编辑:

AsyncTask-这是异步结构

在本例中,参数是ImageView,您还希望传递url的字符串。 结果将是位图,并将在OnPostExecute方法上设置

为了理解,我写下了上面的例子。你可以在下一个链接中查看:


如果您还需要其他信息,请告诉我

此问题的可能副本不是副本-海报知道该问题,但即使在参考该答案后仍无法解决该问题。但该问题当前的问题是没有堆栈跟踪来显示异常当前发生的位置-找到它将是解决此问题的关键修复它。该函数不返回位图。它的返回类型为。当我尝试将其分配给位图变量时,我被告知存在不匹配。当我按照上面的指示执行该函数时,它不会崩溃,但如何将位图获取到我的变量中并将其设置为imageView?android.os.AsyncTask这是来自android doc的,因此您可以e错了,它返回位图,然后你在方法onPostExecute上得到它。你需要理解AsyncTask的含义。我会给出我的答案。我对AsyncTask做了一些研究,我有更好的理解,但我不知道如何将位图设置为我的图像。我可以引用我在AsyncTask中在循环中创建的图像吗?我可以返回吗从AsyncTask中删除我的位图,然后将其设置为我的图像?如果该信息有帮助,我将根据服务器上的xml文件创建具有不同数量图像的行。您可以向AsyncTask传递所需的处理程序和全局列表。选项很少。请查看此线程的答案:或此线程:
class BitmapTaks extends AsyncTask<ImageView, Void, Bitmap> {

protected Bitmap doInBackground(ImageView... imageview) {
   Log.i("bitmap","here?");
        Bitmap bm = null;
        Log.i("bitmap","here?");
        try {
            Log.i("bitmap","here?");
            URL aURL = new URL(urls[0]);
            Log.i("bitmap","here?");
            URLConnection conn = aURL.openConnection();
            Log.i("bitmap","last ?");
            conn.connect();
            Log.i("bitmap","here?");
            InputStream is = conn.getInputStream();
            Log.i("bitmap","here?");
            BufferedInputStream bis = new BufferedInputStream(is);
            Log.i("bitmap","here?");
            bm = BitmapFactory.decodeStream(bis);
            bis.close();
            Log.i("bitmap","here?");
            is.close();
            Log.i("bitmap","here?");
       } catch (IOException e) {
           Log.e("img", "Error getting bitmap", e);
       }
       return bm;
}

protected void onPostExecute(Bitmap b) {
   //do something after execute
}
}
new BitmapTaks().execute(url);