【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);
推荐阅读
- Android QR位图需要帮助才能删除保证金
- Android SkImageDecoder :: Factory返回null错误
- 直接从Android活动下载图像
- 在android下载文件时更新进度条
- Android Firebase下载声音
- Android Studio(如何从自动完成中重新包含已排除的库())
- Chrome for Android显示自动填充即使自动填充(关闭)
- android在java.util.Objects.requireNonNull中获取空指针异常(Objects.java:203)
- 尝试在Android Studio中运行项目时,InstantRunNotificationTask中的NullPointerException