Android-android仿新浪微博App錯誤筆記

本人是android新手,想自己寫個app練手,此篇博文記錄一下項目中碰到的問題以及解決方法,希望自己從中能有所長進。因爲已經錯過了很多,所以錯誤順序不是開發順序。

 

1.java.lang.IllegalStateException: ScrollView can host only one direct child

解決方法:ScrollView內部只能有一個子元素,即不能並列兩個子元素,所以需要把所有的子元素放到一個LinearLayout內部或RelativeLayout等其他佈局方式中。

 

2.關於如何引用開源項目

解決方法:http://www.devnote.cn/article/266.html  關於這兩種引用方法,第一種,很易於操作,但是把代碼傳出來,需要把引用到的項目都一起傳出來。第二種方法可以避免這種麻煩(他這裏是把開源代碼打包成jar,如果代碼不是很多的話可以把代碼拷貝到自己的項目,需要的資源文件也一併拷到自己的項目中)。

 

3.Unable to execute dex:Multipe dex files define

解決方法:http://blog.csdn.net/mxlxiao7/article/details/8978930  我參考的這篇博客 我遇到的是第六種情況,我把libs文件夾 右鍵->BUILD PATH->Use as source folder 這樣也導致了重複引用,解決方法是右鍵項目->properties->java bulid path->source 把libs目錄移除掉即可。

 

4.SQLiteOpenHelper 操作數據庫疑惑

疑惑:一開始不太明白onCreate的調用時機,參考了幾篇博客後瞭解到它是在實例化SQLiteOpenHelper類或者是你自己重寫的這個類的子類時會把name參數做相關檢測,如果沒name這個數據庫,此時會調用onCreate。如果之前傳入的version爲1。下次傳個大於1的數,它會檢測到版本發生變化,此時會調用onUpgrade。

注:一般版本發生變化後,數據庫結構發生變化時,要保存原表的數據,這時要備份,我的程序這邊因爲只有一列數據,我在onUpgrade函數中把原表刪除,重新建了個表

 

5.RotateAnimation實現勻速旋轉的效果

注:RotateAnimation rotateAnimation  = new    RotateAnimation(0f,359f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f );

rotateAnimation.setDuration(500);

這樣設置後每轉完一圈會有一個明顯的卡頓。

解決方法:359f----->35900f  rotateAnimation.setDuration(50000);原來是1秒(即1000毫秒)轉360度,那麼可以改成100秒(即100000毫秒)轉36000度。在100秒鐘後才重啓一次,重啓時的卡頓效果基本上就可以忽略了。

 

6.listview中我加了許多數據,但是隻顯示一條數據

錯誤原因:我的佈局文件listview外面嵌套了一層scrollview,只要把scrollview去掉就好,但是我這樣做爲什麼會引起這種錯誤還不清楚

 

7.tabActivity以及子activity的生命週期

疑惑:我寫的微博是用的tabactivity,雖然被遺棄了,但是因爲沒有用過fragment,所以暫時不考慮換。可能以後會換成fragment。這裏我碰到的問題是我自己重寫了actionbar,在每個子Activity 的onCreate裏面繪製,但是tabActivity在切換tab的時候各個子Activity的onCreate只會調用一次,這樣actionbar就會出現錯亂。

解決方法:切換tab只會調用子Activity的onResume生命週期函數,所以actionbar寫在onresume中就好。

 

8.It is indirectly referenced from required .class file

解決方法:你正要使用的類調用了另一個類,而這個類又調用了你正在使用的這個類,因爲我用的開源庫,把部分文件打成jar包了,主要測試類沒打。而是把它複製到項目中了,導致用的時候,jar包裏依賴它的文件出錯,解決方法就是全部考到項目中。。

 

9.Unable to find app for caller android.app.ApplicationThreadProxy

解決方法:引起這個錯誤的原因,是因爲intent中加了太多東西,比如加了一個圖片,可以考慮其他方式實現。

http://stackoverflow.com/questions/18096607/using-crop-intent-getting-java-lang-securityexception-unable-to-find-app-for-ca

 

10.TabActivity中無法使用BindService

解決方法:糾結了一下午,不知道是什麼引起的這個錯誤 Connection一直獲取不到,在單獨的activity中都可以獲取到,後來想可能是這方面的原因,一查果然。解決方法是在bindService 和unbindService的地方都加上 getApplicationContext().bindService 先獲取上下文環境才能正常綁定

 

11.android.content.res.Resources$NotFoundException: String resource ID #0x1

錯誤原因:textview的setText(int resid)重載方法,參數如果傳一個int的值,他會把這個值當作resource的id去工程目錄下找,結果就會報錯。

解決方法:int值後面+"",強制轉爲String。或者int值轉換爲String或者CharSequence

 

12.微博字符串處理

話題正則匹配:#([a-zA-Z0-9-_\u4E00-\u9FA5]*)# 

@的人正則匹配:@[a-zA-Z0-9-_\u4E00-\u9FA5]+  

表情正則匹配:(\\[([a-zA-Z\u4E00-\u9FA5]*)\\]) 

網頁正則匹配用的text自帶的autolink屬性但是發現它有時候會解析出錯,暫時還沒手動匹配。

split函數:如果沒有匹配到則會返回全部字符串,且數組長度爲1,如果是這種   aaa[b]  要匹配[b] 只會返回aaa,且數組長度也爲1,所以要區分這兩種情況 ,我處理的方法就是在傳入字符串之前,先做一些處理 "]"後加空格  正則匹配到的話題後面加空格 也就是”#“後面加空格 ,這樣就會避免數組越界。

 

13.實現固定在屏幕底部的工具欄

解決方法:用線性佈局,上面放一個scrollview並設置它的weight爲1,想固定的放在下面即可

 

<LinearLayoutt>

<ScrollView
   android:layout_weight="1">

</ScrollView>

<Button android:layout_alignParentBottom="true"/>

</LinearLayout>

 

 

 

 

 

14.moveToFirst和moveToNext

錯誤情況:我先用moveToFirst判斷是否有記錄,然後在用while(moveToNext)取數據,發現怎麼取都會少一個數據,第一條數據總是取不到,不知道爲什麼

解決方法:把循環換成這個for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext())   其實我並不是很理解,因爲moveToNext是從第0個開始的,爲什麼會少一條數據,還有待求證

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章