2011-11-26 48 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