日積月累--exception記錄

關於Android的sqlite數據類型text長度限制的問題?

這也許不能稱爲一個bug,可是比較坑,因此貼在了這裏。在Android的sqlite中存儲一個字符串,發現老是數據丟失,我去查詢sqlite官方的數據類型text長度很大,能知足個人要求,可是爲何Android中的sqlite就知足不了了呢!導出查看db文件,發現字符長度只有8192個字符,顯然數據是丟失了。暫且記錄在這裏。還有一點須要說明的是rom爲flyme5.0。html

[2017年2月6日15:14:47]java

Android 中有關繼承Fragment的一些錯誤

解決方案:http://blog.sina.com.cn/s/blog_c58a37cb0102vibh.htmlandroid

[2017年1月16日17:25:03]git

java.lang.NullPointerException (no error message)

解決方案:http://stackoverflow.com/questions/39183674/java-lang-nullpointerexception-no-error-message
[2017年1月14日10:36:22]github

Error:error: File is case-insensitive equivalent to: \app\build\intermxxxxxxxxxxxxxxxx

解決方案:Android res文件夾下的全部文件不能有大寫字符,若是出現大寫字符會致使R.java沒法生成
Android項目是的R文件是由系統生成的資源的定義,若是出同衝突,錯誤,那麼android 沒法生成R文件 ,即便有時候你xml文件沒有錯誤,他都沒法生成。針對此問題,總結如下幾個方面的緣由:sql

  1. xml自己有錯誤
    R.java這個文件是會自動生成的,可是若是你不當心xml文件寫錯了,或者不當心在編輯xml的時候點擊了run(其實這個時候會運行這個xml文件,會生成一個同名的xml文件,後綴爲xx.out.xml),而後正巧你遊clear了一下項目,你可能會發現gen下面的R.java的文件沒有了,這個在剛開始的時候很氣人,真不知道怎麼解決,後來發現,只要xml文件有問題,系統是絕對不會給你自動生成這個R.java文件,由於他要參照你的每張xml裏的數據來生成R.java,因此天然就生成不了了。雖然知道了緣由可是問題頭疼,假如項目的layout xml文件有幾十個,這個時候怎麼辦,難道要一個一個xml的看嗎,呵呵,其實也不是,把console中的信息clear一下,而後再clear項目一下,這個時候,console中會有不少紅色的信息,參照這個確定能準確的找到哪一個文件報錯了。
    下面這個事誤運行了xml文件,能夠看到gen的包不是空的,R.java文件也存在,而且明確的支出了是layout包中的錯誤ubuntu

  2. 編碼格式不正確
    有時候因爲編碼格式問題,形成沒法生成R文件,此時後,把編碼格式變成GBK或者UTF–8便可api

  3. 配置問題,轉義字符的問題
    由於XML有些特殊字符須要轉義,例如」<>&;」’ 「等

[2016-9-22 17:53:35]android-studio

Error:Execution failed for task ‘:transformClassesWithJarMergingForDebug’.> com.android.build.api.transform.TransformException: java.util.zip.ZipException:

例如:Error:Execution failed for task ‘:transformClassesWithJarMergingForDebug’.bash

com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: android/support/multidex/MultiDex$V14.class

Error:Execution failed for task ‘:transformClassesWithJarMergingForDebug’.

com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: android/support/annotation/ColorRes.class

這是因爲導包時重複形成的。解決這個問題有個比較霸氣的方法:

configurations {
    all*.exclude group: 'com.android.support', module: 'support-v4' all*.exclude group: 'com.android.support', module: 'support-annotations' }
  • 1
  • 2
  • 3
  • 4


retrofit的baseurl不支持正斜槓

https://github.com/square/retrofit/issues/498#issuecomment-44097930



[2016-9-5 16:19:47]

Dialog中getOwnerActivity()爲空

這個能夠經過dialog.setOwnerActivity( )進行設置。

在使用v7包構建通知時,設置PendIntent出現異常getSlotFromBufferLocked: unknown buffer: 0xb36a9630

