作者lsunyu (spicywolf)
看板AndroidDev
标题[问题] ImageView显示网路图片的方法?
时间Mon May 20 13:19:20 2013
不好意思 原PO以前只有碰过网页类型的程式语言
对於java跟android是个初学者
以下如有语意或误解部分,请多包涵~顺便告知哪边误解了~ORZ
-------进入正题----------
搭上顺风车,最近也买了几本Android书来自学
不过碰到了几个问题,手边的书都是以资源类别R方式教学
相关图片等档案或内容都是直接先行放置於专案中
少了Android对於存取网路资源的部分
最近想实作抓取HTML,之後抽出img与内容,处理後显示於android上
在测试ImageView去显示网路上的图片时
收寻了网路上的教学,并实作出如下,用2.3.3跑也都正确显示无误
但用usb除错模式丢给4.0.4(API15)手机
APK安装後开启就直接挂了,停止执行
Virtual用4.0执行也是相同结果
不知哪边对於在4.0以上执行出现问题
拜托版上先进解惑~感恩
程式码如下
--------------layout的介面布局---------------
<ImageView
android:id="@+id/im01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" />
---------------------------------------------
--------------src的Actibity.java-----------
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.widget.*;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class MainActivity extends Activity {
String imageUrl01 = "
http://ppt.cc/cut/ppt_logo.png";
//网路图片路径存入字串
// private ImageButton myfa;
Bitmap bmImg;
ImageView im01;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//介面R中取得
// myfa = (ImageButton)findViewById(R.id.myfa);
im01 = (ImageView)findViewById(R.id.im01);
im01.setImageBitmap(returnBitMap(imageUrl01));
}
public Bitmap returnBitMap(String url) {
URL myFileUrl = null;
Bitmap bitmap = null;
try {
myFileUrl = new URL(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
try {
HttpURLConnection conn = (HttpURLConnection) myFileUrl
.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
bitmap = BitmapFactory.decodeStream(is);
is.close();
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
------------AndroidManifest.xml add----------
<uses-permission android:name="android.permission.INTERNET"/>
---------------------------------------------
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.167.61.172
1F:推 tetragramm:4.0以上规定网路存取不能做在main thread中 05/20 13:42
2F:→ tetragramm:所以必须另开thread或AsyncTask去读取 05/20 13:42
3F:推 gpc:未看先猜在main thread弄网路的东西! 05/20 14:02
4F:推 laiis:快用 ImageLoader (逃~~~) 05/20 22:06
5F:推 Killercat:看到这种2.3 ok 4.x炸掉的99%都是threading乱写 XD 05/20 22:38
6F:→ lsunyu:XD 感谢各位 大概了解了 先去研究一下 Multi Thread 05/20 22:57
7F:→ Jyie:这个问题在网路上非常常见,你自己下过功夫过了吗? 05/20 23:14
8F:→ tga123:这问题我也花一番苦心研究~最後写了一堆色情app 阿哈哈哈 05/20 23:18
9F:→ lsunyu:XD所以我才说我是真新手~还在初学研究中@@测小图看功能 05/20 23:30
10F:→ lsunyu:30~70kb完全没去想到要用background thread方式做 05/20 23:32
11F:→ lsunyu:tga123 这___动机 ~ 动力果然强大 XDD 05/20 23:33
12F:推 tga123:真的因为这个我还把J汤跟HTTP协定之类的都翻透了 05/21 01:53
13F:推 PTTco:有用推 05/21 09:42
14F:推 tomap41017:请用AsyncTask/AsyncTaskLoader APIs 05/21 22:21
15F:→ lin1987www:推laiis大大的方法~ ImageLoader Github上有 05/27 21:09
16F:→ lsunyu:有有 看到了 大感谢~各位 05/28 22:43