綁定帳號登入

Android 台灣中文網

打印 上一主題 下一主題

[求助] [已解決,附上解決方式]imageview在手機上無法顯示從網路下載

[複製連結] 查看: 1871|回覆: 6|好評: 0
跳轉到指定樓層
樓主
xjxuvup | 收聽TA | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
發表於 2013-1-30 11:24

馬上加入Android 台灣中文網,立即免費下載應用遊戲。

您需要 登錄 才可以下載或查看,沒有帳號?註冊

x
本帖最後由 xjxuvup 於 2013-3-27 21:45 編輯

解決方式:
在onCreate()裡面加上以下程式碼即可。
  1. StrictMode
  2.     .setThreadPolicy(new StrictMode.ThreadPolicy.Builder()  
  3.     .detectDiskReads()  
  4.     .detectDiskWrites()  
  5.     .detectNetwork()   // or .detectAll() for all detectable problems  
  6.     .penaltyLog()  
  7.     .build());  
  8. StrictMode
  9.     .setVmPolicy(new StrictMode.VmPolicy.Builder()  
  10.     .detectLeakedSqlLiteObjects()  
  11.     .detectLeakedClosableObjects()  
  12.     .penaltyLog()  
  13.     .penaltyDeath()  
  14.     .build());
複製代碼
流程是,打開APK會出現歡迎畫面也就是放一張從網路讀取的圖片,然後在換layout到主程式頁面
就像最近的Line打開都會出現聖誕節的歡迎畫面

程式在模擬器跑都沒問題,可以正常顯示。
但是只要一放到手機上面跑,就無法顯示從網路讀取之後顯示的圖片。
以下是歡迎頁面的程式碼部分,請各位先進幫忙,感激不盡。
  1. import java.io.InputStream;
  2. import java.net.HttpURLConnection;
  3. import java.net.URL;

  4. import android.app.Activity;
  5. import android.content.Intent;
  6. import android.graphics.Bitmap;
  7. import android.graphics.BitmapFactory;

  8. import android.os.Bundle;
  9. import android.os.Handler;
  10. import android.view.Window;
  11. import android.widget.ImageView;

  12. public class Splash extends Activity{
  13.         //宣告LinearLayout變數li
  14.         private ImageView imageView;
  15.         //設定開啟畫面延遲時間
  16.         private final int SPLASH_DISPLAY_LENGTH=10000;
  17.        
  18.         /* (non-Javadoc)
  19.          * @see android.app.Activity#onCreate(android.os.Bundle)
  20.          */
  21.         @Override
  22.         protected void onCreate(Bundle savedInstanceState) {
  23.                 // TODO Auto-generated method stub
  24.                 super.onCreate(savedInstanceState);
  25.                 requestWindowFeature(Window.FEATURE_NO_TITLE);
  26.                 setContentView(R.layout.splash);
  27.                
  28.                 //網路圖片路徑
  29.                 String url = "http://xjxuvup1.myweb.hinet.net/3.jpg";
  30.                 //得到可用的圖片
  31.                 Bitmap bitmap = getHttpBitmap(url);
  32.                 imageView = (ImageView)this.findViewById(R.id.imageView);
  33.                 //顯示
  34.                 imageView.setImageBitmap(bitmap);
  35.                
  36.                
  37.                
  38.                 new Handler().postDelayed(new Runnable(){

  39.                         @Override
  40.                         public void run() {
  41.                                 // TODO Auto-generated method stub
  42.                                 Intent mainIntent = new Intent(Splash.this,Motel.class);
  43.                                 Splash.this.startActivity(mainIntent);
  44.                                 Splash.this.finish();
  45.                         }
  46.                        
  47.                 }, SPLASH_DISPLAY_LENGTH);
  48.         }
  49.        
  50.         public static Bitmap getHttpBitmap(String url){
  51.                 URL myFileURL;
  52.                 Bitmap bitmap = null;
  53.                 try{
  54.                         myFileURL = new URL(url);
  55.                         //獲得連接
  56.                         HttpURLConnection conn =
  57.                                         (HttpURLConnection)myFileURL.openConnection();
  58.                         //設置超過時間為6000毫秒,conn.setConnectionTimeout(0);表時沒有時間限制
  59.                         conn.setConnectTimeout(6000);
  60.                         //設定連結獲取數據
  61.                         conn.setDoInput(true);
  62.                         //設定是否使用快取
  63.                         conn.setUseCaches(false);
  64.                         //得到數據
  65.                         InputStream is = conn.getInputStream();
  66.                         //解析得到圖片
  67.                         bitmap = BitmapFactory.decodeStream(is);
  68.                         //關閉連結
  69.                         is.close();
  70.                 }
  71.                 catch(Exception e)
  72.                 {
  73.                         e.printStackTrace();
  74.                 }
  75.                 return bitmap;
  76.         }
  77.        

  78. }
