如何从一个URL的Andr​​oid设置图片到图片浏览图片、URL、Andr、oid

2023-09-05 02:37:31 作者:青春是糖゛甜到忧伤

我试图下载和显示的URL我的ImageView一个形象,我会得到dyncamically。我已经试过这样

 网​​址URL =新的URL(parsedWeatherResponse.getWeatherIconUrl());
            BMP位= BitmapFactory.de codeStream(url.openConnection()的getInputStream());
            weather_image.setImageBitmap(BMP);
 

但它显示出异常是

  12月10日至四日:22:40.221:E / AndroidRuntime(15097):致命异常:主要
十二月10号至4日:22:40.221:E / AndroidRuntime(15097):java.lang.RuntimeException的:无法启动的活动ComponentInfo {com.example.itintestapp / com.example.itintestapp.MainActivity}:android.os.NetworkOnMainThreadException
十二月10号至4日:22:40.221:E / AndroidRuntime(15097):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
十二月10号至4日:22:40.221:E / AndroidRuntime(15097):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2211)
十二月10号至4日:22:40.221:E / AndroidRuntime(15097):在android.app.ActivityThread.access $ 600(ActivityThread.java:149)
十二月10号至4日:22:40.221:E / AndroidRuntime(15097):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1300)
十二月10号至4日:22:40.221:E / AndroidRuntime(15097):在android.os.Handler.dispatchMessage(Handler.java:99)
十二月10号至4日:22:40.221:E / AndroidRuntime(15097):在android.os.Looper.loop(Looper.java:153)
十二月10号至4日:22:40.221:E / AndroidRuntime(15097):在android.app.ActivityThread.main(ActivityThread.java:4987)
十二月10号至4日:22:40.221:E / AndroidRuntime(15097):在java.lang.reflect.Method.invokeNative(本机方法)
十二月10号至4日:22:40.221:E / AndroidRuntime(15097):在java.lang.reflect.Method.invoke(Method.java:511)
十二月10号至4日:22:40.221:E / AndroidRuntime(15097):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:821)
十二月10号至4日:22:40.221:E / AndroidRuntime(15097):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
十二月10号至4日:22:40.221:E / AndroidRuntime(15097):在dalvik.system.NativeStart.main(本机方法)
十二月10号至4日:22:40.221:E / AndroidRuntime(15097):由:android.os.NetworkOnMainThreadException
十二月10号至4日:22:40.221:E / AndroidRuntime(15097):在android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1125)
十二月10号至4日:22:40.221:E / AndroidRuntime(15097):在java.net.InetAddress.lookupHostByName(InetAddress.java:385)
十二月10号至4日:22:40.221:E / AndroidRuntime(15097):在java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
十二月10号至4日:22:40.221:E / AndroidRuntime(15097):在java.net.InetAddress.getAllByName(InetAddress.java:214)
。12月10号至4日:22:40.221:E / AndroidRuntime(15097):在libcore.net.http.HttpConnection< INIT>(HttpConnection.java:70)
。12月10号至4日:22:40.221:E / AndroidRuntime(15097):在libcore.net.http.HttpConnection< INIT>(HttpConnection.java:50)
十二月10号至4日:22:40.221:E / AndroidRuntime(15097):在libcore.net.http.HttpConnection $ Address.connect(HttpConnection.java:340)
十二月10号至4日:22:40.221:E / AndroidRuntime(15097):在libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
十二月10号至4日:22:40.221:E / AndroidRuntime(15097):在libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
十二月10号至4日:22:40.221:E / AndroidRuntime(15097):在libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
十二月10号至4日:22:40.221:E / AndroidRuntime(15097):在libcore.net.http.HttpEngine.connect(HttpEngine.java:311)
十二月10号至4日:22:40.221:E / AndroidRuntime(15097):在libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
十二月10号至4日:22:40.221:E / AndroidRuntime(15097):在libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
十二月10号至4日:22:40.221:E / AndroidRuntime(15097):在libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:292)
十二月10号至4日:22:40.221:E / AndroidRuntime(15097):在libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:185)
十二月10号至4日:22:40.221:E / AndroidRuntime(15097):在com.example.itintestapp.MainActivity.setSectorData(MainActivity.java:64)
十二月10号至4日:22:40.221:E / AndroidRuntime(15097):在com.example.itintestapp.MainActivity.onCreate(MainActivity.java:40)
十二月10号至4日:22:40.221:E / AndroidRuntime(15097):在android.app.Activity.performCreate(Activity.java:5020)
十二月10号至4日:22:40.221:E / AndroidRuntime(15097):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
十二月10号至4日:22:40.221:E / AndroidRuntime(15097):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
十二月10号至4日:22:40.221:E / AndroidRuntime(15097):11 ...更多
 