[2016-8-22 14:59:19]這個問題也着實的讓人摸不着頭腦,用的是最普通的通知,代碼以下:

NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        NotificationCompat.Builder builder = new NotificationCompat.Builder(context); Intent contentIntent = new Intent(context, MessageActivity.class); PendingIntent contentPendIntent = PendingIntent.getActivity(context, 0, contentIntent, 0); Notification notification = builder .setContentTitle(context.getString(R.string.app_name)) .setContentText(bundle.getString(JPushInterface.EXTRA_MESSAGE)) .setWhen(System.currentTimeMillis()) .setSmallIcon(R.mipmap.jpush_notification_icon) .setColor(Color.parseColor("#00EEFF")) .setLargeIcon(BitmapFactory.decodeResource( context.getResources(), R.mipmap.ic_launcher)) .setContentIntent(contentPendIntent) .build(); notification.flags |= Notification.FLAG_AUTO_CANCEL; manager.notify(1, notification); 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

我嘗試添加:contentIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);竟然把問題解決了。
有開發者將這個異常提交到了Google issues:https://code.google.com/p/android/issues/detail?id=192357#makechanges
其實也不難分析,從異常的字面意思來進行分析,能夠看出和堆棧仍是有點關係的。



cm的多用戶模式致使的沒法安裝應用問題

在這種模式下,應用卸載,只是卸載了當前用戶的。其餘用戶的應用並無卸載。

AndroidStudio在打包應用時老是出錯,運行時沒有錯

通常是lint檢查形成了,在該項目的build.gradle下添加:

