[問題] Activity存取SD卡 意外出錯

看板AndroidDev作者 (屁屁)時間11年前 (2014/10/04 17:46), 11年前編輯推噓3(3025)
留言28則, 5人參與, 最新討論串1/1
各位版上的大大們 如題 我寫的程式無法正常讀取SD卡 嚴格來說 應該是我可以存取SD卡 我一般正常放在SD卡裡面的東西是可以讀取的 但是問題就在於我用這個我寫的APP在 A Activity 建立了一個資料夾 並且把圖片丟進去 (這時候用android的多工切換到檔案管理器識可以看到那個資料夾以及圖片的) 但是 "重點" 是 我這個時候退出 A Activity 進入 B Activity 想要用B 讀取我創建的資料夾裡面的圖片 這時就崩潰了(整個程式都死掉) 然而只要重開在點進去啟用B Activity就可以正常看到那張新建的圖片 不太知道是什麼問題 目前試過把 A Activity 完全關掉 再點進去使用 B 結果也還是一樣 崩潰@@ 不曉得有沒有版上的大大知道要下什麼關鍵字去找問題 還是知道是為什麼 使用都正常 但就是在建新的資料夾以及圖片後 第一次點進另一個Activity會直接崩潰 之後就不會了 想請問 該如何解 感謝大大們了 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.161.99.170 ※ 文章網址: http://www.ptt.cc/bbs/AndroidDev/M.1412416006.A.0DD.html

10/04 18:06, , 1F
有加權限嗎?
10/04 18:06, 1F
有 讀取 寫入都有 一開始以為是這個問題 後來還是一樣 ※ 編輯: garychangb (39.9.152.42), 10/04/2014 18:39:58

10/04 18:42, , 2F
崩潰訊息是啥
10/04 18:42, 2F
應用程式終止 @@ 所以才令人苦惱 ※ 編輯: garychangb (220.143.197.16), 10/04/2014 19:31:34

10/04 19:37, , 3F
人家是要問你LOG吧....
10/04 19:37, 3F

10/04 20:00, , 4F
....
10/04 20:00, 4F
https://www.dropbox.com/s/yd9frlynpc0ixlj/log.txt?dl=0 這是我設中斷點 (切換Activity後 startActivity(intent);) 直接崩潰 後面的LOG 都不懂@@ 而且也不知道LOG有沒有 拍謝拍謝 小弟比較笨 ※ 編輯: garychangb (220.143.197.16), 10/04/2014 20:25:20 是 Caused by: java.lang.NullPointerException ??? ※ 編輯: garychangb (220.143.197.16), 10/04/2014 20:29:08

10/04 20:37, , 5F
你的log寫得很清楚阿 執行到oncreate 218時
10/04 20:37, 5F

10/04 20:37, , 6F
reSize null point阿 沒new?
10/04 20:37, 6F

10/04 20:41, , 7F
你的log看不到耶,你說你在startintent就crash, 那你有把
10/04 20:41, 7F

10/04 20:41, , 8F
另一個activity寫到xml裡面嗎
10/04 20:41, 8F
RESIZE那邊好像問題 所以是NullPointerException@@ 有NEW c大 什麼意思不太懂 他正常是執行另一個activity後會出現xml的 還是你的意思是寫log在新的那個的xml裡? ※ 編輯: garychangb (220.143.197.16), 10/04/2014 20:50:06 ※ 編輯: garychangb (220.143.197.16), 10/04/2014 20:53:22

10/04 21:03, , 9F
我只能猜你reSize失敗,return null之後就當了
10/04 21:03, 9F

10/04 21:04, , 10F
程式碼貼出來吧...不然要人通靈嗎= =?
10/04 21:04, 10F
public Bitmap reSize(){ BitmapFactory.Options options = new BitmapFactory.Options(); options.inPreferredConfig = Bitmap.Config.ARGB_8888; int rand= (int)(Math.random()* DickActivity.favfiles.length+1); Bitmap bitMap = BitmapFactory.decodeFile("/sdcard/MindWave/Interest/"+rand+".jpg",options); int width = bitMap.getWidth(); int height = bitMap.getHeight(); // 設置想要的大小 int newWidth = 1320; int newHeight = 1320; // 計算縮放比例 float scaleWidth = ((float) newWidth) / width; float scaleHeight = ((float) newHeight) / height; // 取得想要縮放的matrix參數 Matrix matrix = new Matrix(); matrix.postScale(scaleWidth, scaleHeight); // 得到新的圖片 return bitMap = Bitmap.createBitmap(bitMap, 0, 0, width, height, matrix,true); } ※ 編輯: garychangb (220.143.197.16), 10/04/2014 21:14:46

10/04 21:57, , 11F
第一招:在manifest加android:largeHeap="true"
10/04 21:57, 11F

10/04 21:58, , 12F
還不行的話...一定要1320這麼大?
10/04 21:58, 12F

10/04 21:58, , 13F
覺得400剛好,800極限
10/04 21:58, 13F

10/04 22:04, , 14F
第二招你在decodeFile的options
10/04 22:04, 14F

10/04 22:05, , 15F
options.inSampleSize去縮放大小
10/04 22:05, 15F

10/04 22:06, , 16F
如果可以記得在你不用的bitmap.recycle()(心安的?)
10/04 22:06, 16F

10/04 22:11, , 17F
因為你連續建了兩張很大的bitmap...其實非常危險的
10/04 22:11, 17F

10/04 22:25, , 18F
我的意思是說你有在 AndroidManifest.xml 加上b的activity
10/04 22:25, 18F

10/04 22:25, , 19F
嗎?
10/04 22:25, 19F

10/04 22:37, , 20F
安心的 等等看一下 吃飯中
10/04 22:37, 20F

10/04 22:39, , 21F
應該是有的 不然怎麼會 關掉重開 就可以讀到圖片開始
10/04 22:39, 21F

10/04 22:39, , 22F
正常運作了
10/04 22:39, 22F

10/04 22:39, , 23F
那個是加在 b的active 描述那邊嗎
10/04 22:39, 23F
現在奇怪的就是為什麼第一次會崩潰 而關掉重開卻可以正常的執行 (有讀到我要的照片) ※ 編輯: garychangb (220.143.197.16), 10/04/2014 22:50:24 現在嚴重懷疑是東西沒有存完全 因為現在A執行完後 直接關掉程式 然後再打開 直接執行B 就可以了 還是一直寫 Caused by: java.lang.NullPointerException 所以懷疑可能是檔案沒有存完 但是我有把A關掉@@ 不解~@@ ※ 編輯: garychangb (220.143.197.16), 10/04/2014 23:18:20

10/05 10:07, , 24F
有沒有可能Activity A寫完檔案後沒有flush()及close()?
10/05 10:07, 24F

10/05 11:19, , 25F
這邊很容易有問題DickActivity.favfiles.length+1
10/05 11:19, 25F

10/05 11:19, , 26F
除非你這變數是static final
10/05 11:19, 26F
有flush 也有close 是static耶 那個是從 DickActivity傳過來的static歐 我改改看 說不定是關掉反而傳不 過來 ※ 編輯: garychangb (27.246.30.83), 10/06/2014 00:29:03

10/06 20:42, , 27F
你這樣用不是傳過來而是直接使用 如果DickActivity不存在
10/06 20:42, 27F

10/06 20:42, , 28F
你就會遇到null point
10/06 20:42, 28F
文章代碼(AID): #1KBy863T (AndroidDev)