Android – 将ImageView设置为URL

我正在尝试将Imageview设置为URL。

以下是我的代码

protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.getpic); ImageView i = (ImageView)findViewById(R.id.ivget); URL url; try { url = new URL("http://sofzh.miximages.com/java/1359419073599s.jpg"); Bitmap image = BitmapFactory.decodeStream(url.openConnection().getInputStream()); i.setImageBitmap(image); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } 

但每当我尝试打开/运行应用程序时它会崩溃,为什么它不起作用?

 06-15 00:37:20.977: E/AndroidRuntime(8579): FATAL EXCEPTION: main 06-15 00:37:20.977: E/AndroidRuntime(8579): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.OptimusApps.stayhealthy/com.OptimusApps.stayhealthy.Practice2}: java.lang.NullPointerException 06-15 00:37:20.977: E/AndroidRuntime(8579): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1993) 06-15 00:37:20.977: E/AndroidRuntime(8579): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2104) 06-15 00:37:20.977: E/AndroidRuntime(8579): at android.app.ActivityThread.access$600(ActivityThread.java:132) 06-15 00:37:20.977: E/AndroidRuntime(8579): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1157) 06-15 00:37:20.977: E/AndroidRuntime(8579): at android.os.Handler.dispatchMessage(Handler.java:99) 06-15 00:37:20.977: E/AndroidRuntime(8579): at android.os.Looper.loop(Looper.java:137) 06-15 00:37:20.977: E/AndroidRuntime(8579): at android.app.ActivityThread.main(ActivityThread.java:4575) 06-15 00:37:20.977: E/AndroidRuntime(8579): at java.lang.reflect.Method.invokeNative(Native Method) 06-15 00:37:20.977: E/AndroidRuntime(8579): at java.lang.reflect.Method.invoke(Method.java:511) 06-15 00:37:20.977: E/AndroidRuntime(8579): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 06-15 00:37:20.977: E/AndroidRuntime(8579): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556) 06-15 00:37:20.977: E/AndroidRuntime(8579): at dalvik.system.NativeStart.main(Native Method) 06-15 00:37:20.977: E/AndroidRuntime(8579): Caused by: java.lang.NullPointerException 06-15 00:37:20.977: E/AndroidRuntime(8579): at android.app.Activity.findViewById(Activity.java:1794) 06-15 00:37:20.977: E/AndroidRuntime(8579): at com.OptimusApps.stayhealthy.Practice2.(Practice2.java:17) 06-15 00:37:20.977: E/AndroidRuntime(8579): at java.lang.Class.newInstanceImpl(Native Method) 06-15 00:37:20.977: E/AndroidRuntime(8579): at java.lang.Class.newInstance(Class.java:1319) 06-15 00:37:20.977: E/AndroidRuntime(8579): at android.app.Instrumentation.newActivity(Instrumentation.java:1023) 06-15 00:37:20.977: E/AndroidRuntime(8579): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1984) 06-15 00:37:20.977: E/AndroidRuntime(8579): ... 11 more 

上面是logcat,我不知道错误在哪里特定但是…………………………… ………………………………………….. ………………………………………….. …………………….

您不应该在主ui线程上执行与网络相关的操作。

您可以找到当前视图层次设置为活动的ViewById。 检查你是否在ivget.xml中有imageview。 还可以使用如下的asynctask并生成一个http get请求来获取图像。

activity_main.xml中

     

MainActivity.java

  public class AndroidCustomGalleryActivity extends Activity { ImageView iv; Bitmap image ; ProgressDialog pd; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); iv = (ImageView) findViewById(R.id.imageView1); pd = new ProgressDialog(this); pd.setMessage("Loading.."); new TheTask().execute(); } class TheTask extends AsyncTask { @Override protected void onPreExecute() { // TODO Auto-generated method stub super.onPreExecute(); pd.show(); } @Override protected Void doInBackground(Void... params) { // TODO Auto-generated method stub try { //URL url = new URL( "http://a3.twimg.com/profile_images/670625317/aam-logo-v3-twitter.png"); image = downloadBitmap("http://a3.twimg.com/profile_images/670625317/aam-logo-v3-twitter.png"); } catch(Exception e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Void result) { // TODO Auto-generated method stub super.onPostExecute(result); pd.dismiss(); if(image!=null) { iv.setImageBitmap(image); } } } private Bitmap downloadBitmap(String url) { // initilize the default HTTP client object final DefaultHttpClient client = new DefaultHttpClient(); //forming a HttoGet request final HttpGet getRequest = new HttpGet(url); try { HttpResponse response = client.execute(getRequest); //check 200 OK for success final int statusCode = response.getStatusLine().getStatusCode(); if (statusCode != HttpStatus.SC_OK) { Log.w("ImageDownloader", "Error " + statusCode + " while retrieving bitmap from " + url); return null; } final HttpEntity entity = response.getEntity(); if (entity != null) { InputStream inputStream = null; try { // getting contents from the stream inputStream = entity.getContent(); // decoding stream data back into image Bitmap that android understands image = BitmapFactory.decodeStream(inputStream); } finally { if (inputStream != null) { inputStream.close(); } entity.consumeContent(); } } } catch (Exception e) { // You Could provide a more explicit error message for IOException getRequest.abort(); Log.e("ImageDownloader", "Something went wrong while" + " retrieving bitmap from " + url + e.toString()); } return image; } } 

在此处输入图像描述

 android.app.Activity.findViewById(Activity.java:1794) 

=>它表示你没有在你的代码中初始化你的ImageView即“i”。

 ImageView i = (ImageView) findViewById(R.id.myImageViewInXML); 

使用Glide

实现'com.github.bumptech.glide:glide:4.2.0'

要么

在java中

 Glide.with(getApplicationContext()) .load(image) .into(imageView);