Java 严重异常错误Android
我正试图通过android设备通过Java 严重异常错误Android,java,android,exception-handling,xmpp,Java,Android,Exception Handling,Xmpp,我正试图通过android设备通过XMPPClient连接到open fire服务器。我在异步任务上分别运行网络线程 问题是 1-我的代码不允许我连接到openfire服务器,但它可以轻松连接到gmail服务器。我的代码中是否缺少某些内容 2-当我的系统连接到任何服务器(比如gmail)时,它崩溃了,我的LogCat中出现以下错误 错误 03-07 12:29:57.085: W/dalvikvm(26662): threadid=11: thread exiting with uncaught
XMPPClient
连接到open fire服务器。我在异步任务
上分别运行网络线程
问题是
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)
以下是在异步任务中运行的代码
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 = "hassaan.rabbani@gmail.com"; //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) {
}
}
import org.jivesoftware.smack.ConnectionConfiguration;
导入org.jivesoftware.smack.XMPPConnection;
导入org.jivesoftware.smack.XMPPException;
导入org.jivesoftware.smack.packet.Presence;
导入android.os.AsyncTask;
导入android.util.Log;
公共类网络操作扩展了异步任务{
私有XMPPClient-XMPPClient;
@凌驾
受保护的字符串doInBackground(字符串…URL){
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=“hassaan。rabbani@gmail.com“;//getText(R.id.userid);
字符串password=“**********”;//getText(R.id.password);
//创建连接
连接配置CONNCONCONFIG=
新的连接配置(主机、Integer.parseInt(端口)、服务);
XMPPConnection连接=新的XMPPConnection(connconconfig);
试一试{
connection.connect();
Log.i(“XMPPClient”,连接到“+connection.getHost()”的“[SettingsDialog]”;
}捕获(XMPPException-ex){
Log.e(“XMPPClient”,“[SettingsDialog]无法连接到”+connection.getHost());
xmppClient.setConnection(null);
}
试一试{
连接。登录(用户名、密码);
Log.i(“XMPPClient”,“以“+connection.getUser()身份登录”);
//将状态设置为“可用”
状态=新状态(Presence.Type.available);
连接。发送数据包(存在);
xmppClient.setConnection(连接);
}捕获(XMPPException-ex){
Log.e(“XMPPClient”,“[SettingsDialog]以“+用户名”登录失败);
xmppClient.setConnection(null);
}
返回null;
}
@凌驾
受保护的void onPostExecute(字符串结果){
}
}
我错过什么了吗?n?看起来您从未给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 = "hassaan.rabbani@gmail.com"; //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;
}
我现在唯一不喜欢的代码是doubletry
块。如果第一个失败,第二个仍然执行。在第二个try块中,我在执行此行xmppClient.setConnection(connection)后得到了未捕获的异常;