android{
    lintOptions{
        checkAllWarnings false abortOnError false } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6


項目路徑的命名不符合ASCII編碼標準極可能構建不成功

所謂符合ASCII標準,粗略的講就是不要出現漢字。由於漢字不在ASCII標準裏面。這個異常告訴咱們,項目路徑不能用漢字命名

AndroidStudio不打印exception的一個緣由

最近在項目的全局狀態下,對異常進行了捕獲(包括fatal級別的異常)。忽然發現AS再也不打印該異常了。這是AS不打印異常的一種狀況。

若是fragment的add動做,沒有經過事件提交,而在此使用isAdd則還會顯示沒有添加

須要執行commit才能生效。

點擊GridView的某個條目時報的空指針問題

假如你點擊條目1,可是你在GridView的監聽事件裏面訪問了其餘沒有被顯示的子view,此時會報空指針。所以對GridView全部子view的操做不要放在其監聽裏面。舉個例子:
圖片名稱
例如在上圖有如下操做,當點擊某個條目時該條目背景色變爲藍色,其餘條目顏色爲白色,此時可能就牽扯到對全部子view的遍歷。
圖片名稱
但若是子view被遮擋了,例如被鍵盤遮擋了,此時若是再點擊某個條目那些被遮擋的子view就會報空指針。
這樣的邏輯實現最好放在adapter中。

Android的Uri獲取路徑經常是不許確的,尤爲是文件的uri

解決辦法:較爲完善的解決辦法就是,直接對uri進行操做,不要嘗試獲取路徑,若是須要用到文件能夠這樣寫:

//此處是獲取流,你能夠經過流來達到上傳文件的目的 getApplicationContext().getContentResolver().openInputStream(uri); //此處是圖片的轉化 Bitmap bitmap =BitmapFactory.decodeStream(getApplicationContext().getContentResolver().openInputStream(uri))
  • 1
  • 2
  • 3
  • 4

ubuntu下沒法啓動studio,異常:Glide Process ‘command ‘git」 finished with non-zero exit value 128

解決方案:這通常是因爲studio重複開啓致使的。進程沒有殺死,解決辦法是打開系統監視器,關閉之。

使用Glide加載大量圖片出現OOM的一種解決方案 E/PriorityExecutor(23909): at dalvik.system.VMRuntime.newNonMovableArray(Native Method)

exception詳情:

05-21 14:15:29.623: E/art(23909): Throwing OutOfMemoryError "Failed to allocate a 4147212 byte allocation with 1550998 free bytes and 1514KB until OOM" 05-21 14:15:29.630: E/PriorityExecutor(23909): Request threw uncaught throwable 05-21 14:15:29.630: E/PriorityExecutor(23909): java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: Failed to allocate a 4147212 byte allocation with 1550998 free bytes and 1514KB until OOM 05-21 14:15:29.630: E/PriorityExecutor(23909): at java.util.concurrent.FutureTask.report(FutureTask.java:93) 05-21 14:15:29.630: E/PriorityExecutor(23909): at java.util.concurrent.FutureTask.get(FutureTask.java:163) 05-21 14:15:29.630: E/PriorityExecutor(23909): at com.bumptech.glide.load.engine.executor.FifoPriorityThreadPoolExecutor.afterExecute(FifoPriorityThreadPoolExecutor.java:96) 05-21 14:15:29.630: E/PriorityExecutor(23909): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1120) 05-21 14:15:29.630: E/PriorityExecutor(23909): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 05-21 14:15:29.630: E/PriorityExecutor(23909): at java.lang.Thread.run(Thread.java:818) 05-21 14:15:29.630: E/PriorityExecutor(23909): at com.bumptech.glide.load.engine.executor.FifoPriorityThreadPoolExecutor$DefaultThreadFactory$1.run(FifoPriorityThreadPoolExecutor.java:118) 05-21 14:15:29.630: E/PriorityExecutor(23909): Caused by: java.lang.OutOfMemoryError: Failed to allocate a 4147212 byte allocation with 1550998 free bytes and 1514KB until OOM 05-21 14:15:29.630: E/PriorityExecutor(23909): at dalvik.system.VMRuntime.newNonMovableArray(Native Method) 05-21 14:15:29.630: E/PriorityExecutor(23909): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method) 05-21 14:15:29.630: E/PriorityExecutor(23909): at android.graphics.BitmapFactory.decodeStreamInternal(BitmapFactory.java:681) 05-21 14:15:29.630: E/PriorityExecutor(23909): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:657) 05-21 14:15:29.630: E/PriorityExecutor(23909): at com.bumptech.glide.load.resource.bitmap.Downsampler.decodeStream(Downsampler.java:329) 05-21 14:15:29.630: E/PriorityExecutor(23909): at com.bumptech.glide.load.resource.bitmap.Downsampler.downsampleWithSize(Downsampler.java:220) 05-21 14:15:29.630: E/PriorityExecutor(23909): at com.bumptech.glide.load.resource.bitmap.Downsampler.decode(Downsampler.java:153) 05-21 14:15:29.630: E/PriorityExecutor(23909): at com.bumptech.glide.load.resource.bitmap.StreamBitmapDecoder.decode(StreamBitmapDecoder.java:50) 05-21 14:15:29.630: E/PriorityExecutor(23909): at com.bumptech.glide.load.resource.bitmap.StreamBitmapDecoder.decode(StreamBitmapDecoder.java:19) 05-21 14:15:29.630: E/PriorityExecutor(23909): at com.bumptech.glide.load.resource.bitmap.ImageVideoBitmapDecoder.decode(ImageVideoBitmapDecoder.java:39) 05-21 14:15:29.630: E/PriorityExecutor(23909): at com.bumptech.glide.load.resource.bitmap.ImageVideoBitmapDecoder.decode(ImageVideoBitmapDecoder.java:20) 05-21 14:15:29.630: E/PriorityExecutor(23909): at com.bumptech.glide.load.resource.gifbitmap.GifBitmapWrapperResourceDecoder.decodeBitmapWrapper(GifBitmapWrapperResourceDecoder.java:121) 05-21 14:15:29.630: E/PriorityExecutor(23909): at com.bumptech.glide.load.resource.gifbitmap.GifBitmapWrapperResourceDecoder.decodeStream(GifBitmapWrapperResourceDecoder.java:94) 05-21 14:15:29.630: E/PriorityExecutor(23909): at com.bumptech.glide.load.resource.gifbitmap.GifBitmapWrapperResourceDecoder.decode(GifBitmapWrapperResourceDecoder.java:71) 05-21 14:15:29.630: E/PriorityExecutor(23909): at com.bumptech.glide.load.resource.gifbitmap.GifBitmapWrapperResourceDecoder.decode(GifBitmapWrapperResourceDecoder.java:61) 05-21 14:15:29.630: E/PriorityExecutor(23909): at com.bumptech.glide.load.resource.gifbitmap.GifBitmapWrapperResourceDecoder.decode(GifBitmapWrapperResourceDecoder.java:22) 05-21 14:15:29.630: E/PriorityExecutor(23909): at com.bumptech.glide.load.engine.DecodeJob.decodeFromSourceData(DecodeJob.java:190) 05-21 14:15:29.630: E/PriorityExecutor(23909): at com.bumptech.glide.load.engine.DecodeJob.decodeSource(DecodeJob.java:177) 05-21 14:15:29.630: E/PriorityExecutor(23909): at com.bumptech.glide.load.engine.DecodeJob.decodeFromSource(DecodeJob.java:128) 05-21 14:15:29.630: E/PriorityExecutor(23909): at com.bumptech.glide.load.engine.EngineRunnable.decodeFromSource(EngineRunnable.java:122) 05-21 14:15:29.630: E/PriorityExecutor(23909): at com.bumptech.glide.load.engine.EngineRunnable.decode(EngineRunnable.java:101) 05-21 14:15:29.630: E/PriorityExecutor(23909): at com.bumptech.glide.load.engine.EngineRunnable.run(EngineRunnable.java:58) 05-21 14:15:29.630: E/PriorityExecutor(23909): at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422) 05-21 14:15:29.630: E/PriorityExecutor(23909): at java.util.concurrent.FutureTask.run(FutureTask.java:237) 05-21 14:15:29.630: E/PriorityExecutor(23909): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 05-21 14:15:29.630: E/PriorityExecutor(23909): ... 3 more
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

