Android開發常見問題及解決方案

來源:互聯網
上載者:User

1.R.java消失或解析異常


查看res中資源檔,圖片,xml等。比片檔案名稱不能有大寫不能有空格。
搞定錯誤之後Project->clean就可以了。

2.自訂title欄。
首先要z在values->styles中定義一個style,然後在mainfest檔案中設定android:theme.
最後在Activity中按照這個順序寫:
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 
setContentView(R.layout.activity_main);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_layout);

3.SQLite isFirst和isBeforeFirst方法的區別:
看下面一段代碼
Cursor c = queryTheCursor(type);
        if(c.moveToLast())
        while (!c.isBeforeFirst()) {  
        String tmpContent = new String();  
        tmpContent = c.getString(c.getColumnIndex("content")); 
            contents.add(tmpContent);
            c.moveToPrevious();
        }  
        c.close();  
代碼的作用是逆序輸出表中的內容,第三行如果用的是isFirst()的話就無法輸出第一行,正確做發是用isBeforeFirst()。

4.eclipse刪除空行 
在eclipse中刪除某一行就用ctrl+D快速鍵。如果你想刪除一個檔案中的所有空行呢。
可以用下面方法。
 
1)開啟源碼編輯器 
2)使用快速鍵Ctrl+f 
3)在Find輸入框中輸入:^\s*\n 
4)Replace With輸入框的值為空白 
5)在【Options】選中的"Regular expressions" 
6)點擊【Replace All】按鈕。 
7)OK!

5.getX()和getRawX()的區別
getX()是表示Widget相對於自身左上方的x座標
而getRawX()是表示相對於螢幕左上方的x座標值(注意:這個螢幕左上方是手機螢幕左上方,不管activity是否有titleBar或是否全螢幕),getY(),getRawY()一樣的道理 

6.imagView置中顯示問題
xml設定如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:orientation="vertical" >
    <ImageView
        android:layout_width="wrap_content"
    android:layout_height="wrap_content"
        android:id="@+id/myImageView"
        android:layout_gravity="center"
        android:scaleType="matrix"
        android:src="@drawable/pic" >
    </ImageView>

</LinearLayout>

7.synchronized引發了 java.util.ConcurrentModificationException

如果多個線程同時訪問一個 ArrayList 執行個體,而其中至少一個線程從結構上修改了列表,那麼它必須 保持外部同步。
解決方案:初始化的時候 將ArrayList改為CopyOnWriteArrayList;
原理:
  JAVA中將引用從一個對象移到另外一個對象不需要消耗CPU時間,可以看做是一個原子操作。
  JAVA中如果一個對象仍舊存在引用,則不會被CG回收。      
CopyOnWriteArrayList就是根據以上兩個特點,在列表有更新時直接將原有的列表複製一份,並再新的列表上進行更新操作,完成後再將引用移到新的列表上。舊列表如果仍在使用中(比如遍曆)則繼續有效。如此一來就不會出現修改了正在使用的對象的情況(讀和寫分別發生在兩個對象上),同時讀操作也不必等待寫操作的完成,免去了鎖的使用加快了讀取速度。

8.擷取隨機顏色
並不用每次都產生三個隨機數,下面兩條語句就可以了:
Random myRandom=new Random();
int ranColor = 0xff000000 | mRandom.nextInt(0x00ffffff);

10.去掉Activity的標題列,全螢幕顯示
在manifest檔案中修改對應的Avtivity屬性。
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

11.如何修改應用程式名稱及應用表徵圖
修改程式的表徵圖,修改drawable檔案夾的i→→c_launcher.png表徵圖,把新的表徵圖改名覆蓋就可以了。
如果你要自己的名稱,可以修改AndroidManifest.xml的這個節點,application android:icon="@drawable/ic_launcher",不需要加副檔名。
即使這麼做了,真機調試的時候可能還是會有一些問題,比標沒辦法改變,這個時候就需要在Eclipse中建立一個不同名的項目,然後轉移代碼(有點小麻煩~_~!)。


12.關於調試方法

調試的時候程式如果出錯,一般是查看logcat,看error發生的地方,會提示在程式的第幾行,然後去找就可以了。
但有些錯誤沒辦法定位,那就把日誌輸出成txt,然後去google,baidu吧。

