Java 从另一个类调用Internet Detect void

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

我正在制作Internet Detector类,所以当Internet关闭时,它会显示一个带有两个选项的对话框,一个是退出应用程序,另一个是刷新正在检查Internet的空白。单击“刷新”时,应用程序强制关闭。看看代码

片段类

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@SandraMladenovic
public对话框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();