這個問題在glide的github的issues上討論的也很熱烈。我如今的這個項目中的加載的圖片量很大,典型的button+fragment佈局。可是每一個頁面都有不少圖片,每一個fragment是由listview組成(條目爲大圖片),單獨操做每一個頁面沒有問題,可是遇到不斷切換時不斷的OOM提示,issues上的不少方法都試了,仍是不行,非常苦惱。並且這個問題在Android5.0如下的機器不存在,一想會不會是Dalvik虛擬機更改形成的,因而再仔細排查log,終於看到了其中有個關於dalvikdalvik.system.VMRuntime.newNonMovableArray(Native Method)的提示,stackoverflow上有這個問題的答案:添加標籤<application android:largeHeap="true"問題解決。另外,這個屬於內存優化的問題,除了申請大內存之外,還要搞好fragment的切換。該隱藏的隱藏,該顯示的現實。

Android Packager: [main] java.util.zip.ZipException: duplicate entry: classes.dex

解決方法:rebuild或者在build.gradle中刪除重複的包。

Error:Execution failed for task ‘:enterpriseplat:dexDebug’.

com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process ‘command ’ \bin\java.exe」 finished with non-zero exit value 2

解決辦法:

defaultConfig {
     multiDexEnabled true }
  • 1
  • 2
  • 3

http://stackoverflow.com/questions/29460443/execution-failed-for-task-appdexdebug-com-android-ide-common-process-proces
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/1218/3789.html

Java.lang.IllegalStateException: fragment already active

問題分析

發生這個異常的緣由,看源碼:

