2014-11-10 3 views
0

Это, как я установить связь между моим XMPP клиентом и сервером, а затем войти с фоновой службой:Remote-сервер ошибка (502), когда нет подключения к сети

public class MessageService extends Service { 
private String TAG = "MessageService"; 
private XMPPConnection connection; 
private final IBinder mBinder = new MyBinder(); 

@Override 
public IBinder onBind(Intent arg0) { 
    // TODO Auto-generated method stub 
    return mBinder; 
} 

public int onStartCommand(Intent intent, int flags, int startId) { 
    Log.d(TAG, "started"); 
    new Connect().execute(""); 
    return START_STICKY; 
} 

private class Connect extends AsyncTask<String, Void, String> { 

    @Override 
    protected String doInBackground(String... params) { 
     ConnectionConfiguration connectionConfiguration = new ConnectionConfiguration(
       SettingsDM.IP_ADDRESS, SettingsDM.PORT); 

     XMPPConnection connection = new XMPPConnection(
       connectionConfiguration); 
     Log.i(TAG, "getting ready to connect..."); 
     try { 
      connection.connect(); 
      Log.i(TAG, "Connected to " + connection.getHost()); 
     } catch (XMPPException ex) { 
      Log.e(TAG, "Failed to connect to " + connection.getHost()); 
      Log.e(TAG, ex.toString()); 
      setConnection(null); 
     } 
     try { 
      connection.login(SettingsDM.TEST_USERNAME, 
        SettingsDM.TEST_PASSWORD); 
      Log.i(TAG, "Logged in as " + connection.getUser()); 


      //setConnection(connection); 
     } catch (XMPPException ex) { 
      Log.e(TAG, "Failed to log in as " + SettingsDM.TEST_USERNAME); 
      Log.e(TAG, ex.toString()); 
      setConnection(null); 
     } 
     return null; 
    } 
} 
} 

Это работает хорошо, когда есть сетевое соединение. Однако, когда нет сетевого подключения, я ожидаю, что исключение будет обнаружено в catch(XMPPException e). Но он не попадает и приложение падает. Фоновая служба также выходит из строя и пытается перезапустить пару раз, но продолжает сбой.

Ниже журнал ошибок:

11-10 16:14:20.909: E/MessageService(32759): Failed to connect to 192.168.1.4 
11-10 16:14:20.910: E/MessageService(32759): XMPPError connecting to 192.168.1.4:5222.: remote-server-error(502) XMPPError connecting to 192.168.1.4:5222. 
11-10 16:14:20.910: E/MessageService(32759): -- caused by: java.net.ConnectException: failed to connect to /192.168.1.4 (port 5222): connect failed: ENETUNREACH (Network is unreachable) 
11-10 16:14:20.956: E/AndroidRuntime(32759): FATAL EXCEPTION: AsyncTask #1 
11-10 16:14:20.956: E/AndroidRuntime(32759): java.lang.RuntimeException: An error occured while executing doInBackground() 
11-10 16:14:20.956: E/AndroidRuntime(32759): at android.os.AsyncTask$3.done(AsyncTask.java:278) 
11-10 16:14:20.956: E/AndroidRuntime(32759): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
11-10 16:14:20.956: E/AndroidRuntime(32759): at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
11-10 16:14:20.956: E/AndroidRuntime(32759): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
11-10 16:14:20.956: E/AndroidRuntime(32759): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
11-10 16:14:20.956: E/AndroidRuntime(32759): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208) 
11-10 16:14:20.956: E/AndroidRuntime(32759): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
11-10 16:14:20.956: E/AndroidRuntime(32759): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
11-10 16:14:20.956: E/AndroidRuntime(32759): at java.lang.Thread.run(Thread.java:856) 
11-10 16:14:20.956: E/AndroidRuntime(32759): Caused by: java.lang.IllegalStateException: Not connected to server. 
11-10 16:14:20.956: E/AndroidRuntime(32759): at org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:217) 
11-10 16:14:20.956: E/AndroidRuntime(32759): at org.jivesoftware.smack.Connection.login(Connection.java:353) 
11-10 16:14:20.956: E/AndroidRuntime(32759): at com.niilaryea.android.service.MessageService$Connect.doInBackground(MessageService.java:77) 
11-10 16:14:20.956: E/AndroidRuntime(32759): at com.niilaryea.android.service.MessageService$Connect.doInBackground(MessageService.java:1) 
11-10 16:14:20.956: E/AndroidRuntime(32759): at android.os.AsyncTask$2.call(AsyncTask.java:264) 
11-10 16:14:20.956: E/AndroidRuntime(32759): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
11-10 16:14:20.956: E/AndroidRuntime(32759): ... 5 more 
11-10 16:14:21.969: E/GraphicBufferAllocator(32759): FATAL: can't find the mmumapper module 

Как предотвратить фоновую службу и приложение от сбой, когда нет никакого подключения к сети доступны, но скорее держать проверки, пока нет активного подключения к сети доступны?

ответ

0

Вы java.net.ConnectException, поэтому вы должны использовать Exception вместо XMPPException

+0

Человек, простейшие вещи иногда. Благодарю. –

+0

Добро пожаловать! –

 Смежные вопросы

  • Нет связанных вопросов^_^