请帮助我,我怎么couuld做到这一点。我已经从一个URL显示图像

我已经试过这样

 类DownloadImageTask扩展的AsyncTask<字符串,太虚,位图> {
      ImageView的bmImage;

      公共DownloadImageTask(ImageView的bmImage){
          this.bmImage = bmImage;
      }

      受保护的位图doInBackground(字符串...网址){
          串urldisplay =网址[0];
          位图mIcon11 = NULL;
          尝试 {
            InputStream的时间=新的java.net.URL(urldisplay).openStream();
            mIcon11 = BitmapFactory.de codeStream(中);
          }赶上(例外五){
              Log.e(错误,e.getMessage());
              e.printStackTrace();
          }
          返回mIcon11;
      }

      保护无效onPostExecute(位图的结果){
          bmImage.setImageBitmap(结果);
      }
    }
 

呼叫

 新DownloadImageTask((ImageView的)findViewById(R.id.weather_image))
            .execute(parsedWeatherResponse.getWeatherIconUrl());
 

闻听此事的除了

  12月10日至四日:29:14.298:E / AndroidRuntime(15813):致命异常:主要
十二月10号至4日:29:14.298:E / AndroidRuntime(15813):显示java.lang.NullPointerException
十二月10号至4日:29:14.298:E / AndroidRuntime(15813):在com.example.itintestapp.DownloadImageTask.onPostExecute(DownloadImageTask.java:32)
十二月10号至4日:29:14.298:E / AndroidRuntime(15813):在com.example.itintestapp.DownloadImageTask.onPostExecute(DownloadImageTask.java:1)
十二月10号至4日:29:14.298:E / AndroidRuntime(15813):在android.os.AsyncTask.finish(AsyncTask.java:631)
十二月10号至4日:29:14.298:E / AndroidRuntime(15813):在android.os.AsyncTask.access $ 600(AsyncTask.java:177)
十二月10号至4日:29:14.298:E / AndroidRuntime(15813):在android.os.AsyncTask $ InternalHandler.handleMessage(AsyncTask.java:644)
十二月10号至4日:29:14.298:E / AndroidRuntime(15813):在android.os.Handler.dispatchMessage(Handler.java:99)
十二月10号至4日:29:14.298:E / AndroidRuntime(15813):在android.os.Looper.loop(Looper.java:153)
十二月10号至4日:29:14.298:E / AndroidRuntime(15813):在android.app.ActivityThread.main(ActivityThread.java:4987)
十二月10号至4日:29:14.298:E / AndroidRuntime(15813):在java.lang.reflect.Method.invokeNative(本机方法)
十二月10号至4日:29:14.298:E / AndroidRuntime(15813):在java.lang.reflect.Method.invoke(Method.java:511)
十二月10号至4日:29:14.298:E / AndroidRuntime(15813):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:821)
十二月10号至4日:29:14.298:E / AndroidRuntime(15813):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
十二月10号至4日:29:14.298:E / AndroidRuntime(15813):在dalvik.system.NativeStart.main(本机方法)
 

解决方案

您正在运行相关的操作UI线程上的网络。所以,你得到 NetworkOnMainThreadException

  BMP位= BitmapFactory.de codeStream(url.openConnection()的getInputStream());
 

的http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html

您应该使用的AsyncTask

http://developer.android.com/reference/android/os/ AsyncTask.html 。

检查文档有一个例子。

例如:

 公共类MainActivity延伸活动{
    ImageView的IV;
    ProgressDialog PD;
@覆盖
公共无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_main);
    PD =新ProgressDialog(本);
    pd.setMessage(下载图像);
    IV =(ImageView的)findViewById(R.id.imageView1);
    按钮B1 =(按钮)findViewById(R.id.button1);
    b1.setOnClickListener(新OnClickListener()
    {

        @覆盖
        公共无效的onClick(视图v){
            // TODO自动生成方法存根
             新DownloadImageTask(iv).execute("https://m.xsw88.com/allimgs/daicuo/20230905/785.png");
        }

    });

}
类DownloadImageTask扩展的AsyncTask<字符串,太虚,位图> {
    ImageView的bmImage;

    公共DownloadImageTask(ImageView的bmImage){
        this.bmImage = bmImage;
    }

    @覆盖
    在preExecute保护无效(){
        // TODO自动生成方法存根
        super.on preExecute();
        pd.show();
    }

    受保护的位图doInBackground(字符串...网址){
        串urldisplay =网址[0];
        位图mIcon11 = NULL;
        尝试 {
          InputStream的时间=新的java.net.URL(urldisplay).openStream();
          mIcon11 = BitmapFactory.de codeStream(中);
        }赶上(例外五){
            Log.e(错误,e.getMessage());
            e.printStackTrace();
        }
        返回mIcon11;
    }

    @覆盖
    保护无效onPostExecute(位图的结果){
        super.onPostExecute(结果);
        pd.dismiss();
        bmImage.setImageBitmap(结果);
    }
  }
}
 

