2014-03-06 27 views
1

這個問題是我的前一個問題的延續,雖然我已成功地刪除NetworkOnMainThreadError,現在我有新的錯誤與對抗,XMPP和Android部分-2

前面的問題都可以在這裏找到:XMPP and ANDROID

這一次我猜probelm是與我的主機名,或者可能是服務名稱,我試圖連接到openFire服務器。

順便說做我需要添加public class SettingsDialog extends Dialog到Menifest文件

我的代碼,用於連接:

/** 
* Gather the xmpp settings and create an XMPPConnection 
*/ 
public class SettingsDialog extends Dialog implements android.view.View.OnClickListener { 
    private XMPPClient xmppClient; 

    public SettingsDialog(XMPPClient xmppClient) { 
     super(xmppClient); 
     this.xmppClient = xmppClient; 
    } 

    protected void onStart() { 
     super.onStart(); 
     setContentView(R.layout.settings); 
     getWindow().setFlags(4, 4); 
     setTitle("XMPP Settings"); 
     Button ok = (Button) findViewById(R.id.ok); 
     ok.setOnClickListener(this); 
    } 


     public void onClick(View v) { 

      new NetworkOperation().execute(); 
      dismiss(); 
     } 

異步任務

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

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

     String host = "web.vlivetech.com"; //getText(R.id.host); 
     String port = "5222"; //getText(R.id.port); 
     String service = "web.vlivetech.com"; //getText(R.id.service); 
     String username = "[email protected]"; //getText(R.id.userid); 
     String password = "khubaib"; //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) { 

    } 
    } 

線路上,我在異步任務中出現錯誤:

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); 
     } 

日誌文件

03-06 17:50:39.754: I/SmackConfiguration(16410): No configuration file found 
03-06 17:50:39.764: E/XMPPClient(16410): [SettingsDialog] Failed to connect to null 
03-06 17:50:39.764: W/dalvikvm(16410): threadid=11: thread exiting with uncaught exception (group=0x40aaa210) 
03-06 17:50:39.774: E/AndroidRuntime(16410): FATAL EXCEPTION: AsyncTask #1 
03-06 17:50:39.774: E/AndroidRuntime(16410): java.lang.RuntimeException: An error occured while executing doInBackground() 
03-06 17:50:39.774: E/AndroidRuntime(16410): at android.os.AsyncTask$3.done(AsyncTask.java:278) 
03-06 17:50:39.774: E/AndroidRuntime(16410): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
03-06 17:50:39.774: E/AndroidRuntime(16410): at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
03-06 17:50:39.774: E/AndroidRuntime(16410): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
03-06 17:50:39.774: E/AndroidRuntime(16410): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
03-06 17:50:39.774: E/AndroidRuntime(16410): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208) 
03-06 17:50:39.774: E/AndroidRuntime(16410): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
03-06 17:50:39.774: E/AndroidRuntime(16410): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
03-06 17:50:39.774: E/AndroidRuntime(16410): at java.lang.Thread.run(Thread.java:856) 
03-06 17:50:39.774: E/AndroidRuntime(16410): Caused by: java.lang.NullPointerException 
03-06 17:50:39.774: E/AndroidRuntime(16410): at com.example.test.NetworkOperation.doInBackground(NetworkOperation.java:33) 
03-06 17:50:39.774: E/AndroidRuntime(16410): at com.example.test.NetworkOperation.doInBackground(NetworkOperation.java:1) 
03-06 17:50:39.774: E/AndroidRuntime(16410): at android.os.AsyncTask$2.call(AsyncTask.java:264) 
03-06 17:50:39.774: E/AndroidRuntime(16410): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
+0

我想你會得到「connection == null」。 –

+0

爲什麼我得到它?我的主機名有問題嗎?或端口或別的東西? –

+0

可能是的,你可以調試並檢查你是否得到主機名爲null。 –

回答

0

如果您NetworkOperation裏面的活動,然後從NetworkOperation刪除此行,或者你可能要添加一個constructor(?),通過xmppClient.execute()

private XMPPClient xmppClient; 
+0

已經在代碼中。 –

+0

我已初始化它,請檢查代碼 –

+0

對不起,我錯過了,在異步任務?哪裏?? – user2450263

0

也許你可以使用fr om此代碼..並且您不需要AsyncTask ..

String HOST = "Yourhost"; 
     int PORT = your port; 
     String USERNAME = "USERNAME"; 
     String PASSWORD = "YOURPASSWORD"; 


      Thread t = new Thread(new Runnable() { 
       @Override 
       public void run() { 

        ConnectionConfiguration connConfig = new ConnectionConfiguration(
          HOST, PORT); 
        connConfig.setReconnectionAllowed(true); 
        XMPPConnection connection = new XMPPConnection(connConfig); 
        try { 
         connection.connect(); 
         Log.i("XMPPChatDemoActivity", 
           "Connected to " + connection.getHost()); 


        } catch (XMPPException ex) { 
         Log.e("XMPPChatDemoActivity", "Failed to connect to " 
           + connection.getHost()); 
         Log.e("XMPPChatDemoActivity", ex.toString()); 


        } 
        try { 

         connection.login(USERNAME, PASSWORD); 
         Log.i("XMPPChatDemoActivity", 
           "Logged in as " + connection.getUser()); 


         // Set the status to available 
         Presence presence = new Presence(Presence.Type.available); 
         connection.sendPacket(presence); 

         Roster roster = connection.getRoster(); 
         Collection<RosterEntry> entries = roster.getEntries(); 

        } catch (XMPPException ex) { 
         Log.e("XMPPChatDemoActivity", "Failed to log in as " 
           + USERNAME); 
         Log.e("XMPPChatDemoActivity", ex.toString()); 


        } 

       } 
      }); 
      t.start();