Обнаружьте Интернет-соединение, в режиме офлайн?

В Java все переменные, которые вы объявляете, на самом деле являются «ссылками» на объекты (или примитивы), а не самими объектами.

При попытке выполнить один метод объекта , ссылка просит живой объект выполнить этот метод. Но если ссылка ссылается на NULL (ничего, нуль, void, nada), то нет способа, которым метод будет выполнен. Тогда runtime сообщит вам об этом, выбросив исключение NullPointerException.

Ваша ссылка «указывает» на нуль, таким образом, «Null -> Pointer».

Объект живет в памяти виртуальной машины пространство и единственный способ доступа к нему - использовать ссылки this. Возьмем этот пример:

public class Some {
    private int id;
    public int getId(){
        return this.id;
    }
    public setId( int newId ) {
        this.id = newId;
    }
}

И в другом месте вашего кода:

Some reference = new Some();    // Point to a new object of type Some()
Some otherReference = null;     // Initiallly this points to NULL

reference.setId( 1 );           // Execute setId method, now private var id is 1

System.out.println( reference.getId() ); // Prints 1 to the console

otherReference = reference      // Now they both point to the only object.

reference = null;               // "reference" now point to null.

// But "otherReference" still point to the "real" object so this print 1 too...
System.out.println( otherReference.getId() );

// Guess what will happen
System.out.println( reference.getId() ); // :S Throws NullPointerException because "reference" is pointing to NULL remember...

Это важно знать - когда больше нет ссылок на объект (в пример выше, когда reference и otherReference оба указывают на null), тогда объект «недоступен». Мы не можем работать с ним, поэтому этот объект готов к сбору мусора, и в какой-то момент VM освободит память, используемую этим объектом, и выделит другую.

218
задан Rohit Sharma 24 May 2019 в 19:54
поделиться

8 ответов

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

стандартный подход к , повторяют запрос несколько раз. Если это не проходит, предупреждают пользователя для проверки соединения, и сбой корректно .

Заметка на полях: Для помещения целого приложения в "офлайновое" состояние может привести к большой подверженной ошибкам работе обработки состояния.. беспроводные соединения могут прийти и уйти, и т.д. Таким образом, Ваш лучший выбор может быть, чтобы просто перестать работать корректно, сохранить данные и предупредить пользователя.. разрешение им в конечном счете зафиксировать проблему соединения, если существует один, и продолжать использовать приложение с изрядным количеством прощения.

Заметка на полях: Вы могли проверить надежный сайт как Google для возможности соединения, но это не может быть совершенно полезно как просто пытающийся выполнить Ваш собственный запрос, потому что, в то время как Google может быть доступным, Ваше собственное приложение не может быть, и Вы все еще оказываетесь перед необходимостью обрабатывать свою собственную проблему соединения. Попытка отправить ping Google была бы хорошим способом подтвердить, что само интернет-соединение снижается, поэтому если та информация полезна для Вас, то это могло бы стоить проблемы.

Заметка на полях : Отправка Ping могла быть достигнута таким же образом, что Вы сделаете любой вид двухстороннего запроса ajax, но отправка ping к Google, в этом случае, поставила бы некоторые проблемы. Во-первых, у нас были бы те же междоменные проблемы, с которыми обычно встречаются в создании связи Ajax. Одна опция состоит в том, чтобы настроить прокси серверной стороны, где мы на самом деле ping Google (или безотносительно сайта), и возвращаем результаты ping к приложению. Это уловка - 22 , потому что, если интернет-соединение является на самом деле проблемой, мы не будем в состоянии добраться до сервера, и если проблема соединения будет только на нашем собственном домене, мы не будем в состоянии сказать различие. Другие междоменные методы можно было попробовать, например, встроив iframe на Вашей странице, которая указывает на google.com, и затем опрос iframe для успеха/отказа (исследуйте содержание, и т.д.). Встраивание изображения ничего не может действительно сказать нам, потому что нам нужен полезный ответ от механизма связи, чтобы сделать хороший вывод о том, что продолжается. Таким образом, снова определение состояния интернет-соединения в целом может быть большей проблемой, чем это стоит. Необходимо будет взвесить эти опции для определенного приложения.

131
ответ дан Prakash Pazhanisamy 23 November 2019 в 04:13
поделиться

API Кэша приложения HTML5 определяет navigator.onLine, который в настоящее время доступен в бетах IE8, WebKit (например, Safari) nightlies, и уже поддерживается в Firefox 3

11
ответ дан olliej 23 November 2019 в 04:13
поделиться

