2017-05-09 79 views
-1

這裏是我的對話框代碼如何在onResponse方法中創建一個對話框?

public void registrationSuccess(final Context context, String warning, String message) { 
     alert = new AlertDialog.Builder(context); 
     alert.setTitle(warning); 
     alert.setMessage(message) 
       .setCancelable(false) 
       .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         Intent i = new Intent(context, loginActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
         context.startActivity(i); 
        } 
       }); 
     AlertDialog alertDialog = alert.create(); 
     alert.show(); 
    } 

,我想用它我onResponse方法內低於

client.newCall(request).enqueue(new Callback() { 
     @Override 
     public void onFailure(Call call, IOException e) { 
      System.out.println("Failure!!"); 
     } 

     @Override 
     public void onResponse(Call call, Response response) throws IOException { 
      if(response.isSuccessful()) { 
       registrationSuccess(getApplicationContext(), getResources().getString(R.string.congrats), getResources().getString(R.string.successfull_registration)); 
      } else { 
       System.out.println("FAILED"); 

      } 
     } 

    }); 

getApplicationContext在控制檯下面的錯誤顯示打破了應用

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference 

我該換什麼context

注:其非活性類

+1

如果它是在activity類中,那麼使用'ActivityName.this',如果它是非activity類,那麼使用'getApplicationContext();' – Piyush

+0

「onResponse」方法是什麼? –

+0

@Piyush它的非活動類,並使用getApplicationContext()打破了與應用程序'java.lang.NullPointerException:試圖調用虛擬方法'android.content.Context android.content.Context.getApplicationContext()'空對象引用'控制檯上的錯誤 –

回答

3

從活動類,當你初始化你的類,通過這樣的背景下:

new My_Non_ActivityClass(MainActivity.this); 

現在在你的類創建一個構造像這樣和獲取上下文:

Context context; 
My_Non_ActivityClass(Context c){ 
    context = c; 
} 

現在你有背景,用地方你想這樣:

public void registrationSuccess(context, String warning, String message) { 
    alert = new AlertDialog.Builder(context); 
    alert.setTitle(warning); 
    alert.setMessage(message) 
      .setCancelable(false) 
      .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        Intent i = new Intent(context, loginActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
        context.startActivity(i); 
       } 
      }); 
    AlertDialog alertDialog = alert.create(); 
    alert.show(); 
} 

或者不需要傳遞上下文,只需訪問它,因爲它是你的類中的全局變量。

注意:如果您在服務中,該服務有其自己的上下文。只需使用this

+0

服務是一個上下文,所以上下文context = this;在構造函數中執行並傳遞給該方法。 – Lingeshwaran

0

創建應用類的getter setter方法方面則 這種使用可以在應用

改變這一行

registrationSuccess(null, getResources().getString(R.string.congrats), getResources().getString(R.string.successfull_registration)); 

隨着獲取上下文此

registrationSuccess(ApplicationControler.getContext(), getResources().getString(R.string.congrats), getResources().getString(R.string.successfull_registration)); 
+0

你的意思是修改應用程序類?我怎樣才能訪問它?我是新來的android –

相關問題