Skocz do zawartości
przemek2938

Problem z złapaniem wyjątku

    Rekomendowane odpowiedzi

    Mam taką o to funkcję:

    void funkcja() throws SocketException
    {
        ...
    
        socket.setSoTimeout(1000);
    
        ...
    }
    

    Wywołuję ją w innej funkcji:

    try
        {
            funkcja();
        }
        catch (SocketException e)
        {
            Log.i("Timeout", "Exception");
        }
    

    Niestety nie udaje się "złapać" wyjątku. Gdy następuje timeout (wiem że następuje na 100%, jest taka informacja w konsoli w Android Studio) to kod z części catch nie jest wykonywany. Funkcja setSoTimeout rzuca wyjątek typu SocketException, na pewno nie typu SocketTimeoutExcepction. W czym jest problem?

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    pavloasto

    Jakie są objawy? Apka rzuca błędem i się wywala?

    Złap w catchu ogólny wyjątek Exception i w logu wyświetl jakiej jest on klasy - dowiesz się co jest rzucane oraz z jakim messagem.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Właśnie problem w tym że nie ma żadnych objawów, z Exception też próbowałem.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    JustArchi

    Standardowo:

    1. Funkcja nie jest w ogóle wywoływana

    2. Funkcja się nie kończy, a konkretniej to zawiesza ją jedno z poleceń

    3. Funkcja nie wyrzuca wyjątku

     

    W takich przypadkach się dodaje tyle logów do logcata ile potrzeba, czasem nawet co linijkę w ekstremalnych przypadkach, i patrzy się jak daleko dojdzie.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    pavloasto

    Skoro nie wchodzi w catch'a to oznacza że nie leci żaden wyjątek.

    Tak jak napomniał Archi, log po każdej linijce kodu i sprawdzasz gdzie dochodzi.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    senega

    A czy nie jest tak, że uruchamiasz:

     

     try {

       function.... (to idzie w osobny wątek i oczekuje na timeout - tak są "chyba" realizowne odczyty z netu).

       //tutaj idze sobie dalej bo nie interesują go wątki

     } catch(Exception e) {

       //błąd nie istnieje bo funkcja wcześniejsza poszła jako wątek i samo wywołanie "function" zakończyło wię poprawnie.

     }

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Coderoid

    Problem jest w tym że funkcja jest "throws SocketException". To znaczy że cokolwiek się stanie w funkcji zostanie rzucone na stack bez jakiejkolwiek reakcji, możliwości obsługi wyjątku. Zrób to normalnie w try catch a nie throws SocketException bo tego się nie praktykuje gdyż jest mało czytelne. 

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

    Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

    Zarejestruj nowe konto

    Załóż nowe konto. To bardzo proste!

    Zarejestruj się

    Zaloguj się

    Posiadasz już konto? Zaloguj się poniżej.

    Zaloguj się

    • Ostatnio przeglądający   0 użytkowników

      Brak zarejestrowanych użytkowników przeglądających tę stronę.

    x