activity_main.xml

 < RelativeLayout的的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    的xmlns:工具=htt​​p://schemas.android.com/tool​​s
    的xmlns:android1 =htt​​p://schemas.android.com/apk/res/android
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent>

    < ImageView的
        机器人:ID =@ + ID / imageView1
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:layout_alignParentTop =真
        机器人:layout_centerHorizo​​ntal =真
        机器人:layout_marginTop =171dp
        机器人:SRC =@可绘制/ ic_launcher/>

    <按钮
        机器人:ID =@ + ID /按钮1
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:layout_alignParentBottom =真
        机器人:layout_centerHorizo​​ntal =真
        机器人:layout_marginBottom =78dp
        机器人:文本=按钮/>

< / RelativeLayout的>
 

I am trying to download and show a image in my imageview from URL that i will get dyncamically .I have tried this way

 URL url = new URL(parsedWeatherResponse.getWeatherIconUrl());
            Bitmap bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
            weather_image.setImageBitmap(bmp);

But it showing exception that is

10-04 12:22:40.221: E/AndroidRuntime(15097): FATAL EXCEPTION: main
10-04 12:22:40.221: E/AndroidRuntime(15097): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.itintestapp/com.example.itintestapp.MainActivity}: android.os.NetworkOnMainThreadException
10-04 12:22:40.221: E/AndroidRuntime(15097):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
10-04 12:22:40.221: E/AndroidRuntime(15097):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2211)
10-04 12:22:40.221: E/AndroidRuntime(15097):    at android.app.ActivityThread.access$600(ActivityThread.java:149)
10-04 12:22:40.221: E/AndroidRuntime(15097):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1300)
10-04 12:22:40.221: E/AndroidRuntime(15097):    at android.os.Handler.dispatchMessage(Handler.java:99)
10-04 12:22:40.221: E/AndroidRuntime(15097):    at android.os.Looper.loop(Looper.java:153)
10-04 12:22:40.221: E/AndroidRuntime(15097):    at android.app.ActivityThread.main(ActivityThread.java:4987)
10-04 12:22:40.221: E/AndroidRuntime(15097):    at java.lang.reflect.Method.invokeNative(Native Method)
10-04 12:22:40.221: E/AndroidRuntime(15097):    at java.lang.reflect.Method.invoke(Method.java:511)
10-04 12:22:40.221: E/AndroidRuntime(15097):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)
10-04 12:22:40.221: E/AndroidRuntime(15097):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
10-04 12:22:40.221: E/AndroidRuntime(15097):    at dalvik.system.NativeStart.main(Native Method)
10-04 12:22:40.221: E/AndroidRuntime(15097): Caused by: android.os.NetworkOnMainThreadException
10-04 12:22:40.221: E/AndroidRuntime(15097):    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1125)
10-04 12:22:40.221: E/AndroidRuntime(15097):    at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
10-04 12:22:40.221: E/AndroidRuntime(15097):    at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
10-04 12:22:40.221: E/AndroidRuntime(15097):    at java.net.InetAddress.getAllByName(InetAddress.java:214)
10-04 12:22:40.221: E/AndroidRuntime(15097):    at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
10-04 12:22:40.221: E/AndroidRuntime(15097):    at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
10-04 12:22:40.221: E/AndroidRuntime(15097):    at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
10-04 12:22:40.221: E/AndroidRuntime(15097):    at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
10-04 12:22:40.221: E/AndroidRuntime(15097):    at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
10-04 12:22:40.221: E/AndroidRuntime(15097):    at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
10-04 12:22:40.221: E/AndroidRuntime(15097):    at libcore.net.http.HttpEngine.connect(HttpEngine.java:311)
10-04 12:22:40.221: E/AndroidRuntime(15097):    at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
10-04 12:22:40.221: E/AndroidRuntime(15097):    at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
10-04 12:22:40.221: E/AndroidRuntime(15097):    at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:292)
10-04 12:22:40.221: E/AndroidRuntime(15097):    at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:185)
10-04 12:22:40.221: E/AndroidRuntime(15097):    at com.example.itintestapp.MainActivity.setSectorData(MainActivity.java:64)
10-04 12:22:40.221: E/AndroidRuntime(15097):    at com.example.itintestapp.MainActivity.onCreate(MainActivity.java:40)
10-04 12:22:40.221: E/AndroidRuntime(15097):    at android.app.Activity.performCreate(Activity.java:5020)
10-04 12:22:40.221: E/AndroidRuntime(15097):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
10-04 12:22:40.221: E/AndroidRuntime(15097):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
10-04 12:22:40.221: E/AndroidRuntime(15097):    ... 11 more

