Android - 将ImageView设置为URL

【Android - 将ImageView设置为URL】一万年来谁著史,三千里外欲封侯。这篇文章主要讲述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://0-media-cdn.foolz.us/ffuuka/board/sp/thumb/1359/41/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 toinstantiate activityComponentInfo{com.OptimusApps.stayhealthy/com.OptimusApps.stayhealthy.Practice2}:java.lang.NullPointerException 06-15 00:37:20.977: E/AndroidRuntime(8579):atandroid.app.ActivityThread.performLaunchActivity(ActivityThread.java:1993) 06-15 00:37:20.977: E/AndroidRuntime(8579):atandroid.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):atjava.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.< init> (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中
< ?xml version="1.0" encoding="utf-8"?> < RelativeLayout xmlns:android="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="173dp" android:src="https://www.songbingjia.com/android/@drawable/ic_launcher" /> < /RelativeLayout>

main activity.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< Void,Void,Void> {@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);


    推荐阅读