android – 返回活动时的NullPointerException

android – 返回活动时的NullPointerException,第1张

概述我正在调试我的应用程序,并获得一个“奇怪的”异常.它不一致,因此很难解决.我将在下面发布一些代码. 给出我的异常的类: private ArrayList<String> idList;@Overridepublic void onCreate( Bundle savedInstanceState ){ super.onCreate( savedInstanceState ); 我正在调试我的应用程序,并获得一个“奇怪的”异常.它不一致,因此很难解决.我将在下面发布一些代码.

给出我的异常的类:

private ArrayList<String> IDList;@OverrIDepublic voID onCreate( Bundle savedInstanceState ){    super.onCreate( savedInstanceState );    if ( IDList == null )    {        IDList = new ArrayList<String>();    }}@OverrIDepublic voID finishFromChild( Activity child ){    LocalActivityManager manager = getLocalActivityManager();    int index = IDList.size()-1;    if ( index < 1 )    {        finish();        return;    }    manager.destroyActivity( IDList.get( index ),true );    IDList.remove( index ); index--;    String lastID = IDList.get( index );    Activity lastActivity = manager.getActivity( lastID );    Intent lastIntent = lastActivity.getIntent();    Window newWindow = manager.startActivity( lastID,lastIntent );    setContentVIEw( newWindow.getDecorVIEw() );}public voID startChildActivity( String ID,Intent intent ){    if ( "restart".equalsIgnoreCase( ID ) )    {        IDList.clear();    }    Window window = getLocalActivityManager().startActivity( ID,intent.addFlags( Intent.FLAG_ACTIVITY_CLEAR_top ) );    if ( window != null )    {        IDList.add( ID );        setContentVIEw( window.getDecorVIEw() );    }}public Activity getCurrentActivity(){    int length = IDList.size();    if ( IDList.isEmpty() ) {        return null;    }    else    {        return getLocalActivityManager().getActivity( IDList.get( length-1 ) );    }}@OverrIDepublic boolean onKeyDown( int keyCode,KeyEvent event ){    if ( keyCode == KeyEvent.KEYCODE_BACK )    {        return true;    }    return super.onKeyDown( keyCode,event );}@OverrIDepublic boolean onKeyUp( int keyCode,KeyEvent event ){    if ( keyCode == KeyEvent.KEYCODE_BACK )    {        onBackpressed();        return true;    }    return super.onKeyUp( keyCode,event );}@OverrIDepublic voID onBackpressed(){    int length = IDList.size();    if ( length > 1 )    {        Activity current = getLocalActivityManager().getActivity( IDList.get( length-1 ) );        current.finish();    }}

例外本身:

09-30 08:44:12.571: ERROR/AndroIDRuntime(10557): FATAL EXCEPTION: main09-30 08:44:12.571: ERROR/AndroIDRuntime(10557): java.lang.NullPointerException09-30 08:44:12.571: ERROR/AndroIDRuntime(10557):     at com.dezIDe.androID.troubleshooter.vIEw.TabGroupActivity.finishFromChild(TabGroupActivity.java:46)09-30 08:44:12.571: ERROR/AndroIDRuntime(10557):     at androID.app.Activity.finish(Activity.java:3290)09-30 08:44:12.571: ERROR/AndroIDRuntime(10557):     at com.dezIDe.androID.troubleshooter.vIEw.TabGroupActivity.onBackpressed(TabGroupActivity.java:106)09-30 08:44:12.571: ERROR/AndroIDRuntime(10557):     at com.dezIDe.androID.troubleshooter.vIEw.TabGroupActivity.onKeyUp(TabGroupActivity.java:93)09-30 08:44:12.571: ERROR/AndroIDRuntime(10557):     at androID.vIEw.KeyEvent.dispatch(KeyEvent.java:1281)09-30 08:44:12.571: ERROR/AndroIDRuntime(10557):     at androID.app.Activity.dispatchKeyEvent(Activity.java:2075)09-30 08:44:12.571: ERROR/AndroIDRuntime(10557):     at com.androID.internal.policy.impl.PhoneWindow$DecorVIEw.dispatchKeyEvent(PhoneWindow.java:1673)09-30 08:44:12.571: ERROR/AndroIDRuntime(10557):     at androID.vIEw.VIEwGroup.dispatchKeyEvent(VIEwGroup.java:796)09-30 08:44:12.571: ERROR/AndroIDRuntime(10557):     at androID.vIEw.VIEwGroup.dispatchKeyEvent(VIEwGroup.java:796)09-30 08:44:12.571: ERROR/AndroIDRuntime(10557):     at androID.vIEw.VIEwGroup.dispatchKeyEvent(VIEwGroup.java:796)09-30 08:44:12.571: ERROR/AndroIDRuntime(10557):     at androID.Widget.TabHost.dispatchKeyEvent(TabHost.java:275)09-30 08:44:12.571: ERROR/AndroIDRuntime(10557):     at androID.vIEw.VIEwGroup.dispatchKeyEvent(VIEwGroup.java:796)09-30 08:44:12.571: ERROR/AndroIDRuntime(10557):     at androID.vIEw.VIEwGroup.dispatchKeyEvent(VIEwGroup.java:796)09-30 08:44:12.571: ERROR/AndroIDRuntime(10557):     at com.androID.internal.policy.impl.PhoneWindow$DecorVIEw.superdispatchKeyEvent(PhoneWindow.java:1697)09-30 08:44:12.571: ERROR/AndroIDRuntime(10557):     at com.androID.internal.policy.impl.PhoneWindow.superdispatchKeyEvent(PhoneWindow.java:1111)09-30 08:44:12.571: ERROR/AndroIDRuntime(10557):     at androID.app.Activity.dispatchKeyEvent(Activity.java:2070)09-30 08:44:12.571: ERROR/AndroIDRuntime(10557):     at com.androID.internal.policy.impl.PhoneWindow$DecorVIEw.dispatchKeyEvent(PhoneWindow.java:1673)09-30 08:44:12.571: ERROR/AndroIDRuntime(10557):     at androID.vIEw.VIEwRoot.deliverKeyEventToVIEwHIErarchy(VIEwRoot.java:2493)09-30 08:44:12.571: ERROR/AndroIDRuntime(10557):     at androID.vIEw.VIEwRoot.handleFinishedEvent(VIEwRoot.java:2463)09-30 08:44:12.571: ERROR/AndroIDRuntime(10557):     at androID.vIEw.VIEwRoot.handleMessage(VIEwRoot.java:1752)09-30 08:44:12.571: ERROR/AndroIDRuntime(10557):     at androID.os.Handler.dispatchMessage(Handler.java:99)09-30 08:44:12.571: ERROR/AndroIDRuntime(10557):     at androID.os.Looper.loop(Looper.java:144)09-30 08:44:12.571: ERROR/AndroIDRuntime(10557):     at androID.app.ActivityThread.main(ActivityThread.java:4937)09-30 08:44:12.571: ERROR/AndroIDRuntime(10557):     at java.lang.reflect.Method.invokeNative(Native Method)09-30 08:44:12.571: ERROR/AndroIDRuntime(10557):     at java.lang.reflect.Method.invoke(Method.java:521)09-30 08:44:12.571: ERROR/AndroIDRuntime(10557):     at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)09-30 08:44:12.571: ERROR/AndroIDRuntime(10557):     at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:626)09-30 08:44:12.571: ERROR/AndroIDRuntime(10557):     at dalvik.system.NativeStart.main(Native Method)