Please help me how couuld i do this .I have show a image from a URL

I have tried this way

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 mIcon11 = null;
          try {
            InputStream in = new java.net.URL(urldisplay).openStream();
            mIcon11 = BitmapFactory.decodeStream(in);
          } catch (Exception e) {
              Log.e("Error", e.getMessage());
              e.printStackTrace();
          }
          return mIcon11;
      }

      protected void onPostExecute(Bitmap result) {
          bmImage.setImageBitmap(result);
      }
    }

Calling

 new DownloadImageTask((ImageView) findViewById(R.id.weather_image))
            .execute(parsedWeatherResponse.getWeatherIconUrl());

Getting this exception

10-04 12:29:14.298: E/AndroidRuntime(15813): FATAL EXCEPTION: main
10-04 12:29:14.298: E/AndroidRuntime(15813): java.lang.NullPointerException
10-04 12:29:14.298: E/AndroidRuntime(15813):    at com.example.itintestapp.DownloadImageTask.onPostExecute(DownloadImageTask.java:32)
10-04 12:29:14.298: E/AndroidRuntime(15813):    at com.example.itintestapp.DownloadImageTask.onPostExecute(DownloadImageTask.java:1)
10-04 12:29:14.298: E/AndroidRuntime(15813):    at android.os.AsyncTask.finish(AsyncTask.java:631)
10-04 12:29:14.298: E/AndroidRuntime(15813):    at android.os.AsyncTask.access$600(AsyncTask.java:177)
10-04 12:29:14.298: E/AndroidRuntime(15813):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
10-04 12:29:14.298: E/AndroidRuntime(15813):    at android.os.Handler.dispatchMessage(Handler.java:99)
10-04 12:29:14.298: E/AndroidRuntime(15813):    at android.os.Looper.loop(Looper.java:153)
10-04 12:29:14.298: E/AndroidRuntime(15813):    at android.app.ActivityThread.main(ActivityThread.java:4987)
10-04 12:29:14.298: E/AndroidRuntime(15813):    at java.lang.reflect.Method.invokeNative(Native Method)
10-04 12:29:14.298: E/AndroidRuntime(15813):    at java.lang.reflect.Method.invoke(Method.java:511)
10-04 12:29:14.298: E/AndroidRuntime(15813):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)
10-04 12:29:14.298: E/AndroidRuntime(15813):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
10-04 12:29:14.298: E/AndroidRuntime(15813):    at dalvik.system.NativeStart.main(Native Method)

解决方案

You are running the network related operation on the ui thread. So, you get NetworkOnMainThreadException.

Bitmap bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());

http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html

You should use a Thread or Asynctask.

http://developer.android.com/reference/android/os/AsyncTask.html.

Check the docs there is an example.

Example:

public class MainActivity extends Activity {
    ImageView iv ;
    ProgressDialog pd; 
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    pd = new ProgressDialog(this);
    pd.setMessage("Downloading Image");
    iv = (ImageView) findViewById(R.id.imageView1);
    Button b1 = (Button) findViewById(R.id.button1);
    b1.setOnClickListener(new OnClickListener()
    {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
             new DownloadImageTask(iv).execute("https://m.xsw88.com/allimgs/daicuo/20230905/785.png");
        }

    });

}
class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
    ImageView bmImage;

    public DownloadImageTask(ImageView bmImage) {
        this.bmImage = bmImage;
    }

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();
        pd.show();
    }

    protected Bitmap doInBackground(String... urls) {
        String urldisplay = urls[0];
        Bitmap mIcon11 = null;
        try {
          InputStream in = new java.net.URL(urldisplay).openStream();
          mIcon11 = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return mIcon11;
    }

    @Override 
    protected void onPostExecute(Bitmap result) {
        super.onPostExecute(result);
        pd.dismiss();
        bmImage.setImageBitmap(result);
    }
  }
}

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:android1="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="171dp"
        android:src="@drawable/ic_launcher" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="78dp"
        android:text="Button" />

</RelativeLayout>

Snap