Получение ответа от сервера после повторного подключения интернет-залпа - PullRequest
1 голос
/ 11 апреля 2019

Пока я нажимаю URL, чтобы получить ответ от сервера, используя залп, во время извлечения сеть была отключена.

Мой вопрос заключается в том, как получить данные с сервера после повторного подключения к Интернету, не нажимая еще раз URL

 private void PostRequest(String Url) {

mRequest = new ServiceRequest(HomeActivity.this);
mRequest.makeServiceRequest(Url, Request.Method.GET, null, new ServiceRequest.ServiceListener() {
    @Override
    public void onCompleteListener(String response) {

        Log.d("reponse", response);

            JSONObject object = new JSONObject(response);

    }


    @Override
    public void onErrorListener() {
        indicator.setVisibility(View.GONE);
    }
});



 public void makeServiceRequest(final String url, int method, final 
 HashMap<String, String> param,ServiceListener listener) {

this.mServiceListener=listener;

stringRequest = new StringRequest(method, url, new Response.Listener<String> 
 () {
    @Override
    public void onResponse(String response) {
        try {
            mServiceListener.onCompleteListener(response);

        } catch (Exception e) {
        }
    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        try {
            if (error instanceof TimeoutError || error instanceof 
  NoConnectionError) {
            } else if (error instanceof AuthFailureError) {
            } else if (error instanceof ServerError) {
            } else if (error instanceof NetworkError) {
            } else if (error instanceof ParseError) {
            }
        } catch (Exception e) {
        }

         mServiceListener.onErrorListener();
    }
     }) {
    @Override
    protected Map<String, String> getParams() throws AuthFailureError {
        return param;
    }

    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        Map<String, String> headers = new HashMap<String, String>();
        return headers;
    }
};

     //to avoid repeat request Multiple Time
DefaultRetryPolicy retryPolicy = new DefaultRetryPolicy(0, -1, 
 DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
stringRequest.setRetryPolicy(retryPolicy);
stringRequest.setRetryPolicy(new DefaultRetryPolicy(30000,
        DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
        DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
stringRequest.setShouldCache(false);
AppController.getInstance().addToRequestQueue(stringRequest);
 }
 }

, пожалуйста, дайте предложение, прежде чем нажимать URL, я проверил интернет-соединение

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

Вы можете сделать с приемником трансляции изменений сети.

Создать новый класс NetWorkChangeReceiver

public class NetWorkChangeReceiver extends BroadcastReceiver {

    @NonNull
    private final NetworkConnectionRestoredListener mListener;

    public NetWorkChangeReceiver(@NonNull NetworkConnectionRestoredListener listener) {
        mListener = listener;
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        if (NetworkUtil.isDeviceConnectedToInternet(context)) {
            mListener.onNetworkRestored();
        }
    }

    public interface NetworkConnectionRestoredListener {
        void onNetworkRestored();
    }
}

Создать NetworkUtil класс

@SuppressWarnings("deprecation")
public class NetworkUtil {

    private NetworkUtil() {
        // no instances
    }

    public static boolean isDeviceConnectedToInternet(@NonNull Context context) {
        ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(
                CONNECTIVITY_SERVICE);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            for (Network network : connManager.getAllNetworks()) {
                if (network != null) {
                    final NetworkInfo networkInfo = connManager.getNetworkInfo(network);

                    if (networkInfo != null && networkInfo.isConnected()) {
                        return true;
                    }
                }
            }
            return false;
        } else {
            NetworkInfo mWifi = connManager.getNetworkInfo(TYPE_WIFI);
            if (mWifi != null && mWifi.isConnected()) {
                return true;
            }

            NetworkInfo m3G = connManager.getNetworkInfo(TYPE_MOBILE);
            if (m3G != null && m3G.isConnected()) {
                return true;
            }

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
                NetworkInfo mEthernet = connManager.getNetworkInfo(TYPE_ETHERNET);
                return mEthernet != null && mEthernet.isConnected();
            } else {
                return false;
            }
        }
    }
}

В своей деятельности реализуйте NetWorkChangeReceiver.NetworkConnectionRestoredListener

public class HomeActivity extends AppCompatActivity implements NetWorkChangeReceiver.NetworkConnectionRestoredListener {

NetWorkChangeReceiver mNetworkChangeReceiver;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.home_activity);

//Use this to register the receiver while making the server call.
context.registerReceiver(mNetworkChangeReceiver = new NetWorkChangeReceiver(this), new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
}

@Override
    public void onNetworkRestored() {
        Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show();
        if (mNetworkChangeReceiver != null) {
            try {
                unregisterReceiver(mNetworkChangeReceiver);
                mNetworkChangeReceiver = null;
            }
            catch (IllegalArgumentException e) {
                e.printStackTrace();
            }
        }
    }

@Override
    protected void onStop() {
        super.onStop();
        if (mNetworkChangeReceiver != null) {
            try {
                unregisterReceiver(mNetworkChangeReceiver);
                mNetworkChangeReceiver = null;
            }
            catch (IllegalArgumentException e) {
                e.printStackTrace();
            }
        }
    }
}
1 голос
/ 11 апреля 2019

Вы можете сделать одну вещь, создать коллекцию ваших неудачных запросов.Зарегистрируйте широковещательный приемник CONNECTIVITY_CHANGE и WIFI_STATE_CHANGED, чтобы получать уведомления о доступности интернет-соединения.Как только ваше устройство подключится к Интернету, вы получите уведомление в зарегистрированном широковещательном приемнике, а затем повторно отправите все запросы, которые есть в вашей коллекции.После успешного запроса удалите запрос из коллекции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...