Android 我应该如何编写此广播接收器的代码以检查internet并基于此执行操作

Android 我应该如何编写此广播接收器的代码以检查internet并基于此执行操作,android,broadcastreceiver,android-volley,Android,Broadcastreceiver,Android Volley,我正在检查internet连接,如果方法可用,则调用该方法,否则将显示一个警报对话框 我调用的方法使用截取从internet获取数据,因此在调用onResponse之前,我给了它一个循环ProgressDialog。 在onResponsese中,我取消了进度对话框 现在问题来了,在调用onResponse时调用getData与internet连接之间 如果继续,ProgressDialog将不会停止加载。换言之,即使数据不可能被提取,它也会一直显示出来 因此,我想在internet连接中断时再

我正在检查internet连接,如果方法可用,则调用该方法,否则将显示一个警报对话框

我调用的方法使用截取从internet获取数据,因此在调用
onResponse
之前,我给了它一个循环ProgressDialog。 在
onResponsese
中,我取消了进度对话框

现在问题来了,在调用
onResponse
时调用
getData
与internet连接之间 如果继续,ProgressDialog将不会停止加载。换言之,即使数据不可能被提取,它也会一直显示出来

因此,我想在internet连接中断时再次显示
alertDialogBuilder
,并在仍显示时关闭
mProgressDialog

我认为这可以通过广播接收器来实现,所以我创建了一个并在活动中注册了它,但这是我所能做到的

这是我的密码:

网络检查

public class NetworkCheck {
//I use this class to check for internet connectivity.

    public static boolean isAvailableAndConnected(Context context) {
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        boolean isNetworkAvailable = cm.getActiveNetworkInfo() != null;
        boolean isNetWorkConnected = isNetworkAvailable && cm.getActiveNetworkInfo().isConnected();

        return isNetWorkConnected;

    }

}
自交系

public class InternetReciever extends BroadcastReceiver {
    public InternetReciever() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        // an Intent broadcast.
        throw new UnsupportedOperationException("Not yet implemented");
    }
}
main活动

public class MainActivity extends AppCompatActivity {

    private final String TAG = "MainActivity";

    //Creating a list of fruits
    private List<FruitItems> mFruitItemsList;

    //Creating Views
    private RecyclerView recyclerView;
    private RecyclerView.Adapter adapter;
    private ProgressDialog mProgressDialog;

    private int number = 2;

    public int getNumber() {
        return number++;
    }