问题是它并不总是在同一个地方失败.有时我会在异常发生之前按下20次,有时只有5次.

编辑:添加更多代码.

我的GuIDeActivity,您可以在其中创建步骤,并将每个步骤作为新活动启动:

public voID onCreate( Bundle savedInstanceState ){    super.onCreate( savedInstanceState );    if ( "startguIDe".equalsIgnoreCase( getIntent().getStringExtra( "action" ) ) )    {        try        {            startGuIDe( getIntent().getStringExtra( "guIDe" ) );        }        catch( Exception e )        {            e.printstacktrace();        }    }    else if ( "nextstep".equalsIgnoreCase( getIntent().getStringExtra( "action" ) ) )    {        String session = getIntent().getStringExtra( "session" );        String step = getIntent().getStringExtra( "step" );        String response = getIntent().getStringExtra( "response" );        try        {            nextGuIDeStep( session,step,response );        }        catch( Exception e )        {            e.printstacktrace();        }    }}public GuIDeStep getCurrentStep(){    return currentStep;}public voID setCurrentStep( GuIDeStep currentStep ){    this.currentStep = currentStep;}public voID startGuIDe( String name ) throws Exception{    GuIDeStep guIDeStep = model.startGuIDe( name );    currentStep = guIDeStep;    setContentVIEw ( R.layout.main );    linearLayout linearLayout = ( linearLayout ) findVIEwByID( R.ID.linearLayout );    TextVIEw stepTitle = ( TextVIEw ) findVIEwByID( R.ID.stepTitle );    TextVIEw explanation = ( TextVIEw ) findVIEwByID( R.ID.explanation );    stepTitle.setText( guIDeStep.getStepTitle() );    if ( guIDeStep.getExplanation() != "" )    {        explanation.setText( HTML.fromHTML( guIDeStep.getExplanation() ) );    }    responses = guIDeStep.getResponses();    ListVIEw ListVIEw = new ListVIEw( this );    linearLayout.addVIEw( ListVIEw );    ListVIEw.setAdapter( new CustomAdapter( this,R.layout.List_item,responses ) );    ListVIEw.setTextFilterEnabled( true );    ListVIEw.setonItemClickListener( new OnItemClickListener()    {        public voID onItemClick( AdapterVIEw<?> parent,VIEw vIEw,int position,long ID ) {            try            {                Intent i = new Intent().setClass( getParent(),GuIDeActivity.class );                i.putExtra( "action","nextstep" );                i.putExtra( "session",currentStep.getSession() );                i.putExtra( "step",currentStep.getStep() );                i.putExtra( "response",currentStep.getResponse( position ).getID() );                TabGroupActivity parentActivity = ( TabGroupActivity )getParent();                parentActivity.startChildActivity( currentStep.getStepTitle(),i );            }            catch( Exception e )            {                e.printstacktrace();            }        }    });}public voID nextGuIDeStep( String session,String step,String responseID ) throws Exception{    GuIDeStep guIDeStep = model.nextGuIDeStep( session,responseID );    currentStep = guIDeStep;    setContentVIEw ( R.layout.main );    linearLayout linearLayout = ( linearLayout ) findVIEwByID( R.ID.linearLayout );    TextVIEw stepTitle = ( TextVIEw ) findVIEwByID( R.ID.stepTitle );    TextVIEw explanation = ( TextVIEw ) findVIEwByID( R.ID.explanation );    TextVIEw dIDThisAnswerYourQuestion = ( TextVIEw ) findVIEwByID( R.ID.dIDThisAnswerYourQuestion );    ScrollVIEw scrollVIEw = ( ScrollVIEw ) findVIEwByID( R.ID.scrollVIEw );    stepTitle.setText( guIDeStep.getStepTitle() );    if ( guIDeStep.getExplanation() != "" )    {        explanation.setText( HTML.fromHTML( guIDeStep.getExplanation() ) );    }    responses = guIDeStep.getResponses();    if ( guIDeStep.getStepTitle() != "" )    {        ListVIEw ListVIEw = new ListVIEw( this );        linearLayout.addVIEw( ListVIEw );        ListVIEw.setAdapter( new CustomAdapter( this,responses ) );        ListVIEw.setTextFilterEnabled( true );        ListVIEw.setonItemClickListener( new OnItemClickListener() {            public voID onItemClick( AdapterVIEw<?> parent,long ID ) {                try                {                    Intent i = new Intent().setClass( getParent(),GuIDeActivity.class );                    i.putExtra( "action","nextstep" );                    i.putExtra( "session",currentStep.getSession() );                    i.putExtra( "step",currentStep.getStep() );                    i.putExtra( "response",currentStep.getResponse( position ).getID() );                    TabGroupActivity parentActivity = ( TabGroupActivity )getParent();                    parentActivity.startChildActivity( currentStep.getStepTitle(),i );                }                catch( Exception e )                {                    e.printstacktrace();                }            }          });    }    else {        stepTitle.setVisibility( VIEw.GONE );        dIDThisAnswerYourQuestion.setVisibility( VIEw.GONE );        relativeLayout.LayoutParams params = new relativeLayout.LayoutParams( relativeLayout.LayoutParams.FILL_PARENT,relativeLayout.LayoutParams.FILL_PARENT );        params.addRule( relativeLayout.AliGN_PARENT_top,relativeLayout.TRUE );        params.height = 350;        scrollVIEw.setLayoutParams( params );    }}public boolean availableForFeedback(){    return currentStep != null;}

}

