如果没有互联网连接,AlertDialog Box 不工作
AlertDialog Box is not working if there is no internet connection
我正在做一个 google 地图项目。我的要求是,如果我在当前 activity 中按下一个按钮,它将转到 google 映射 activity 否则它应该显示警告对话框,显示网络不可用消息。如果没有网络,应用程序会崩溃。以下是代码:
public class HomeFragment extends Fragment {
protected static final Context Context = null;
// flag for Internet connection status
Boolean isInternetPresent = false;
// Connection detector class
ConnectionDetector cd; public HomeFragment(){}
ImageButton button; @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_home, container, false);
return rootView;
}
@Override public void onActivityCreated(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onActivityCreated(savedInstanceState);
// creating connection detector class instance
cd = new ConnectionDetector( getActivity());
button = (ImageButton) getActivity().findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
@Override public void onClick(View v) {
// TODO Auto-generated method stub
// get Internet status
isInternetPresent = cd.isConnectingToInternet();
// check for Internet status
if (isInternetPresent) {
// Internet Connection is Present
// make HTTP requests
Intent i = new Intent(getActivity(), GoogleActivity.class);
startActivity(i);
} else {
// Internet connection is not present
// Ask user to connect to Internet
showAlertDialog(Context , "No Internet Connection" , "You don't have internet connection.", true);
}
} });
}
public void showAlertDialog(Context HomeFragment, String title, String message, Boolean status) {
AlertDialog alertDialog = new AlertDialog.Builder(HomeFragment).create();
// Setting Dialog Title
alertDialog.setTitle(title);
// Setting Dialog Message
alertDialog.setMessage(message);
// Setting alert dialog icon
alertDialog.setIcon((status) ? R.drawable.success : R.drawable.fail);
// Setting OK Button
alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE,
"OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
// Showing Alert Message
alertDialog.show();
} }
Logcat
01-06 16:22:48.940: W/dalvikvm(4223): threadid=1: thread exiting with uncaught exception (group=0x40de4540)
01-06 16:22:48.960: E/AndroidRuntime(4223): FATAL EXCEPTION: main
01-06 16:22:48.960: E/AndroidRuntime(4223): java.lang.NullPointerException
01-06 16:22:48.960: E/AndroidRuntime(4223): at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:142)
01-06 16:22:48.960: E/AndroidRuntime(4223): at android.app.AlertDialog$Builder.<init>(AlertDialog.java:359)
01-06 16:22:48.960: E/AndroidRuntime(4223): at com.ons.bhoomi.HomeFragment.showAlertDialog(HomeFragment.java:90)
01-06 16:22:48.960: E/AndroidRuntime(4223): at com.ons.bhoomi.HomeFragment.onClick(HomeFragment.java:77)
01-06 16:22:48.960: E/AndroidRuntime(4223): at android.view.View.performClick(View.java:4102)
01-06 16:22:48.960: E/AndroidRuntime(4223): at android.view.View$PerformClick.run(View.java:17085)
01-06 16:22:48.960: E/AndroidRuntime(4223): at android.os.Handler.handleCallback(Handler.java:615)
01-06 16:22:48.960: E/AndroidRuntime(4223): at android.os.Handler.dispatchMessage(Handler.java:92)
01-06 16:22:48.960: E/AndroidRuntime(4223): at android.os.Looper.loop(Looper.java:155)
01-06 16:22:48.960: E/AndroidRuntime(4223): at android.app.ActivityThread.main(ActivityThread.java:5520)
01-06 16:22:48.960: E/AndroidRuntime(4223): at java.lang.reflect.Method.invokeNative(Native Method)
01-06 16:22:48.960: E/AndroidRuntime(4223): at java.lang.reflect.Method.invoke(Method.java:511)
01-06 16:22:48.960: E/AndroidRuntime(4223): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1058)
01-06 16:22:48.960: E/AndroidRuntime(4223): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:825)
01-06 16:22:48.960: E/AndroidRuntime(4223): at dalvik.system.NativeStart.main(Native Method)
两个变化
- 将 AlertDialog alertDialog 更改为 AlertDialog.Builder alertDialog
所以会是
AlertDialog.Builder alertDialog = new AlertDialog.Builder(HomeFragment); //Here i doubt instead of HomeFragment it should be getActivity()
调用 alertDialog.create() 完成对话框设置:-
alertDialog.create().show();
你的Context为null初始化吧,在onActivityCreated
中添加这段代码
Context = getActivity().getApplicationContext();
试试这个方法,
public class HomeFragment extends Fragment {
// flag for Internet connection status
Boolean isInternetPresent = false;
// Connection detector class
ConnectionDetector cd;
ImageButton button;
public HomeFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_home, container, false);
return rootView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
// creating connection detector class instance
cd = new ConnectionDetector(getActivity());
button = (ImageButton) getActivity().findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
isInternetPresent = cd.isConnectingToInternet();
// check for Internet status
if (isInternetPresent) {
// Internet Connection is Present
// make HTTP requests
Intent i = new Intent(getActivity(), GoogleActivity.class);
startActivity(i);
} else {
// Internet connection is not present
// Ask user to connect to Internet
showAlertDialog(getActivity(), "No Internet Connection", "You don't have internet connection.", true);
}
}
});
}
public void showAlertDialog(Context HomeFragment, String title, String message, Boolean status) {
AlertDialog alertDialog = new AlertDialog.Builder(HomeFragment).create();
// Setting Dialog Title
alertDialog.setTitle(title);
// Setting Dialog Message
alertDialog.setMessage(message);
// Setting alert dialog icon
alertDialog.setIcon((status) ? R.drawable.success : R.drawable.fail);
// Setting OK Button
alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE,
"OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
// Showing Alert Message
alertDialog.show();
}
}
我正在做一个 google 地图项目。我的要求是,如果我在当前 activity 中按下一个按钮,它将转到 google 映射 activity 否则它应该显示警告对话框,显示网络不可用消息。如果没有网络,应用程序会崩溃。以下是代码:
public class HomeFragment extends Fragment {
protected static final Context Context = null;
// flag for Internet connection status
Boolean isInternetPresent = false;
// Connection detector class
ConnectionDetector cd; public HomeFragment(){}
ImageButton button; @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_home, container, false);
return rootView;
}
@Override public void onActivityCreated(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onActivityCreated(savedInstanceState);
// creating connection detector class instance
cd = new ConnectionDetector( getActivity());
button = (ImageButton) getActivity().findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
@Override public void onClick(View v) {
// TODO Auto-generated method stub
// get Internet status
isInternetPresent = cd.isConnectingToInternet();
// check for Internet status
if (isInternetPresent) {
// Internet Connection is Present
// make HTTP requests
Intent i = new Intent(getActivity(), GoogleActivity.class);
startActivity(i);
} else {
// Internet connection is not present
// Ask user to connect to Internet
showAlertDialog(Context , "No Internet Connection" , "You don't have internet connection.", true);
}
} });
}
public void showAlertDialog(Context HomeFragment, String title, String message, Boolean status) {
AlertDialog alertDialog = new AlertDialog.Builder(HomeFragment).create();
// Setting Dialog Title
alertDialog.setTitle(title);
// Setting Dialog Message
alertDialog.setMessage(message);
// Setting alert dialog icon
alertDialog.setIcon((status) ? R.drawable.success : R.drawable.fail);
// Setting OK Button
alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE,
"OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
// Showing Alert Message
alertDialog.show();
} }
Logcat
01-06 16:22:48.940: W/dalvikvm(4223): threadid=1: thread exiting with uncaught exception (group=0x40de4540)
01-06 16:22:48.960: E/AndroidRuntime(4223): FATAL EXCEPTION: main
01-06 16:22:48.960: E/AndroidRuntime(4223): java.lang.NullPointerException
01-06 16:22:48.960: E/AndroidRuntime(4223): at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:142)
01-06 16:22:48.960: E/AndroidRuntime(4223): at android.app.AlertDialog$Builder.<init>(AlertDialog.java:359)
01-06 16:22:48.960: E/AndroidRuntime(4223): at com.ons.bhoomi.HomeFragment.showAlertDialog(HomeFragment.java:90)
01-06 16:22:48.960: E/AndroidRuntime(4223): at com.ons.bhoomi.HomeFragment.onClick(HomeFragment.java:77)
01-06 16:22:48.960: E/AndroidRuntime(4223): at android.view.View.performClick(View.java:4102)
01-06 16:22:48.960: E/AndroidRuntime(4223): at android.view.View$PerformClick.run(View.java:17085)
01-06 16:22:48.960: E/AndroidRuntime(4223): at android.os.Handler.handleCallback(Handler.java:615)
01-06 16:22:48.960: E/AndroidRuntime(4223): at android.os.Handler.dispatchMessage(Handler.java:92)
01-06 16:22:48.960: E/AndroidRuntime(4223): at android.os.Looper.loop(Looper.java:155)
01-06 16:22:48.960: E/AndroidRuntime(4223): at android.app.ActivityThread.main(ActivityThread.java:5520)
01-06 16:22:48.960: E/AndroidRuntime(4223): at java.lang.reflect.Method.invokeNative(Native Method)
01-06 16:22:48.960: E/AndroidRuntime(4223): at java.lang.reflect.Method.invoke(Method.java:511)
01-06 16:22:48.960: E/AndroidRuntime(4223): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1058)
01-06 16:22:48.960: E/AndroidRuntime(4223): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:825)
01-06 16:22:48.960: E/AndroidRuntime(4223): at dalvik.system.NativeStart.main(Native Method)
两个变化
- 将 AlertDialog alertDialog 更改为 AlertDialog.Builder alertDialog
所以会是
AlertDialog.Builder alertDialog = new AlertDialog.Builder(HomeFragment); //Here i doubt instead of HomeFragment it should be getActivity()
调用 alertDialog.create() 完成对话框设置:-
alertDialog.create().show();
你的Context为null初始化吧,在onActivityCreated
中添加这段代码
Context = getActivity().getApplicationContext();
试试这个方法,
public class HomeFragment extends Fragment {
// flag for Internet connection status
Boolean isInternetPresent = false;
// Connection detector class
ConnectionDetector cd;
ImageButton button;
public HomeFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_home, container, false);
return rootView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
// creating connection detector class instance
cd = new ConnectionDetector(getActivity());
button = (ImageButton) getActivity().findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
isInternetPresent = cd.isConnectingToInternet();
// check for Internet status
if (isInternetPresent) {
// Internet Connection is Present
// make HTTP requests
Intent i = new Intent(getActivity(), GoogleActivity.class);
startActivity(i);
} else {
// Internet connection is not present
// Ask user to connect to Internet
showAlertDialog(getActivity(), "No Internet Connection", "You don't have internet connection.", true);
}
}
});
}
public void showAlertDialog(Context HomeFragment, String title, String message, Boolean status) {
AlertDialog alertDialog = new AlertDialog.Builder(HomeFragment).create();
// Setting Dialog Title
alertDialog.setTitle(title);
// Setting Dialog Message
alertDialog.setMessage(message);
// Setting alert dialog icon
alertDialog.setIcon((status) ? R.drawable.success : R.drawable.fail);
// Setting OK Button
alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE,
"OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
// Showing Alert Message
alertDialog.show();
}
}