作者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