我的开始活动:

public voID onCreate( Bundle savedInstanceState ){    super.onCreate( savedInstanceState );    try    {        populateSections();    }    catch( Exception e )    {        e.printstacktrace();    }}private voID populateSections() throws Exception{    setContentVIEw( R.layout.sections );    ArrayList<XmlSection> sections = new ArrayList<XmlSection>();    Portal portal = model.getPortal();    sections = portal.getSections();    final ArrayList<XmlSection> tempSections = sections;    ListVIEw ListVIEw = ( ListVIEw ) findVIEwByID( R.ID.sectionList );    ListVIEw.setAdapter( new CustomAdapter( this,sections ) );    ListVIEw.setTextFilterEnabled( true );    ListVIEw.setonItemClickListener( new OnItemClickListener()    {        public voID onItemClick( AdapterVIEw<?> parent,long ID )        {            try            {                Intent i = new Intent().setClass( SectionActivity.this,JAndroIDTroubleshooteractivity.class );                i.putExtra( "name",tempSections.get( position ).getname() );                startActivity( i );            }            catch( Exception e )            {                e.printstacktrace();            }        }    });}

我的主要活动启动的活动:

@OverrIDepublic voID onCreate( Bundle savedInstanceState ){    super.onCreate( savedInstanceState );    Resources res = getResources();    TabHost tabHost = getTabHost();    TabHost.TabSpec spec;    Intent intent;    intent = new Intent().setClass( this,TabGroupGuIDeActivity.class );    intent.putExtra( "name",getIntent().getStringExtra( "name" ) );    spec = tabHost.newTabSpec( "guIDes" ).setIndicator( "GuIDes",res.getDrawable( R.drawable.guIDes ) )                  .setContent( intent );    tabHost.addTab( spec );    intent = new Intent().setClass( this,TabGroupFaqActivity.class );    intent.putExtra( "name",getIntent().getStringExtra( "name" ) );    spec = tabHost.newTabSpec( "faqs" ).setIndicator( "FAQs",res.getDrawable( R.drawable.faq ) )                  .setContent( intent );    tabHost.addTab( spec );}private Activity getCurrentTab(){    Activity activity = getLocalActivityManager().getActivity( getTabHost().getCurrentTabTag() );    return activity;}private voID optionRestart(){    if ( getCurrentTab() instanceof TabGroupFaqActivity )    {        Intent i = new Intent().setClass( this,FaqActivity.class );        TabGroupFaqActivity activity = ( TabGroupFaqActivity ) getCurrentActivity();        i.putExtra( "name",activity.getCurrentSection() );        activity.startChildActivity( "restart",i );    }    if ( getCurrentTab() instanceof TabGroupGuIDeActivity )    {        Intent i = new Intent().setClass( this,GuIDeListActivity.class );        TabGroupGuIDeActivity activity = ( TabGroupGuIDeActivity ) getCurrentActivity();        i.putExtra( "name",i );    }}private voID optionFeedback(){    if ( getCurrentTab() instanceof TabGroupFaqActivity )    {        Activity currentTab = ( ( TabGroupFaqActivity ) getCurrentTab() ).getCurrentActivity();        Article currentArticle = ( ( FaqActivity ) currentTab ).getCurrentArticle();        if ( currentArticle != null )        {            Intent i = new Intent().setClass( this,FeedbackActivity.class );            i.putExtra( "perform","Feedbackfaq" );            i.putExtra( "Title",currentArticle.getTitle() );            startActivity( i );        }        else        {            Toast toast = Toast.makeText( getApplicationContext(),"You have to select an article to submit Feedback",500 );            toast.show();        }    }    if ( getCurrentTab() instanceof TabGroupGuIDeActivity )    {        Activity currentTab = ( ( TabGroupGuIDeActivity ) getCurrentTab() ).getCurrentActivity();        GuIDeStep currentStep = ( ( GuIDeActivity ) currentTab ).getCurrentStep();        if ( currentStep != null && "false".equalsIgnoreCase( currentStep.getTerminalStep() ) )        {            Intent i = new Intent().setClass( this,"FeedbackguIDe" );            i.putExtra( "session",currentStep.getSession() );            i.putExtra( "action",currentStep.getStepTitle() );            i.putExtra( "Title",currentStep.getGuIDeTitle() );            startActivity( i );        }        else        {            Toast toast = Toast.makeText( getApplicationContext(),"You cannot submit Feedback for the last step of a guIDe",500 );            toast.show();        }    }}private voID optionHome(){    Intent i = new Intent().setClass( this,SectionActivity.class );    i.setFlags( Intent.FLAG_ACTIVITY_CLEAR_top );    startActivity( i );}@OverrIDepublic voID onConfigurationChanged( Configuration newConfig ){    super.onConfigurationChanged( newConfig );}@OverrIDepublic boolean onCreateOptionsMenu( Menu menu ){    MenuInflater inflater = getMenuInflater();    inflater.inflate( R.menu.menu,menu );    return true;}@OverrIDepublic boolean onoptionsItemSelected( MenuItem item ){    switch ( item.getItemID() )    {    case R.ID.menuRestart:        optionRestart();        return true;    case R.ID.menuHome:        optionHome();        return true;    case R.ID.menuFeedback:        optionFeedback();        return true;    default:        return super.onoptionsItemSelected( item );    }}

