2017-10-18 1 views
0

다음을 사용하여 클래스를 생성하고 onCreate 외부의 함수에서 실행하려고 시도했지만 실행하려고 시도했지만 항상 null 포인터 예외 오류가 발생합니다. 나는 봤 거든 결과없이 하루 종일 노력했다. 누군가가 onCreate 외부의 메서드에서 다음 클래스를 실행하는 방법을 이해하도록 도와 주시겠습니까? Create 내에서 호출하면 정상적으로 실행됩니다. 감사. onCreate 외부의 메소드에서 UI에 액세스하기

x.showDialog(this, act0, "restart0"); 

this

에서

runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
     Dialog x = new Dialog(); 
     x.showDialog(this, act0, "restart0"); 
} 
}); 


//Dialog class 
package com.calmchess.game1; 

import android.app.Activity; 
import android.content.Context; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 

/** 
* Created by bobsmithzero on 10/16/17. 
*/ 

public class Dialog extends Activity{ 


    public void showDialog(final Context context, final Activity act00, final String dialogId0) { 

     switch (dialogId0) { 


      case ("pause0"): 
       Button paBtn0 = (Button) act00.findViewById(R.id.pabtn0); 
       paBtn0.setOnClickListener(new View.OnClickListener() { 


        public void onClick(View v) { 


         //set up pause dialog 
         final android.app.Dialog dialog0 = new android.app.Dialog(context); 
         dialog0.setContentView(R.layout.activity_controls); 
         dialog0.setCancelable(true); 

         Globals.pause0 = true; 


         Button button = (Button) dialog0.findViewById(R.id.pasbtn0); 
         button.setOnClickListener(new View.OnClickListener() { 
          @Override 
          public void onClick(View v) { 


           dialog0.cancel(); 
           Globals.pause0 = false; 
          } 
         }); 

         Button reBtn0 = (Button) dialog0.findViewById(R.id.rebtn0); 
         reBtn0.setOnClickListener(new View.OnClickListener() { 
          @Override 
          public void onClick(View v) { 

           Restart restart0 = new Restart(); 
           restart0.doRestart(context); 
          } 
         }); 


         dialog0.show(); 
        } 

       }); 

       break; 


      case ("restart0"): 
       Log.e("error","this thAT"); 
       //set up pause dialog 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         //set up pause dialog 
         android.app.Dialog dialog1 = new android.app.Dialog(context); 


         dialog1.setContentView(R.layout.activity_restart); 
         dialog1.setCancelable(true); 

         Globals.pause0 = true; 


         Button button = (Button) dialog1.findViewById(R.id.restart0); 
         button.setOnClickListener(new View.OnClickListener() { 
          @Override 
          public void onClick(View v) { 


           Restart restart0 = new Restart(); 
           restart0.doRestart(context); 
          } 
         }); 


         dialog1.show(); 

        } 
       }); 
       break; 
     } 



    } 
} 
+0

'대화'클래스가'활동 '으로 사용되지 않으면'활동 '을 확장해서는 안됩니다. 안드로이드의'Dialog' 클래스와의 혼란을 막기 위해 이름을 바꿀 수도 있습니다. –

+0

더 적절한 이름을 지정하고 효과적인 로그를 사용하여 물건의 이름을 지정하면 실제로 도움이됩니다. – JoxTraex

답변

0

은 당신의 Runnable 인스턴스입니다. 올바른 문맥 인스턴스로 this을 대체하십시오. 예 : YourActivity.this.

+0

나는 그것을 시도했지만 여전히 null 포인터 예외 x.showDialog (Main0.this, act0000, "restart0"); android.app.Dialog 클래스의이 줄에서 dialog1 = new android.app.Dialog (context); – calmchess

+0

'dialog1 = new android.app.Dialog (context);에서'context'만이 null 일 수 있습니다. 다른 가능성은 없습니다. 이를 확인하고'context' 변수에서 null의 소스를 찾으십시오. –

관련 문제