2014-11-09 10 views
13

Tôi nhận được ngoại lệ lạ trong phân tích của mình gần đây.NullPointerException (@PhoneWindow: onKeyUpPanel: 1002) {main}

java.lang.NullPointerException 
at com.android.internal.policy.impl.PhoneWindow.onKeyUpPanel(PhoneWindow.java:1002) 
at com.android.internal.policy.impl.PhoneWindow.onKeyUp(PhoneWindow.java:1703) 
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2114) 
at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3626) 
at android.view.ViewRootImpl.handleImeFinishedEvent(ViewRootImpl.java:3596) 
at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:2839) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4904) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557) 
at dalvik.system.NativeStart.main(Native Method) 

Tôi đang thiếu một hướng dẫn về những gì tôi có thể làm để ngăn chặn điều này.

+1

Trông giống như một lỗi trong thư viện hỗ trợ trên các thiết bị LG https://code.google.com/p/android/issues/chi tiết? id = 78154 – bart

+0

cảm ơn - đây là thông tin tôi cần - bằng cách nào đó google-kung-fu của bạn tốt hơn tôi ;-) – ligi

+0

PS nếu bạn thêm câu trả lời này, tôi sẽ chấp nhận nó – ligi

Trả lời

22

Cho đến LG sửa chữa vấn đề này (mà có thể là tháng, tùy thuộc vào phải mất bao lâu họ để phát hành firmware mới), thực hiện giải pháp sau đây làm việc cho tôi. Chỉ cần thêm mã sau vào lớp Activity của bạn:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_MENU && "LGE".equalsIgnoreCase(Build.BRAND)) { 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

@Override 
public boolean onKeyUp(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_MENU && "LGE".equalsIgnoreCase(Build.BRAND)) { 
     openOptionsMenu(); 
     return true; 
    } 
    return super.onKeyUp(keyCode, event); 
} 
+0

Câu trả lời hay hơn này – midhunhk

0

Chúng tôi đã thực hiện một biến thể của câu trả lời của Alex. Kể từ khi lỗi chỉ xuất hiện trên các thiết bị 4.1, chúng tôi không thích để ghi đè lên bất cứ điều gì trong các phiên bản sau:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    return mightCrash(keyCode) || super.onKeyDown(keyCode, event); 
} 

@Override 
public boolean onKeyUp(int keyCode, @NonNull KeyEvent event) { 
    if (mightCrash(keyCode)) { 
     openOptionsMenu(); 
     return true; 
    } 

    return super.onKeyUp(keyCode, event); 
} 

/** 
* See https://code.google.com/p/android/issues/detail?id=78154 
*/ 
private boolean mightCrash(int keyCode) { 
    return keyCode == KeyEvent.KEYCODE_MENU && "LGE".equalsIgnoreCase(Build.BRAND) && Build.VERSION.SDK_INT <= Build.VERSION_CODES.JELLY_BEAN; 
} 
Các vấn đề liên quan