public void setArguments(Bundle args) { if (mIndex >= 0) { throw new IllegalStateException("Fragment already active"); } mArguments = args; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

那麼什麼是mIndex呢?繼續分析問題,首先看看這個字段的定義:

// Index into active fragment array. int mIndex = -1;
  • 1
  • 2

原始值是-1,再看看它是在哪兒賦值的呢?找源碼:

public FragmentState(Parcel in) { mClassName = in.readString(); mIndex = in.readInt(); mFromLayout = in.readInt() != 0; mFragmentId = in.readInt(); mContainerId = in.readInt(); mTag = in.readString(); mRetainInstance = in.readInt() != 0; mDetached = in.readInt() != 0; mArguments = in.readBundle(); mSavedFragmentState = in.readBundle(); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

看到了嗎?是Parcel 賦予mIndex的,而Bundle就是Parcel的一個實現類,因此你已經進行了一次fragment.setAraugment(bundle)以後再執行該方法就會出現上面的問題。
FragmentState是Fragment的一個內部類,另外看源碼你會發現mIndex還能夠經過set方法進行賦值,不過通常不這樣作。

解決辦法:

若是是第一次set就使用fragment.setAraugment(bundle)若是不是第一次就使用`fragment.getArguments().putAll(bundle)
解決思路來源:http://stackoverflow.com/questions/10364478/got-exception-fragment-already-active

Error:Execution failed for task ‘:enterpriseplat:mergeDebugResources’. > Some file crunching failed,

AS問題解決系列3—iCCP: Not recognizing known sRGB profile

導入AndroidStudio項目時出現的異常

Error:(1, 0) Plugin is too old, please update to a more recent version, or set ANDROID_DAILY_OVERRIDE environment variable to 「8051cdccc746d532152541ee35015fd83699f14」

問題來源:致使這個錯誤的緣由,大可能是基於gradle的插件版本高,形成的。
解決辦法:將gradle依賴的一些插件的版本改的低一些。或者更新(不過,大多更新失敗,由於被牆的緣故)
詳細的解決方法:http://stackoverflow.com/questions/29063968

導入moudle時出現:Error:Could not run build action using Gradle installation ‘C:\Program Files\Android\Android Studio\gradle\gradle-2.8’.

解決辦法:能夠將導入的moudle的build.gradle dependencies {
classpath 'com.android.tools.build:gradle:1.3.1'
}
刪除,使其使用本地版本的gradle。解決辦法不少,這是其中一種。

Error:Cannot locate factory for objects of type DefaultGradleConnector, as ConnectorServiceRegistry has been closed.

解決辦法:重啓;
辦法來源:http://stackoverflow.com/questions/27724883/gradle-project-refresh-failed-android-studio


Caused by: java.lang.ClassNotFoundException這個異常通常發生在使用ADT進行Android開發的狀況下,解決辦法:

思路來源:Caused by: java.lang.ClassNotFoundException[android的終極解決錯誤]
其實通常分爲2種狀況:

一、啓動activity的時候,在AndroidManifest.xml 可能壓根你就忘了添加一個activity,或者說activity的包名或者名字寫錯了,這個犯錯概率很高的

二、使用的class,是一個外部的JAR包,當在工程中編譯使用時,發佈成APK並無包含JAR文件,因此APK在執行的時候就找不到JAR文件,會報錯。
解決辦法


來自EventBus的異常

1.1 .MainActivity and its super classes have no public methods with the @Subscribe annotation

解決辦法:在onEvent()方法上添加註解@Subscribe。

1.2 Caused by: de.greenrobot.event.EventBusException: Subscriber class com.cis.studytest.MainActivity and its super classes have no public methods with the @Subscribe annotation

解決方法:沒有找到@Subscribe註解的public修飾的方法,所以須要將onEvent等方法修改成public修飾便可.由於:Starting with EventBus 2.2 we enforced methods to be public (might change with annotations again)

關於閃退的一個緣由

閃退的緣由有不少,例如activity沒註冊,不過這都是一些能夠很快速解決的。不過因爲編譯器的緣由,尤爲是Adt(eclipse adt)開發,閃退若是拋出一些什麼classnot found,apk找不到,zygote找不到等等,這時請從新打包,應該能解決,這是很坑的異常。

相關文章
相關標籤/搜索