java - 无法使用 asmack.jar 启动 Activity

标签 java android eclipse

我有以下奇怪的问题。

我的主要 Activity 如下所示:

public class CityGame extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Intent myIntent = new Intent(this, XMPPClient.class);
    startActivity(myIntent);

 }
}

我对代码进行了 strip 化​​以找出问题所在。上面的代码只是直接跳转到 XMPPClient Activity 。 XMPPClient Activity 正在使用 asmack.jar 库,并且该库已添加到我的 eclipse 构建路径中。

XMPPClient Activity 代码:

public class XMPPClient extends Activity {

/**
 * Called with the activity is first created.
 */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Log.i("XMPPClient", "onCreate called");

    //Create a connection to the jabber.org server.
    Connection conn1 = new XMPPConnection("jabber.org");
    try {
        conn1.connect();
    } catch (XMPPException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


}
}

当我从 asmack.jar 库调用函数时出现问题。例如,conn1.connect(); 一次又一次地使我的应用程序崩溃。我收到如下错误:

06-07 09:05:03.085: E/AndroidRuntime(538): FATAL EXCEPTION: main
06-07 09:05:03.085: E/AndroidRuntime(538): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.joop.citygame/com.joop.citygame.XMPPClient}: android.os.NetworkOnMainThreadException
06-07 09:05:03.085: E/AndroidRuntime(538):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
06-07 09:05:03.085: E/AndroidRuntime(538):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
06-07 09:05:03.085: E/AndroidRuntime(538):  at android.app.ActivityThread.access$600(ActivityThread.java:122)

list 文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.joop.citygame"
android:versionCode="1"
android:versionName="1.0" >

<uses-permission android:name="android.permission.INTERNET" />

<uses-sdk android:minSdkVersion="14" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:label="@string/app_name" 
        android:name=".CityGame" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:label="@string/app_name"
        android:name=".XMPPClient" >
        <intent-filter>
            <action android:name="com.joop.citygame.XMPPClient" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
</application>

</manifest>

有人知道我做错了什么吗?

信息:API 级别 14

最佳答案

建立远程连接可能需要很长时间。 您正在尝试直接从某个 Activity 建立连接,并且默认情况下该 Activity 绑定(bind)到 UI 线程。

因此,只要您的 Activity 尝试建立连接,用户界面就会被阻止。用户无法按任何按钮,屏幕被卡住。

通过抛出 NetworkOnMainThreadException Android 操作系统强制您更改实现并强制您从另一个线程建立连接。

总而言之,您不应尝试从 UI 线程建立远程连接。尝试从 IntentService 建立它或 Service 。 如果您确实想从 Activity 中建立它,请尝试使用 AsyncTaskHandlerThread .

编辑:看看 android StrictMode :

StrictMode is most commonly used to catch accidental disk or network access on the application's main thread, where UI operations are received and animations take place.

它可能已为您的应用程序启用。

关于java - 无法使用 asmack.jar 启动 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10929169/

相关文章:

android - 如何更改 android 中的选项卡宽度和高度以适用于所有设备

java - eclipse:R.layout.start 不能是或不是字段

java - 以编程方式将文件上传到 SalesForce

java - 单击按钮后获取文本 android

java - 如何制作碰撞

android - 在 android Activity 的抽屉导航中显示联系人

android - 如何在 BaseAdapter 中添加 DialogFragment?

java - JTable 单元格中的 JTree,很少有问题

java - 停止 IWizard 以获得警告消息

java - 有什么方法可以在 Eclipse 的 Package Explorer 上标记特定文件吗?有点像书签但有视觉提示?