2011-11-26 87 views
0
package com.org.myOxygen.activities; 

import java.util.Stack; 

import android.app.Activity; 
import android.app.ActivityGroup; 
import android.app.LocalActivityManager; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.Window; 

public class ApplicationTabActivityGroup extends ActivityGroup{ 

private static Stack<String> stack; 

@Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (stack == null) stack = new Stack<String>(); 

    //start default activity 
    push("Search Activity", new Intent(this, ApplicaitonActivity.class)); 

    } 

    @Override 
    public void finishFromChild(Activity child) { 

      pop(); 
    } 

    @Override 
    public void onBackPressed() 
    { 

      pop(); 
    } 


    public void push(String id, Intent intent) 
    { 
    Window window = getLocalActivityManager().startActivity(id, intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); 
    if (window != null) { 
     stack.push(id); 
     setContentView(window.getDecorView()); 
    } 
    } 

    public void pop() 
    { 
    if (stack.size() == 1) finish(); 
    LocalActivityManager manager = getLocalActivityManager(); 

    manager.destroyActivity(stack.pop(), true); 

    if (stack.size() > 0) 
    { 
     Intent lastIntent = manager.getActivity(stack.peek()).getIntent(); 
     Window newWindow = manager.startActivity(stack.peek(), lastIntent); 
     setContentView(newWindow.getDecorView()); 
    } 
    } 

}Android的意圖給空指針異常

我上線

Intent lastIntent = manager.getActivity(stack.peek()).getIntent(); 

得到錯誤的錯誤是NullPointerException

那裏可能有什麼問題?

編輯 - 1

11-26 14:58:57.256: E/AndroidRuntime(557): FATAL EXCEPTION: main 
11-26 14:58:57.256: E/AndroidRuntime(557): java.lang.NullPointerException 
11-26 14:58:57.256: E/AndroidRuntime(557): at com.org.myOxygen.activities.SearchTabActivityGroup.pop(SearchTabActivityGroup.java:59) 
11-26 14:58:57.256: E/AndroidRuntime(557): at com.org.myOxygen.activities.SearchTabActivityGroup.onBackPressed(SearchTabActivityGroup.java:36) 
11-26 14:58:57.256: E/AndroidRuntime(557): at android.app.Activity.onKeyUp(Activity.java:1888) 
11-26 14:58:57.256: E/AndroidRuntime(557): at android.view.KeyEvent.dispatch(KeyEvent.java:1061) 
11-26 14:58:57.256: E/AndroidRuntime(557): at android.app.Activity.dispatchKeyEvent(Activity.java:2068) 
11-26 14:58:57.256: E/AndroidRuntime(557): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1643) 
11-26 14:58:57.256: E/AndroidRuntime(557): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:788) 
11-26 14:58:57.256: E/AndroidRuntime(557): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:788) 
11-26 14:58:57.256: E/AndroidRuntime(557): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:788) 
11-26 14:58:57.256: E/AndroidRuntime(557): at android.widget.TabHost.dispatchKeyEvent(TabHost.java:275) 
11-26 14:58:57.256: E/AndroidRuntime(557): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:788) 
11-26 14:58:57.256: E/AndroidRuntime(557): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:788) 
11-26 14:58:57.256: E/AndroidRuntime(557): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1667) 
11-26 14:58:57.256: E/AndroidRuntime(557): at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1102) 
11-26 14:58:57.256: E/AndroidRuntime(557): at android.app.Activity.dispatchKeyEvent(Activity.java:2063) 
11-26 14:58:57.256: E/AndroidRuntime(557): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1643) 
11-26 14:58:57.256: E/AndroidRuntime(557): at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2471) 
11-26 14:58:57.256: E/AndroidRuntime(557): at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2441) 
11-26 14:58:57.256: E/AndroidRuntime(557): at android.view.ViewRoot.handleMessage(ViewRoot.java:1735) 
11-26 14:58:57.256: E/AndroidRuntime(557): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-26 14:58:57.256: E/AndroidRuntime(557): at android.os.Looper.loop(Looper.java:123) 
11-26 14:58:57.256: E/AndroidRuntime(557): at android.app.ActivityThread.main(ActivityThread.java:4627) 
11-26 14:58:57.256: E/AndroidRuntime(557): at java.lang.reflect.Method.invokeNative(Native Method) 
11-26 14:58:57.256: E/AndroidRuntime(557): at java.lang.reflect.Method.invoke(Method.java:521) 
11-26 14:58:57.256: E/AndroidRuntime(557): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
11-26 14:58:57.256: E/AndroidRuntime(557): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
11-26 14:58:57.256: E/AndroidRuntime(557): at dalvik.system.NativeStart.main(Native Method) 

這裏是堆棧跟蹤!

+0

您可能需要更新與實際堆棧跟蹤您的文章。 –

回答

2

通過看你的代碼,我已經找到一個理由,可以創建NullPointerException異常,那就是, 可能是你正使用方法「公共無效的push(串ID,意圖意圖)」使用相同的id(字符串)進行不同的活動。

它創建空指針異常的原因是,當您使用相同的id(String)調用push方法並且Android內存管理器銷燬與該名稱關聯的舊活動時,並且在您的pop方法期間它將返回null。

希望這個答案有助於解決錯誤。

乾杯, 的Viraj

+1

@Viraj ..你是天才人:D – Maverick

1

的Javadoc指出getActivity將返回

相關的活動對象或null如果ID是未知的或者其 活動目前未實例化

也許你的活動不實例化或它已被android銷燬。 然後您應該考慮啓動它。

問候, 斯特凡

+0

好吧..說實話,你的觀點是有道理的......但無法弄清楚爲什麼它會摧毀對象。當系統需要android上的內存時, – Maverick

+0

活動被破壞。你不能決定,但是你的程序應該準備好處理這種情況。對我來說,比對內存泄漏重頭戲要好得多。 – Snicolas