
给出我的异常的类:
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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)