1. 程式人生 > >關於令人抓狂的 E/HAL: load: id=gralloc != hmi->id=gralloc

關於令人抓狂的 E/HAL: load: id=gralloc != hmi->id=gralloc

我在網上搜索了挺多資料的,很多都是重複在說許可權問題,然而我報這種錯誤的大部分程式都恰好不是因為許可權問題,而是一些特別細節的問題......

按照我的經驗,我的建議是:

找控制元件程式碼的錯誤!

報錯原因:一般是由於取不到控制元件物件、控制元件的點選事件執行的時候得到了空值等和初始化控制元件有關的原因造成的。

比如...

private Button bt;    //宣告
bt.setOnclickListener(new OnClickLisenter(){....});    //呼叫

有問題嗎?有啊!

1、xml佈局的控制元件

     檢查是不是在java程式碼中漏寫了findViewById()

啊!!!

    上面就漏了bt=(Button)findViewById(R.id...);這句話

2、java動態新建控制元件/自定義控制元件出錯

     檢查是否忘記建立物件!!!

     上面就漏了 bt=new Button(); 這句話

所以上面的程式碼正確的改法是:

private Button bt;
//如果是獲取xml中寫死的固定控制元件物件,則:
bt=(Button)findViewById(R.id...);    
//如果採用動態建立控制元件,則上一句程式碼改為:
//bt=new Button();
 bt.setOnclickListener(new OnClickLisenter(){....});

3、控制元件EditView(文字輸入框)取值為空,也會報這個錯

不要在onCreate()或者其他必先執行的方法(例如構造方法)中直接取文字框的值。

      這是大忌寫法,因為此時使用者啥也沒輸入,取不到值,控制元件初始化失敗,會報錯並閃退的

private EditView ev;
private void OnCreate(){
    ev=(EditView)findViewById(R.id...);    
    ev.getText();    //大忌寫法
}

4、有關集合的泛型也一定要檢查好<>內的是不是一致的,以免出現泛型的型別轉換異常

5、控制元件的點選或其他事件的監聽方法放錯了位置或者程式碼寫錯!

     程式碼寫錯:puvlic void onClick(View v)漏了關鍵的“View v”

     不規範寫法\放錯地方:  新手寫點選事件的時候,這兩種寫法都不報錯,但是,有時候執行會,閃退哦。

private Button bt;
private OnClickLisenter ;
private void OnCreate(){
    bt=(Button)findViewById(R.id...);   
    mylisten=new OnClickLisenter(){....};
    bt.setOnclickListener(mylisten);
}
 
private Button bt;
private OnClickLisenter mylisten=new OnClickLisenter(){....};
private void OnCreate(){
    bt=(Button)findViewById(R.id...);   
    bt.setOnclickListener(mylisten);
}