2014-03-07 2 views
0

Я пытаюсь подключиться к серверу открытого огня через XMPPClient с моего устройства Android. Я запускаю Network thread отдельно по адресу Async-Task.Fatal Exception error Android

Вопрос Является ли

1- Мой код не позволяет мне подключиться к серверу OpenFire, но он соединяется с сервером GMAIL легко. я что-то пропустил в своем коде?

2- момент, когда моя система прибудет соединяется с любым сервером, скажем, Gmail, он выходит из строя, и я получаю следующее сообщение об ошибке в моем LogCat

Ошибке

03-07 12:29:57.085: W/dalvikvm(26662): threadid=11: thread exiting with uncaught exception (group=0x40a95210) 
03-07 12:29:57.115: E/AndroidRuntime(26662): FATAL EXCEPTION: AsyncTask #1 
03-07 12:29:57.115: E/AndroidRuntime(26662): java.lang.RuntimeException: An error occured while executing doInBackground() 
03-07 12:29:57.115: E/AndroidRuntime(26662): at android.os.AsyncTask$3.done(AsyncTask.java:278) 
03-07 12:29:57.115: E/AndroidRuntime(26662): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
03-07 12:29:57.115: E/AndroidRuntime(26662): at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
03-07 12:29:57.115: E/AndroidRuntime(26662): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
03-07 12:29:57.115: E/AndroidRuntime(26662): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
03-07 12:29:57.115: E/AndroidRuntime(26662): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208) 
03-07 12:29:57.115: E/AndroidRuntime(26662): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
03-07 12:29:57.115: E/AndroidRuntime(26662): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
03-07 12:29:57.115: E/AndroidRuntime(26662): at java.lang.Thread.run(Thread.java:856) 
03-07 12:29:57.115: E/AndroidRuntime(26662): Caused by: java.lang.NullPointerException 
03-07 12:29:57.115: E/AndroidRuntime(26662): at com.example.test.NetworkOperation.doInBackground(NetworkOperation.java:42) 
03-07 12:29:57.115: E/AndroidRuntime(26662): at com.example.test.NetworkOperation.doInBackground(NetworkOperation.java:1) 
03-07 12:29:57.115: E/AndroidRuntime(26662): at android.os.AsyncTask$2.call(AsyncTask.java:264) 
03-07 12:29:57.115: E/AndroidRuntime(26662): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 

Вот код, который работает в Async Задача

import org.jivesoftware.smack.ConnectionConfiguration; 
import org.jivesoftware.smack.XMPPConnection; 
import org.jivesoftware.smack.XMPPException; 
import org.jivesoftware.smack.packet.Presence; 

import android.os.AsyncTask; 
import android.util.Log; 

public class NetworkOperation extends AsyncTask<String, Void, String> { 

    private XMPPClient xmppClient; 
    @Override 
    protected String doInBackground(String... urls) { 

     String host = "talk.google.com"; //getText(R.id.host); 
     String port = "5222"; //getText(R.id.port); 
     String service = "gmail.com"; //getText(R.id.service); 
     String username = "[email protected]"; //getText(R.id.userid); 
     String password = "**********"; //getText(R.id.password); 

     // Create a connection 
     ConnectionConfiguration connConfig = 
       new ConnectionConfiguration(host, Integer.parseInt(port),service); 
     XMPPConnection connection = new XMPPConnection(connConfig); 

     try { 
      connection.connect(); 
      Log.i("XMPPClient", "[SettingsDialog] Connected to " + connection.getHost()); 
     } catch (XMPPException ex) { 
      Log.e("XMPPClient", "[SettingsDialog] Failed to connect to " + connection.getHost()); 
      xmppClient.setConnection(null); 
     } 
     try { 
      connection.login(username, password); 
      Log.i("XMPPClient", "Logged in as " + connection.getUser()); 

      // Set the status to available 
      Presence presence = new Presence(Presence.Type.available); 
      connection.sendPacket(presence); 
      xmppClient.setConnection(connection); 
     } catch (XMPPException ex) { 
      Log.e("XMPPClient", "[SettingsDialog] Failed to log in as " + username); 
      xmppClient.setConnection(null); 
     } 

     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 

    } 
    } 

Я что-то не хватает? п?

+0

Единственное, что мне сейчас не нравится в вашем коде, это двойной блок 'try'. Если первый не удался, второй все еще выполняется. – Merlevede

+0

во втором блоке try, я получил неперехваченное исключение после выполнения этой строки xmppClient.setConnection (connection); –

ответ

0

Похоже, что вы никогда ничего не присваиваете своей переменной xmppClient, поэтому она равна нулю.

Вы не стреляете в нее с первой попытки, так как она преуспевает.

0

Пробуйте использовать код ниже.

@Override 
protected String doInBackground(String... urls) { 

    String host = "talk.google.com"; //getText(R.id.host); 
    String port = "5222"; //getText(R.id.port); 
    String service = "gmail.com"; //getText(R.id.service); 
    String username = "[email protected]"; //getText(R.id.userid); 
    String password = "**********"; //getText(R.id.password); 

    // Create a connection 
    ConnectionConfiguration connConfig = 
      new ConnectionConfiguration(host, Integer.parseInt(port),service); 
    XMPPConnection connection = new XMPPConnection(connConfig); 
    if(xmppClient != null){ 
    try { 
     connection.connect(); 
     Log.i("XMPPClient", "[SettingsDialog] Connected to " + connection.getHost()); 
     connection.login(username, password); 
     Log.i("XMPPClient", "Logged in as " + connection.getUser()); 

     // Set the status to available 
     Presence presence = new Presence(Presence.Type.available); 
     connection.sendPacket(presence); 
     xmppClient.setConnection(connection); 
    } catch (XMPPException ex) { 
     Log.e("XMPPClient", "[SettingsDialog] Failed to connect to " + connection.getHost()); 
     xmppClient.setConnection(null); 
    } 
    }else{ 
     Log.d("Connection", "check your xmppClient"); 
    } 

    return null; 
}