2011-11-26 2 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()); 
    } 
    } 

}안드로이드 의도 제공 nullpointer 예외

I 라인

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

"공공 무효 푸시 (문자열 ID, 의도 의도)"나는 NullPointerException이 만들 수있는 하나의 이유를 발견하고는 당신이 방법을 사용 할 수있다 다른 활동에 대해 동일한 id (String)를 사용합니다.

null 포인터 예외를 만드는 이유는 동일한 id (String) 및 Android mamory managemnt와 함께 push 메소드를 호출하면 해당 이름과 연결된 이전 활동이 삭제되고 pop 메소드 중에 null이 반환됩니다.

희망이 답변 버그를 해결하는 데 도움이됩니다.

건배, Viraj

+1

@Viraj .. 너 천재 야. D – Maverick

1

Javadoc가 아이디를 알 수 없거나 그 활동이 현재

어쩌면 당신은 활동을 통해 인스턴스되지 않았거나 인스턴스화되지 않은 경우 getActivity

관련 활동 객체, 또는 null을 반환한다고 그것은 안드로이드에 의해 파괴되었습니다. 그런 다음 시작을 고려해야합니다. 코드를보고

감사합니다, 스테판

+0

음 .. 솔직히 말해서, 당신의 요지는 ... 이해할 수는 있지만 왜 그것이 물체를 파괴하는지 알 수는 없습니다. – Maverick

+0

시스템이 안드로이드에서 메모리를 필요로 할 때 활동이 파괴됩니다. 당신은 결정하지 않지만 프로그램은 이러한 종류의 경우를 처리 할 준비가되어 있어야합니다. 메모리 누수에 전념하는 것보다 훨씬 더 낫습니다. – Snicolas