Reputation: 42854
I am trying to launch a DialogFragment
What i am trying to do::
MainActivity.java
import android.content.Context;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
public class MainActivity extends FragmentActivity {
LocationManager locationManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if ( !locationManager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
showDialog();
}
}
public void showDialog(){
//GPS-Dialog
GpsEnablingDialog gpsAlert;
try {
gpsAlert = new GpsEnablingDialog();
gpsAlert.show(getSupportFragmentManager(), "GpsAlert_Tag");
} catch (Exception e) {
// TODO Auto-generated catch block
Log.d("My-Log-Msg",e.toString());
e.printStackTrace();
}
}
}
GpsEnablingDialog.java
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.widget.Toast;
public class GpsEnablingDialog extends DialogFragment {
AlertDialog.Builder builder=new AlertDialog.Builder(getActivity());
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
builder.setMessage("GPS is not Enabled \n Enable GPS ?");
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getActivity(), "Enable the GPS and restart the application", Toast.LENGTH_SHORT).show();
}
});
builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//Go to Settings page
//startActivityForResult(new Intent(android.provider.Settings.ACTION_SETTINGS), 0);
}
});
Dialog dialog=builder.create();
return dialog;
}
}
Problem I am facing::
In MainActivity for the line
gpsAlert = new GpsEnablingDialog();
I am getting error as shown below:: (LOG)
04-23 12:02:04.234: D/My-Log-Msg(775): java.lang.NullPointerException
04-23 12:02:05.063: W/System.err(775): java.lang.NullPointerException
04-23 12:02:05.125: W/System.err(775): at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:142)
04-23 12:02:05.144: W/System.err(775): at android.app.AlertDialog$Builder.<init>(AlertDialog.java:359)
04-23 12:02:05.164: W/System.err(775): at com.example.enablegpsfromsettingpagewhenappstarts.GpsEnablingDialog.<init>(GpsEnablingDialog.java:13)
04-23 12:02:05.174: W/System.err(775): at com.example.enablegpsfromsettingpagewhenappstarts.MainActivity.showDialog(MainActivity.java:29)
04-23 12:02:05.184: W/System.err(775): at com.example.enablegpsfromsettingpagewhenappstarts.MainActivity.onCreate(MainActivity.java:21)
04-23 12:02:05.193: W/System.err(775): at android.app.Activity.performCreate(Activity.java:4465)
04-23 12:02:05.215: W/System.err(775): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
04-23 12:02:05.224: W/System.err(775): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
04-23 12:02:05.234: W/System.err(775): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
04-23 12:02:05.254: W/System.err(775): at android.app.ActivityThread.access$600(ActivityThread.java:122)
04-23 12:02:05.263: W/System.err(775): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
04-23 12:02:05.274: W/System.err(775): at android.os.Handler.dispatchMessage(Handler.java:99)
04-23 12:02:05.284: W/System.err(775): at android.os.Looper.loop(Looper.java:137)
04-23 12:02:05.304: W/System.err(775): at android.app.ActivityThread.main(ActivityThread.java:4340)
04-23 12:02:05.304: W/System.err(775): at java.lang.reflect.Method.invokeNative(Native Method)
04-23 12:02:05.324: W/System.err(775): at java.lang.reflect.Method.invoke(Method.java:511)
04-23 12:02:05.334: W/System.err(775): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-23 12:02:05.344: W/System.err(775): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-23 12:02:05.354: W/System.err(775): at dalvik.system.NativeStart.main(Native Method)
MyQuestion:: What mistake i am doing and how to resolve this ?
Thanks .... !
Upvotes: 0
Views: 487
Reputation: 133570
This
AlertDialog.Builder builder=new AlertDialog.Builder(getActivity());
Is causing NullPointerException
Move it to onCreateDialog
.
getActivity()
returns null in your case. You initialized alert dialog outside of onCreateDialog
http://developer.android.com/reference/android/app/DialogFragment.html#Lifecycle
There also an example of AlertDialog
in the docs
Your stacktraces indicates that alertdialog initialization fails
04-23 12:02:05.144: W/System.err(775): at android.app.AlertDialog$Builder.<init>(AlertDialog.java:359)
04-23 12:02:05.164: W/System.err(775): at com.example.enablegpsfromsettingpagewhenappstarts.GpsEnablingDialog.<init>(GpsEnablingDialog.java:13)
getActivity()
public final Activity getActivity ()
Added in API level 11
Return the Activity this fragment is currently associated with
Upvotes: 2
Reputation: 26198
The problem is from here
AlertDialog.Builder builder=new AlertDialog.Builder(getActivity());
We dont know if the getActivity() is null in there;
solution:
pass the context to ur contructor
//in main Activity
gpsAlert = new GpsEnablingDialog(this)
//in dialog fragment
public GpsEnablingDialog (Context context)
{
builder=new AlertDialog.Builder(context);
}
Upvotes: 0
Reputation: 3408
create constructor and call this
Context mContext;
public GpsEnablingDialog() {
mContext = getActivity();
}
new GpsEnablingDialog().show(getFragmentManager(), "MyDialog");
Upvotes: 0