2014-09-28 3 views
0

내 사용자 정의 대화 상자를 생성하기 위해 ProgressDialog 클래스를 확장하려고합니다. 다음 구현을 실행하려고 할 때. setmessage() 호출에서 Null Pointer Exception을 제공합니다.사용자 정의 안드로이드 대화 상자의 setMessage()에서 널 포인터 예외

Can Somebody 그것에 대해 가야할 방법을 설명해주십시오.

private class SubProgressDialog extends ProgressDialog { 

    Textview tvdialogtext; 
    public SubProgressDialog(Context context) { 

     super(context); 
    } 


    @Override 
    public void setMessage(CharSequence message) { 
     // TODO Auto-generated method stub 

     tvdialogtext.setText(message); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.loadingdialog); 
     tvdialogtext = (TextView) dialog.findViewById(R.id.tvloading); 
     Typeface ttf = Typeface.createFromAsset(this.getContext() 
       .getAssets(), "calibriitalic.ttf"); 
     ImageView ivloading = (ImageView) dialog 
       .findViewById(R.id.ivloading); 
     ivloading.setBackgroundResource(R.animator.loading); 
     AnimationDrawable anim = (AnimationDrawable) ivloading 
       .getBackground(); 
     anim.start(); 
     anim.setVisible(true,true); 

     tvdialogtext.setTypeface(ttf); 

     tvdialogtext.setTextColor(Color.parseColor("#ffffff")); 
     tvdialogtext.setShadowLayer(25f, 0, 0, Color.WHITE); 

    } 

    @Override 
    public void onBackPressed() { 
     /** dismiss the progress bar and clean up here **/ 
     if (dialog != null) { 
      dialog.dismiss(); 
     } 
     running = false; 
     finish(); 
     help.comeinfromleft(); 
    } 
} 

로그 캣

09-28 21:17:48.154: E/AndroidRuntime(27745): Caused by: java.lang.NullPointerException 
09-28 21:17:48.154: E/AndroidRuntime(27745): at   m sfs com.anshul.guessthegaana.OnePlayerArena$SubProgressDialog.setMessage(OnePlayerArena.java:1552) 
09-28 21:17:48.154: E/AndroidRuntime(27745): at  com.anshul.guessthegaana.OnePlayerArena$GetSongsFromServer.onPreExecute(OnePlayerArena.java:1  191) 
09-28 21:17:48.154: E/AndroidRuntime(27745): at   android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586) 
09-28 21:17:48.154: E/AndroidRuntime(27745): at android.os.AsyncTask.execute(AsyncTask.java:534) 
09-28 21:17:48.154: E/AndroidRuntime(27745): at com.anshul.guessthegaana.OnePlayerArena.onCreate(OnePlayerArena.java:247) 
09-28 21:17:48.154: E/AndroidRuntime(27745): at android.app.Activity.performCreate(Activity.java:5165) 
09-28 21:17:48.154: E/AndroidRuntime(27745): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1103) 
09-28 21:17:48.154: E/AndroidRuntime(27745): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2419) 

초기화 전화

 dialog = new SubProgressDialog(this); 
     dialog.setMessage("Preparing the Game"); 

     dialog.setIndeterminate(false); 

     dialog.show(); 

답변

0

나는 당신의 문제에 대해 생각 :

당신의 tvDialogText이 당신의 R.layout.loadingdialog에 정의되어있는 경우
tvdialogtext = (TextView) dialog.findViewById(R.id.tvloading); 

그냥 사용 :

tvdialogtext = (TextView) findViewById(R.id.tvloading); 

그렇지 않은 경우 어디에서 초기화 하시겠습니까? dialog.

는 마지막으로

문제가 대화를 호출 된 AsyncTask를이 때문에 대화 상자가 인스턴스화되지 않은 활동에서 OnCreate에 불렸다이었다 그것을 알아 냈다

+0

에서 OnCreate에 대한 호출이 잘 작동된다. NPE는 setmessage()에 있습니다. 귀하의 솔루션에 아무런 도움을주지 않았습니다. inintializing 코드 추가. –

0

을 도움이되기를 바랍니다.

그래서 대화가

SetMessage() 나중에 인스턴스

을 위해 일한다 활동의 한 OnCreate에서 호출 비동기 작업에서 호출 될 때 대화 상자에서 기본 메시지를 넣어 해결

가 사용되는 작업 코드

private class SubProgressDialog extends ProgressDialog { 

    TextView tvdialogtext; 

    public SubProgressDialog(Context context) { 

     super(context); 
    } 

    @Override 
    public void setMessage(CharSequence message) { 
     // TODO Auto-generated method stub 
     // super.setMessage(message); 

     if (tvdialogtext != null) { 

      tvdialogtext.setText(message); 
     } 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.loadingdialog); 


     tvdialogtext.setTypeface(ttf); 

     // Your Default Text 
     tvdialogtext.setText("Preparing The Game"); 


    } 

    @Override 
    public void onBackPressed() { 
     /** dismiss the progress bar and clean up here **/ 
     if (dialog != null) { 
      dialog.dismiss(); 
     } 
     running = false; 
     finish(); 
     help.comeinfromleft(); 
    } 
} 
0

가장 간단한 방법은 문제를 해결하기 위해 ProgressDialog를 onPreExecute() m에 작성하는 것입니다. 세상을 선언하라. 이처럼

:

progressDialog = new ProgressDialog(MyActivity.this);