    public void setNumber(int number) {
        this.number = number;
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {

        //The usual codes in onCreate are I here

          if (savedInstanceState != null && savedInstanceState.containsKey(KEY_FRUIT_ITEMS)) {
              mFruitItemsList = savedInstanceState.getParcelableArrayList(KEY_FRUIT_ITEMS);

          } else {

              //Initializing the fruitlist
              mFruitItemsList = new ArrayList<>();

              if (NetworkCheck.isAvailableAndConnected(this)) {

              getData();

              } else {
            final Context mContext;
            mContext = this;
            final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
            alertDialogBuilder.setTitle(R.string.alert_titl);
            alertDialogBuilder.setCancelable(false);
            alertDialogBuilder.setIcon(R.mipmap.ic_launcher);
            alertDialogBuilder.setMessage(R.string.alert_mess);
            alertDialogBuilder.setPositiveButton(R.string.alert_retry, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    if (!NetworkCheck.isAvailableAndConnected(mContext)) {
                        alertDialogBuilder.show();
                    } else {
                        getData();
                    }

                }
            });
            alertDialogBuilder.setNegativeButton(R.string.alert_cancel, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    finish();

                }
            });
            alertDialogBuilder.show();

        }
          }

        //Registering Receivers
        IntentFilter intentFilter = new IntentFilter();
        InternetReciever internetReciever = new InternetReciever();
        registerReceiver(internetReciever, intentFilter);
    }


    //This method will get data from the web api

    private void getData(){


        Log.d(TAG, "getData called");
        //Showing progress dialog
        mProgressDialog = new ProgressDialog(MainActivity.this);
        mProgressDialog.setCancelable(false);
        mProgressDialog.setMessage(this.getResources().getString(R.string.load_fruit));
        mProgressDialog.show();


        //Creating a json request
        JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(ConfigFruit.GET_URL,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        Log.d(TAG, "onResponse called");
                        //Dismissing the progress dialog
                        if (mProgressDialog != null) {
                            mProgressDialog.hide();
                        }



                        //calling method to parse json array
                        parseData(response);

                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {

                    }
                });

        //Creating request queue
        RequestQueue requestQueue = Volley.newRequestQueue(this);

        //Adding request to the queue
        requestQueue.add(jsonArrayRequest);

    }

    //The method that parses json data is here
}
public类MainActivity扩展了AppCompatActivity{
私有最终字符串TAG=“MainActivity”;
//创建水果列表
私人名单;
//创建视图
私人回收站;
专用循环视图适配器;
private ProgressDialog mProgressDialog;
私有整数=2;
public int getNumber(){
返回号++;
}
公共无效集合号(整数){
这个数字=数字;
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//onCreate中的常用代码在这里吗
if(savedInstanceState!=null&&savedInstanceState.containsKey(关键项目)){
mFruitItemsList=savedInstanceState.getParcelableArrayList(关键项);
}否则{
//初始化结果列表
mFruitItemsList=新的ArrayList();
if(NetworkCheck.isavailable和connected(this)){
getData();
}否则{
最终语境;
mContext=这个;
最终AlertDialog.Builder alertDialogBuilder=新建AlertDialog.Builder(此);
alertDialogBuilder.setTitle(R.string.alert_titl);
alertDialogBuilder.setCancelable(false);
alertDialogBuilder.setIcon(R.mipmap.ic_启动器);
alertDialogBuilder.setMessage(R.string.alert\u-mess);
alertDialogBuilder.setPositiveButton(R.string.alert\u重试,新建DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
如果(!NetworkCheck.isAvailableAndConnected(mContext)){
alertDialogBuilder.show();
}否则{
getData();
}
}
});
alertDialogBuilder.setNegativeButton(R.string.alert_cancel,新建DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
完成();
}
});
alertDialogBuilder.show();
}
}
//登记接收人
IntentFilter IntentFilter=新的IntentFilter();
InternetReciever InternetReciever=新InternetReciever();
注册接收者(InternetReceiver、intentFilter);
}
//此方法将从web api获取数据
私有void getData(){
Log.d(标记“getData called”);
//显示进度对话框
mProgressDialog=新建ProgressDialog(MainActivity.this);
mProgressDialog.setCancelable(假);
mProgressDialog.setMessage(this.getResources().getString(R.string.load_));
mProgressDialog.show();
//创建json请求
JsonArrayRequest JsonArrayRequest=新的JsonArrayRequest(ConfigFruit.GET_URL,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONArray响应){
Log.d(标记“onResponse called”);
//取消“进度”对话框
如果(mProgressDialog!=null){
mProgressDialog.hide();
}
//调用方法来解析json数组
解析数据(响应);
}
},
新的Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
}
});
//创建请求队列
RequestQueue RequestQueue=Volley.newRequestQueue(this);
//将请求添加到队列
add(jsonArrayRequest);
}
//解析json数据的方法如下
}
我也在想:在调用
onResponse
之前,在关闭
mProgressDialog
时,是否应该取消截击请求?

试试这个:

公共类NetworkChangeReceiver扩展了BroadcastReceiver{
@凌驾
公共void onReceive(最终上下文、最终意图){
isNetworkAvailable(上下文);
}
专用布尔值isNetworkAvailable(上下文){
ConnectivityManager connectivity=(ConnectivityManager)context.getSystemService(context.connectivity\u SERVICE);
if(连接性!=null){
NetworkInfo[]info=connectivity.getAllNetworkInfo();
如果(信息!=null){
对于(int i=0;inew Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {

                 if (mProgressDialog != null) {
                        mProgressDialog.hide();
                    }

                }
            });