複製代碼
「用Android 就來APK.TW」,快來加入粉絲吧!
Android 台灣中文網(APK.TW)
收藏收藏 分享分享 分享專題
用Android 就來Android 台灣中文網(https://apk.tw)
回覆

使用道具 舉報

沙發
ploglin | 收聽TA | 只看該作者
發表於 2013-1-30 11:56
看一下 LogCat 中有沒有異常的訊息。
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

板凳
 樓主| xjxuvup | 收聽TA | 只看該作者
發表於 2013-1-30 12:09

剛剛看了一下 沒有錯誤訊息
之前有跟同學討論,同學說 會不會是build target的問題
我把他調到Android 2.3.3 跟 Android 4.0.3都沒用
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

地板
ploglin | 收聽TA | 只看該作者
發表於 2013-1-30 12:19
應該不可能完全沒錯誤訊息,如果沒有 Error 就看看有沒有 Warning
不然就是在 try catch 的部份自己加一些 Log

另外檢查一下,在AndroidManifest.xml中,有沒有加入權限
<uses-permission android:name="android.permission.INTERNET" />
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

5
 樓主| xjxuvup | 收聽TA | 只看該作者
發表於 2013-1-30 12:34
ploglin 發表於 2013-1-30 12:19
應該不可能完全沒錯誤訊息,如果沒有 Error 就看看有沒有 Warning
不然就是在 try catch 的部份自己加一些  ...


重新打開eclipse會出現這些紅字訊息,至於權限部分是有設置的
  1. 01-30 12:33:21.310: E/AlarmManagerService(1868): android_server_AlarmManagerService_set to type=1, 1359520440.000000000
  2. 01-30 12:33:21.460: E/AlarmManagerService(1868): android_server_AlarmManagerService_set to type=1, 1359520404.463000000
  3. 01-30 12:33:21.585: E/DataRouter(1699): usb connection is true
  4. 01-30 12:33:21.585: E/DataRouter(1699): DSR is ON. Don't send DTR ON.
  5. 01-30 12:33:23.265: E/AlarmManagerService(1868): android_server_AlarmManagerService_set to type=2, 44009.320000000
  6. 01-30 12:33:23.295: E/PushClient(15511): [b] sendPingReq
  7. 01-30 12:33:23.300: E/AlarmManagerService(1868): android_server_AlarmManagerService_set to type=2, 43704.076000000
  8. 01-30 12:33:23.390: E/PushClient(15511): [b] __PingReply__
  9. 01-30 12:33:23.395: E/AlarmManagerService(1868): android_server_AlarmManagerService_set to type=2, 43764.168000000
  10. 01-30 12:33:23.585: E/DataRouter(1699): usb connection is true
  11. 01-30 12:33:23.585: E/DataRouter(1699): DSR is ON. Don't send DTR ON.
  12. 01-30 12:33:24.460: E/AlarmManagerService(1868): android_server_AlarmManagerService_set to type=1, 1359520440.000000000
  13. 01-30 12:33:24.590: E/AlarmManagerService(1868): android_server_AlarmManagerService_set to type=1, 1359520407.593000000
  14. 01-30 12:33:25.585: E/DataRouter(1699): usb connection is true
  15. 01-30 12:33:25.585: E/DataRouter(1699): DSR is ON. Don't send DTR ON.
  16. 01-30 12:33:27.585: E/DataRouter(1699): usb connection is true
  17. 01-30 12:33:27.585: E/DataRouter(1699): DSR is ON. Don't send DTR ON.
  18. 01-30 12:33:27.590: E/AlarmManagerService(1868): android_server_AlarmManagerService_set to type=1, 1359520440.000000000
  19. 01-30 12:33:27.730: E/AlarmManagerService(1868): android_server_AlarmManagerService_set to type=1, 1359520410.729000000
  20. 01-30 12:33:29.590: E/DataRouter(1699): usb connection is true
  21. 01-30 12:33:29.590: E/DataRouter(1699): DSR is ON. Don't send DTR ON.
  22. 01-30 12:33:30.725: E/Watchdog(1868): !@Sync 673
  23. 01-30 12:33:30.725: E/AlarmManagerService(1868): android_server_AlarmManagerService_set to type=1, 1359520440.000000000
  24. 01-30 12:33:30.860: E/AlarmManagerService(1868): android_server_AlarmManagerService_set to type=1, 1359520413.863000000
複製代碼
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

6
ploglin | 收聽TA | 只看該作者
發表於 2013-1-30 13:41
看不出異常。

不過我整理一下你的程式邏輯,大致看到一個問題,但不確定是否為問題點,僅提供您參考。
我記得在 runnable 中是無法控制 UI 的,應該是會出現錯誤才對,一般都會用 handler 的 sendEmptyMessage 或是 sendMessage 將程式引導至 handler 的 handleMessage 去控制 UI 的部份。

點評

原來就是NetworkOnMainThreadException這個例外,呵呵。多謝版主  發表於 2013-3-27 21:48

評分

參與人數 1碎鑽 +1 幫助 +1 收起 理由
xjxuvup + 1 + 1 非常讚

查看全部評分

用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

7
 樓主| xjxuvup | 收聽TA | 只看該作者
發表於 2013-2-5 20:06
感謝版主幫忙解答
最後我是拿同學的code來改,然後就可以了。
他用的方法也是使用sendEmptyMessage來做,謝謝版主。
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則