问题描述
- android imageview加载网络图片无图片
-
MainActivity.javapackage study_imageput.com.study_apktointent; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.widget.ImageView; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; public class MainActivity extends Activity { //定义一个图片显示控件 private ImageView imageView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView = (ImageView) this.findViewById(R.id.ivPic); String url = "http://images.cnitblog.com/blog/430074/201302/01220037-4e6a57c1199748fea9f8391e7e0548d7.jpg"; setPicBitmap(imageView, url); } public static void setPicBitmap(final ImageView ivPic,final String pic_url){ new Thread(new Runnable() { @Override public void run() { try{ HttpURLConnection conn = (HttpURLConnection) new URL(pic_url).openConnection(); conn.connect(); InputStream is = conn.getInputStream(); Bitmap bitmap =BitmapFactory.decodeStream(is); ivPic.setImageBitmap(bitmap); is.close(); } catch (Exception e){ e.printStackTrace(); } } }); } }
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/button1" android:text="加载图片" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <ImageView android:id="@+id/ivPic" android:layout_width="match_parent" android:layout_height="match_parent" android:src="#dc0000"/> </LinearLayout>
AndroidMainfest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="study_imageput.com.study_apktointent"> <uses-permission android:name="android.permission.INTERNET" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity" android:label="@string/app_name" android:theme="@style/AppTheme.NoActionBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
最后显示结果就是白屏,如果之前设置了imageview的默认图片,加载之后就会变成白色
解决方案
你这个得用异步来做吧,我最近写了一个异步获取图片的Demo,主要部分是这么写的:
public class MainActivity extends Activity implements OnClickListener {
private ImageView iv;
private Button downloadButton;
private TextView tv_show;
private RotatingDoughnut rotatingDoughnut;
private static final String IMG_PATH = "http://img.my.csdn.net/uploads/201604/06/1459922240_8285.jpg";
private static final int MSG_SUCCESS = 0;
private static final int MSG_FAILURE = 1;
private static final int MSG_START_LOADING = 3;
private static final int MSG_FINISH_LOADING = 4;
private DownloadThread downloadThread;
private Bitmap bitmap = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv = (ImageView) findViewById(R.id.iv);
tv_show = (TextView) findViewById(R.id.tv_show);
rotatingDoughnut = (RotatingDoughnut) findViewById(R.id.progressBar);
downloadButton = (Button) findViewById(R.id.btn_download);
downloadButton.setOnClickListener(this);
}
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_SUCCESS:
rotatingDoughnut.setVisibility(View.INVISIBLE);
iv.setImageBitmap(bitmap);
downloadButton.setText("Success");
downloadButton.setEnabled(false);
break;
case MSG_FAILURE:
Toast.makeText(getApplicationContext(), "获取图片失败", Toast.LENGTH_SHORT).show();
downloadButton.setText("Failure");
downloadButton.setEnabled(false);
break;
case MSG_START_LOADING:
rotatingDoughnut.doughnutRotating();
default:
break;
}
}
;
};
private class DownloadThread extends Thread {
HttpURLConnection coon;
InputStream inputStream;
@Override
public void run() {
try {
URL url = new URL(IMG_PATH);
if (url != null) {
coon = (HttpURLConnection) url.openConnection();
coon.setConnectTimeout(2000);
coon.setDoInput(true);
coon.setRequestMethod("GET");
coon.connect();
if (coon.getResponseCode() == 200) {
inputStream = coon.getInputStream();
bitmap = BitmapFactory.decodeStream(inputStream);
mHandler.obtainMessage(MSG_SUCCESS).sendToTarget();
} else {
mHandler.obtainMessage(MSG_FAILURE).sendToTarget();
}
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
super.run();
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_download:
iv.setImageBitmap(null);
downloadThread = new DownloadThread();
if (!isConnectingToInternet()) {
Toast.makeText(getApplicationContext(), "未检测到网络", Toast.LENGTH_SHORT).show();
} else {
tv_show.setVisibility(View.GONE);
rotatingDoughnut.setVisibility(View.VISIBLE);
mHandler.obtainMessage(MSG_START_LOADING).sendToTarget();
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
downloadThread.start();
}
}, 2500);
}
break;
default:
break;
}
}
/**
* 检测网络状态
*
* @return
*/
public boolean isConnectingToInternet() {
ConnectivityManager connectivity = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null) {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null)
for (int i = 0; i < info.length; i++)
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
return false;
}
}
你参考参考
解决方案二:
android使用ImageView加载本地SdCard图片和加载网络图片
android使用ImageView加载本地SdCard图片和加载网络图片
Android - 小功能 使用ImageView加载本地SdCard图片和加载网络图片
解决方案三:
图片的话 目前我是用ImageLoader做的 效果还不错 你可以试试
解决方案四:
是不是被android:src="#dc0000"挡住了?
解决方案五:
图片下载显示要异步操作。
并且只能在UI线程中才能操作UI
时间: 2024-12-10 11:22:47