我的标签组活动:

@OverrIDepublic voID onCreate( Bundle savedInstanceState ){    super.onCreate( savedInstanceState );    currentSection = getIntent().getStringExtra( "name" );    startChildActivity( "GuIDeListActivity",new Intent( this,GuIDeListActivity.class ).putExtra( "name",getIntent().getStringExtra( "name" ) ) );}public String getCurrentSection(){    return currentSection;}

最后,我列出的活动指南:

public voID onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

try    {        populateGuIDeList( getIntent().getStringExtra( "name" ) );    }    catch( Exception e )    {        e.printstacktrace();    }}public voID populateGuIDeList( String name ) throws Exception{    setContentVIEw( R.layout.guIDes );    Section section = model.getSection( name );    guIDes = section.getGuIDes();    ListVIEw ListVIEw = ( ListVIEw ) findVIEwByID( R.ID.guIDeList );    ListVIEw.setAdapter( new CustomAdapter( this,guIDes ) );    ListVIEw.setTextFilterEnabled( true );    ListVIEw.setonItemClickListener( new OnItemClickListener()    {        public voID onItemClick( AdapterVIEw<?> parent,long ID )        {            try            {                XmlGuIDe guIDe = guIDes.get( position );                Intent i = new Intent().setClass( getParent(),GuIDeActivity.class );                i.putExtra( "guIDe",guIDe.getname() );                i.putExtra( "action","startguIDe" );                TabGroupActivity parentActivity = ( TabGroupActivity )getParent();                parentActivity.startChildActivity( guIDe.getname(),i );            }            catch( Exception e )            {                e.printstacktrace();            }        }    });}
解决方法 我认为这可能会有所帮助:

public voID startChildActivity(String ID,Intent intent) {     ID+=System.currentTimeMillis();    //rest of your code.}

编辑:需要一点阐述.

有活动A,B和C.

>你用ID“A”开始A
>然后你用ID“B”开始B
>然后你用ID“C”开始C
>并且从C开始,你再次启动另一个B的ID为“B”的实例(它可以
发生,因为B可能是一个可能需要的ResultListScreen
多次加载更多类型按钮)

问题是在ArrayList< String>中从上一个B完成后的IDList

manager.destroyActivity( IDList.get( index ),true );

调用line来销毁具有ID“B”的Activity,它在堆栈中是2.
B被删除,C被推.当你完成C并且堆栈中没有B但它的ID可用时是ArrayList< String> IDList,你得到它的Activity,如果没有找到它是null.

就这样.

ID+=System.currentTimeMillis();

在这行代码中,每次使用System的当前时间启动新Activity时,都会分配一个唯一的ID.

总结

以上是内存溢出为你收集整理的android – 返回活动时的NullPointerException全部内容,希望文章能够帮你解决android – 返回活动时的NullPointerException所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1121861.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存