13.Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
錯誤1:請求的欄位在資料庫的表中不存在,一般是大小寫沒寫對;
錯誤2:編程的中途改變表的欄位,實際欄位並沒有改變,解決方案是卸載目前的版本,再安裝調試。

14.android.content.res.Resources.loadXmlResourceParser
在傳遞string類做參數的地方傳了int形變數。

15.android.content.res.Resources$NotFoundException
出現此類異常時,可以根據 Resource ID到資源類R中找相關的資源。比如0x7f030000,對應的是city_item布局檔案,就可以將問題縮小到更小的範圍。對於這類運行時找不到資源,但資源又確實存在的問題,可能的編譯打包時出現問題,沒有將該資源加入。可修改一下該資源,讓編譯器重新編譯。 
還有試一下Project ->Clean一下這個項目 也可以的。

16.互動性的button定義的方法:
首先是準備好按鈕不同狀態的圖片
然後 在res/drawable中定義selector的xml檔案
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 定義按鈕點擊時的圖片 -->
    <item android:drawable="@drawable/addbtn_focus" android:state_pressed="true"/>
    <!-- 定義按鈕預設的圖片 -->
    <item android:drawable="@drawable/addbtn_lost"/>

</selector>
最後Button的background屬性中設定
<Button
            android:id="@+id/btnAdd"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"

            android:background="@drawable/addbtn_selector"/>


17在超級終端中執行程式報錯-Permission deny

參照http://android.stackexchange.com/questions/16814/terminal-permission-denied-need-more-info-on-error-message

主要原因是不能在sdcard中執行,直接進入data/目錄下面建立檔案,然後執行就可以了。


18.從svn匯入工程項目有驚歎號

錯誤提示Archive for required library: 'libs/armeabi/libvudroid.so' in project 'DocumentViewer' cannot be read or is not a valid ZIP file

主要是路徑出了問題

解決方案:在project的build-path將外部包(庫)的引用刪掉就可以了。


19.首次進入帶有EditText的Activity不自動彈出軟鍵盤,再次點擊才彈出。

只有設定manifest的方法有用,在activity的設定中添加:

android:windowSoftInputMode="adjustPan|stateHidden"

20.Gallery中OnItemClickListener與OnItemSelectedListener的區別

OnItemClickListener:只有單擊Gallery中的View才會觸發事件,準確的說是當點擊之後抬起手的時候觸發,滑動不會觸發。

OnItemSelectedListener:當Gallery中的View被選中的時候就會觸發,Galler初次顯示就會觸發一次,選中第一個iew,滑動和單擊都會觸發。

20.從16進位中提取顏色的rgb分量。

主要就是通過位元運算來實現。

public class Main {public static void main(String[] args) {// TODO Auto-generated method stubint INK_COLOR = 0xFF11ef23;float r = getColorR(INK_COLOR );float g = getColorG(INK_COLOR );float b = getColorB(INK_COLOR );System.out.print(r+" "+g+" "+b);}public static float getColorR(int c){ int R = (c & 0x00FF0000 )>>16; return (float) (R/255.0);}public static float getColorG(int c){ int G =(c & 0x0000FF00 )>>8; return (float) (G/255.0);}public static float getColorB(int c){ int B = c & 0x000000FF; return (float) (B/255.0);}}

21. Eclipse中籤名匯出apk崩潰,手動簽名。

工程沒問題,調試也沒問題,但打包的時候eclipse會崩潰,解決方案是手動打包。

首先去工程目錄下的bin檔案夾下找到apk檔案,解壓後刪除META-INF檔案夾,重新打包成壓縮包,改尾碼名為.apk

首先是簽名(假設你已經在根目錄下生產了密鑰keystore):

進入java安裝目錄/bin檔案夾下:

./jarsigner  -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore android.keystore ~/Output.apk android

然後是最佳化,進入sdk的tools檔案夾下,運行。

./zipalign -v 4 ~/Output.apk Output_realase.apk

目前的目錄下Output_realase.apk就是打包簽名好的apk了。

22.android.view.InflateException: Binary XML file line #異常的解決

建立自訂view的時候,碰到 android.view.InflateException: Binary XML file line #異常,反覆研究

後發現是缺少一個構造器造成。

public MyView(Context context,AttributeSet paramAttributeSet){      super(context,paramAttributeSet);}

補齊這個構造器,異常就消失了,

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.