Существует много способов сделать это:

  • запрос Ajax к Вашему собственному сайту. Если тот запрос перестал работать, существует хороший шанс, это - соединение в отказе. документация JQuery имеет раздел по обрабатывающие неудавшиеся запросы Ajax . Остерегайтесь Та же политика Источника при выполнении этого, которое может мешать Вам получить доступ к сайтам вне Вашего домена.
  • Вы могли поместить onerror в img, как

    <img src='http://www.example.com/singlepixel.gif' 
          onerror='alert("Connection dead");' />
    

    , Этот метод мог также перестать работать, если бы исходное изображение перемещено / переименованный и обычно было бы нижним выбором к ajax опции.

, Таким образом, существует несколько различных способов попытаться обнаружить это, ни одно идеальное, но в отсутствие способности выпрыгнуть из песочницы браузера и получить доступ к состоянию сетевого соединения пользователя непосредственно, они, кажется, наилучшие варианты.

35
ответ дан ConroyP 23 November 2019 в 04:13
поделиться

IE 8 будет поддерживать свойство window.navigator.onLine .

, Но конечно который не помогает с другими браузерами или операционными системами. Я предсказываю, что другие поставщики браузера решат обеспечить то свойство также, учитывая важность знания состояния онлайн/в режиме офлайн в приложениях Ajax.

, Пока этого не происходит, или XHR или Image() или <img>, запрос может обеспечить что-то близко к функциональности, которую Вы хотите.

Обновление (2014/11/16)

Главные браузеры теперь поддерживают это свойство, но Ваши результаты будут варьироваться.

Кавычка от Документация Mozilla :

В Chrome и Safari, если браузер не в состоянии соединиться с локальной сетью (LAN) или маршрутизатором, это в режиме офлайн; весь другой возврат условий true. Таким образом, в то время как можно предположить, что браузер в режиме офлайн, когда он возвращается false значение, Вы не можете предположить, что истинное значение обязательно означает, что браузер может получить доступ к Интернету. Вы могли получать ложные положительные стороны, такой как в случаях, куда компьютер запускает программное обеспечение виртуализации, которое имеет виртуальные адаптеры Ethernet, которые всегда "подключаются". Поэтому, если Вы действительно хотите определить онлайн-статус браузера, необходимо разработать дополнительные средства для проверки.

В Firefox и Internet Explorer, переключая браузер на режим офлайн отправляет false значение. Все другие условия возвращаются true значение.

49
ответ дан Matt McHenry 23 November 2019 в 04:13
поделиться
window.navigator.onLine

то, что Вы поиск, но немного вещей здесь для добавления, во-первых, если это - что-то на приложении, которое Вы хотите продолжать проверять (любят видеть, идет ли пользователь внезапно офлайн, которые исправляют в этом случае большую часть времени, тогда необходимо послушать изменение также), для этого Вы добавляете слушателя события окна для обнаружения любого изменения для проверки, если пользователь идет офлайн, можно сделать:

window.addEventListener("offline", 
  ()=> console.log("No Internet")
);

и для проверки, если онлайн:

window.addEventListener("online", 
  ()=> console.log("Connected Internet")
);
0
ответ дан 23 November 2019 в 04:13
поделиться

Вы можете использовать обратный вызов $. Ajax () error , который срабатывает, если запрос не выполняется. Если textStatus равно строке «тайм-аут», это, вероятно, означает, что соединение разорвано:

function (XMLHttpRequest, textStatus, errorThrown) {
  // typically only one of textStatus or errorThrown 
  // will have info
  this; // the options for this ajax request
}

Из документа :

Ошибка : функция, которая будет вызываться, если запрос терпит неудачу. В функцию передается три аргументы: объект XMLHttpRequest, строка, описывающая тип ошибки что произошло и необязательный объект исключения, если таковое произошло. Возможные значения для второго аргумент (помимо null) - это "тайм-аут", "ошибка", "без изменений" и "parsererror". Это событие Ajax

Так, например:

 $.ajax({
   type: "GET",
   url: "keepalive.php",
   success: function(msg){
     alert("Connection active!")
   },
   error: function(XMLHttpRequest, textStatus, errorThrown) {
       if(textStatus == 'timeout') {
           alert('Connection seems dead!');
       }
   }
 });
9
ответ дан 23 November 2019 в 04:13
поделиться

Как сказал Оллией, использование свойства браузера navigator.onLine предпочтительнее, чем отправка сетевых запросов, и, соответственно, с developer.mozilla.org/En/Online_and_offline_events , он даже поддерживается старыми версиями Firefox и IE.

Недавно WHATWG указала добавление событий онлайн и offline , на случай, если вам потребуется отреагировать на navigator.onLine изменяется.

9
ответ дан 23 November 2019 в 04:13
поделиться

Вот фрагмент имеющейся у меня вспомогательной утилиты. Это javascript с пространством имен:

network: function() {
    var state = navigator.onLine ? "online" : "offline";
    return state;
}

Вы должны использовать это с обнаружением метода, иначе используйте «альтернативный» способ сделать это. Быстро приближается время, когда это будет все, что нужно. Остальные методы - взломы.

-1
ответ дан 23 November 2019 в 04:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: