現在、この問題で 2 日間立ち往生しています。
エラーが発生した場合に警告ダイアログを表示しようとしていますが、この行でクラッシュし続けます
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
Login.this);
私が試してみました
getApplicationContext() と getBaseContext() も同様ですが、役に立ちません。
いくつかのコード:
ログインをトリガーするコード
private OnClickListener loginBtnClickListener = new OnClickListener() {
public void onClick(View v) {
//Log.d("APP_STATUS", "Login Button");
//Pass user input to webservice
SoapHandler soapHandler = new SoapHandler();
//if token invalid/expire, go back to login screen.
soapHandler.loginWS(type, loginId, password);
}
};
//******************** Main Webservice Handler
public void callSoapService(final String action, final SoapSerializationEnvelope envelope) {
resultHandler = new ResultHandler();
Thread background = new Thread(new Runnable() {
public void run() {
// TODO Auto-generated method stub
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
try {
Log.d("APP_STATUS", "=====================Sending Webservice================");
androidHttpTransport.call(action, envelope);
Log.d("APP_STATUS", "*************** Response from Webservice ***************");
Object resp = envelope.getResponse();
String res = (resp != null ? resp.toString() : "-1;No response found.");
webservice_result = res;
Log.d("APP_STATUS", webservice_result);
threadMsg(webservice_result);
}
catch (Exception ex){
error = ex.getClass().toString();
Log.d("APP_STATUS", error);
}
}
private void threadMsg(String msg) {
if (!msg.equals(null) && !msg.equals("")) {
Message msgObj = ResultHandler.handler.obtainMessage();
Bundle b = new Bundle();
b.putString(action, msg);
msgObj.setData(b);
ResultHandler.handler.sendMessage(msgObj);
}
else{
//Server unreachable/network issue
Log.d("APP_STATUS", "Server unreachable or network Issue");
}
}
});
//start new thread to send webservice
background.start();
}
最後に結果を処理するコード
public void handleMessage(Message msg) {
action = SoapHandler.action;
String webservice_result = msg.getData().getString(action);
if ((null != webservice_result)) {
// ALERT MESSAGE
// if Server is online, return result to respective method
//******************************* return result to Login activity
if(action.equals("Login")){
Login login = new Login();
login.isLoginSuccess(webservice_result);
}
}
else
{
// ALERT MESSAGE
//if Server cannot be reached
Log.d("APP_STATUS", "Server down");
}
}
アラート ダイアログをトリガーする場所:
public void isLoginSuccess(String result)
{
if (result.startsWith("0")) {
Log.d("APP_STATUS", "LOGIN OK");
}
else{
AlertDialog alertDialog = new AlertDialog.Builder(
context).create();
// Setting Dialog Title
alertDialog.setTitle("Alert Dialog");
alertDialog.show();
}
}
エラーログ:
09-03 16:47:20.950: E/AndroidRuntime(15934): FATAL EXCEPTION: main
09-03 16:47:20.950: E/AndroidRuntime(15934): java.lang.NullPointerException
09-03 16:47:20.950: E/AndroidRuntime(15934): at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:101)
09-03 16:47:20.950: E/AndroidRuntime(15934): at com.example.mym1revamp.Login.isLoginSuccess(Login.java:113)
09-03 16:47:20.950: E/AndroidRuntime(15934): at com.example.mym1revamp.Soap.ResultHandler$1.handleMessage(ResultHandler.java:27)
09-03 16:47:20.950: E/AndroidRuntime(15934): at android.os.Handler.dispatchMessage(Handler.java:99)
09-03 16:47:20.950: E/AndroidRuntime(15934): at android.os.Looper.loop(Looper.java:137)
09-03 16:47:20.950: E/AndroidRuntime(15934): at android.app.ActivityThread.main(ActivityThread.java:4517)
09-03 16:47:20.950: E/AndroidRuntime(15934): at java.lang.reflect.Method.invokeNative(Native Method)
09-03 16:47:20.950: E/AndroidRuntime(15934): at java.lang.reflect.Method.invoke(Method.java:511)
09-03 16:47:20.950: E/AndroidRuntime(15934): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)
09-03 16:47:20.950: E/AndroidRuntime(15934): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)
09-03 16:47:20.950: E/AndroidRuntime(15934): at dalvik.system.NativeStart.main(Native Method)
追加されたログイン クラス:
public class Login extends Slider {
/*private String ID_TYPE = 0;
private String ID = "";
private String MobileNumber = "";*/
//public final Context context = this;
private Button button;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
getSlidingMenu(this);
buttonControls();
}
public void buttonControls(){
findViewById(R.id.btn_login).setOnClickListener(loginBtnClickListener);
//findViewById(R.id.btn_login).setOnClickListener(dafugBtnClickListener);
}
private OnClickListener dafugBtnClickListener = new OnClickListener() {
public void onClick(View v) {
Log.d("APP_STATUS", "Login Button");
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
Login.this);
// set title
alertDialogBuilder.setTitle("Your Title");
// set dialog message
alertDialogBuilder
.setMessage("Click yes to exit!")
.setCancelable(false)
.setPositiveButton("Yes",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
// if this button is clicked, close
// current activity
Login.this.finish();
}
})
.setNegativeButton("No",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
// if this button is clicked, just close
// the dialog box and do nothing
dialog.cancel();
}
});
// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();
// show it
alertDialog.show();
}
};
private OnClickListener loginBtnClickListener = new OnClickListener() {
public void onClick(View v) {
//Log.d("APP_STATUS", "Login Button");
//Pass user input to webservice
//String[] items = getResources().getStringArray(R.array.auth_type_title);
//String authType = items[(Integer)((TextView) findViewById(R.id.login_idtype_title_view)).getTag()];
//String authId = ((EditText)findViewById(R.id.login_auth_id)).getText().toString().toUpperCase();
//String mobileNo = ((EditText)findViewById(R.id.login_mobile_no)).getText().toString();
String authType =
String authId =
String mobileNo =
//SoapHandler soapHandler = SoapHandler.getInstance();
SoapHandler soapHandler = new SoapHandler();
//if token invalid/expire, go back to login screen.
soapHandler.loginWS(authType, authId, mobileNo);
}
};
public void isLoginSuccess(String result)
{
Log.d("APP_STATUS", "IS LOGIN SUCCESS?");
if (result.startsWith("0")) {
Log.d("APP_STATUS", "LOGIN OK");
}
else{
Log.d("APP_STATUS", "Login Button");
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
Login.this);
// set title
alertDialogBuilder.setTitle("Your Title");
// set dialog message
alertDialogBuilder
.setMessage("Click yes to exit!")
.setCancelable(false)
.setPositiveButton("Yes",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
// if this button is clicked, close
// current activity
Login.this.finish();
}
})
.setNegativeButton("No",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
// if this button is clicked, just close
// the dialog box and do nothing
dialog.cancel();
}
});
// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();
// show it
alertDialog.show();
}
}
//switch to remember login credentials
public void onToggleClicked(View view) {
// Is the toggle on?
boolean on = ((ToggleButton) view).isChecked();
if (on) {
Log.d("APP_STATUS", "ON");
} else {
Log.d("APP_STATUS", "OFF");
}
}
}