2014-03-07 53 views
0

我试图通过XMPPClient从我的Android设备连接到明火服务器。我在Async-Task上单独运行Network thread致命异常错误的Android

问题是

我的代码是不是让我连接到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) { 

    } 
    } 

我错过了什么吗? N +

+0

我现在唯一不认为在你的代码中是双'try'块。如果第一个失败,第二个仍然执行。 – Merlevede

+0

在第二个try块中,我在执行这行之后得到了uncaught异常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; 
}