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