Java 从另一个类调用Internet Detect void
我正在制作Internet Detector类,所以当Internet关闭时,它会显示一个带有两个选项的对话框,一个是退出应用程序,另一个是刷新正在检查Internet的空白。单击“刷新”时,应用程序强制关闭。看看代码 片段类Java 从另一个类调用Internet Detect void,java,android,Java,Android,我正在制作Internet Detector类,所以当Internet关闭时,它会显示一个带有两个选项的对话框,一个是退出应用程序,另一个是刷新正在检查Internet的空白。单击“刷新”时,应用程序强制关闭。看看代码 片段类 public void check(){ DetectConnection dc = new DetectConnection(getActivity()); if(dc.isConnectedToInternet()==true) { S
public void check(){
DetectConnection dc = new DetectConnection(getActivity());
if(dc.isConnectedToInternet()==true) {
String url = "...";
new DownloadFilesTask().execute(url);
} else {
FragmentManager ft = getActivity().getFragmentManager();
MyAlertDialogWIndow alert = new MyAlertDialogWIndow();
alert.show(ft, "Alert");
}
}
MyAlertDialogWIndow类
public class MyAlertDialogWIndow extends DialogFragment {
Fragment2 fragment2 = new Fragment2();
DetectConnection detectConnection;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
OnClickListener positiveClick = new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
fragment2.check();
}
};
}
OnClickListener negativeClick = new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
};
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage("Device is not connected to the internet. Check your connection and click refresh");
builder.setNegativeButton("Exit", negativeClick);
builder.setPositiveButton("Refresh", positiveClick);
builder.setTitle("No Connection");
Dialog dialog = builder.create();
return dialog;
}
检测连接类
public class DetectConnection {
private Context _context;
public DetectConnection(Context context){
this._context = context;
}
public boolean isConnectedToInternet(){
ConnectivityManager connectivity = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null)
{
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null)
for (int i = 0; i < info.length; i++)
if (info[i].getState() == NetworkInfo.State.CONNECTED)
{
return true;
}
}
return false;
}
}
您确定
getActivity()
不返回null吗?在这里:
DetectConnection dc = new DetectConnection(getActivity());
我认为这是错误的,因为上下文(即活动为null
):
例如,如果您的片段当前未附加到活动,则可能会发生这种情况
唯一的另一个选择是info[i]
中的一个等于null
——我认为这不太可能
p.s.检查例如:
因此,您必须在第一次调用中提供片段管理器。否则getActivity()
将为null
,在NPE中也会产生什么结果:
public void check(){
...
} else {
FragmentManager ft = getActivity().getFragmentManager(); // getActivity() might return null
MyAlertDialogWIndow alert = new MyAlertDialogWIndow();
alert.show(ft, "Alert");
}
您的问题是,您正在对尚未附加到
活动的片段调用getActivity()
当您实例化片段
类时,如下所示
Fragment2 fragment2 = new Fragment2();
对于getActivity()
,它将返回null
。与其在那里实例化您的片段
,我建议从您计划使用的活动
调用片段事务
,并首先附加片段
编辑
另一个可能更简单的选择是将互联网检测方法作为活动的一部分,而不是片段的一部分。这样,您可以只执行以下操作:
OnClickListener positiveClick = new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
((YourActivityName)getActivity()).check();
}
};
OnClickListener positiveClick=新建OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int其中){
((YourActivityName)getActivity()).check();
}
};
看看你的代码
public boolean isConnectedToInternet(){
this line can be corrected, using my code below:
ConnectivityManager connectivity = (ConnectivityManager)
ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); OR
NetworkInfo[] info = connMgr.getAllNetworkInfo();
如果(dc.isConnectedToInternet()==true),isConnectedToInternet()
是什么样子?@SandraMladenovic您的createdillalog
返回nothing@SandraMladenovicpublic对话框onCreateDialog(Bundle savedInstanceState)
a对话框。查看返回类型对不起,我没有发布我返回对话框的全部代码;我只发布了onCreateDialog中肯定按钮的代码。所以回报不是问题。我更新了问题,但当我在没有连接的情况下启动应用程序时,对话框显示并工作,但当我想刷新它时,强制关闭。到目前为止,还没有问题-check()
仅在单击按钮时才会调用(请参见onClick()
)-或者我是否错过了什么?不,check()首先在public View onCreateView上调用,它的工作,但是它在对话框类onClick中被调用,这是它的强制关闭的地方,因为onCreateView
属于另一个已经附加到某个活动的片段,所以这里没有问题。但是您的对话框片段
尚未连接。检查这个:我做了这个((Fragment2)getActivity()).Check();但不能从活动到碎片2不,这不是我的意思。将check()
方法放在活动中,而不是片段中。您不能将片段
强制转换为活动
。
Fragment2 fragment2 = new Fragment2();
OnClickListener positiveClick = new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
((YourActivityName)getActivity()).check();
}
};
public boolean isConnectedToInternet(){
this line can be corrected, using my code below:
ConnectivityManager connectivity = (ConnectivityManager)
ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); OR
NetworkInfo[] info = connMgr.getAllNetworkInfo();