启动简单应用程序时的例外情况

时间:2011-03-31 09:49:20

标签: android sockets

我是Android的新手。我用LoginDialog创建了一个simlpe应用程序,在尝试运行应用程序时出现以下错误。

[2011-03-31 15:08:00 - ddmlib]An established connection was aborted by the software in your host machine
java.io.IOException: An established connection was aborted by the software in your host machine
at sun.nio.ch.SocketDispatcher.write0(Native Method)
at sun.nio.ch.SocketDispatcher.write(Unknown Source)
at sun.nio.ch.IOUtil.writeFromNativeBuffer(Unknown Source)
at sun.nio.ch.IOUtil.write(Unknown Source)
at sun.nio.ch.SocketChannelImpl.write(Unknown Source)
at com.android.ddmlib.JdwpPacket.writeAndConsume(JdwpPacket.java:213)
at com.android.ddmlib.Client.sendAndConsume(Client.java:574)
at com.android.ddmlib.HandleHeap.sendREAQ(HandleHeap.java:348)
at com.android.ddmlib.Client.requestAllocationStatus(Client.java:420)
at com.android.ddmlib.DeviceMonitor.createClient(DeviceMonitor.java:854)
at com.android.ddmlib.DeviceMonitor.openClient(DeviceMonitor.java:822)
at com.android.ddmlib.DeviceMonitor.processIncomingJdwpData(DeviceMonitor.java:781)
at com.android.ddmlib.DeviceMonitor.deviceClientMonitorLoop(DeviceMonitor.java:649)
at com.android.ddmlib.DeviceMonitor.access$100(DeviceMonitor.java:42)
at com.android.ddmlib.DeviceMonitor$3.run(DeviceMonitor.java:577)

当我启动模拟器时,我收到一条消息“Cannto find internet”,互联网已经开启,为什么它无法找到互联网。而上述错误,我在应用程序中没有使用任何这样的东西。只需简单的一个LoginDialog,带有2个edittext& 2个按钮。在“确定”上,检查edittext值并显示它们并关闭对话框。在取消按钮上,只需关闭对话框。

在我的Activity类onCreate中,我添加了以下3行:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ld = new LoginDialog(this.getApplicationContext());
    ld.show();
}

LoginDialog扩展了Dialog并有2个edittext和2个按钮。我使用的是android 3.0和5444模拟器。

###更新了CODE:

清单:

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

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

<application android:icon="@drawable/icon" android:label="@string/app_name"><uses-permission android:name="android.permission.SET_ACTIVITY_WATCHER"></uses-permission>
    <activity android:name=".StartUltimate"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

</application>

我刚添加了2个用户权限,其余全部是生成代码。我不知道要添加哪些权限。 在我的Activity类中:     static final int DIALOG_LOGIN_ID = 0;     static final int DIALOG_ABOUT_ID = 1;

    protected void OnResume() {
    super.onResume();
    showDialog(R.id.user_pws_root, null);  // DIALOG_LOGIN_ID - tried with this also

    //this.finish();
}


protected Dialog onCreateDialog(int id) {
    Dialog dialog = null;
    switch(id) {
        case DIALOG_LOGIN_ID:
            // Create an instance of the login dialog
            ld = new LoginDialog(this.getApplicationContext());
            dialog = ld;
            //return ld;
            break;
        case DIALOG_ABOUT_ID:
            dialog = null;
            break;
    }
    return dialog;
}

showDialog将调用onCreateDialog传递id。 createDialog将实例化它并应该显示。但事实并非如此。

LoginDaialog代码:

public class LoginDialog extends Dialog {
private Button btn_ok, btn_cancel;
private EditText txt_username, txt_password;

public LoginDialog(Context context) {
    super(context);
    init();
}

private void init() {
    this.setContentView(R.layout.user_pass_dialog);
    this.setTitle("Login to Ultimate VPN");
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,  WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);

    btn_ok = (Button) findViewById(R.id.user_pwd_btn_ok);
    btn_cancel = (Button) findViewById(R.id.user_pwd_btn_cancel);

    txt_username = (EditText) findViewById(R.id.user_pwd_username);
    txt_password = (EditText) findViewById(R.id.user_pwd_password);

    txt_username.setFocusable(true);
    btn_ok.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            String username = LoginDialog.this.txt_username.getText().toString();
            String password = LoginDialog.this.txt_password.getText().toString();

            if (username.length() > 0 && password.length() > 0)
                Toast.makeText(LoginDialog.this.getContext(), "You have entered : " + username + ", " + password, Toast.LENGTH_SHORT).show();

            LoginDialog.this.dismiss();
        }
    });

    btn_cancel.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            LoginDialog.this.dismiss();
        }
    });
}

}

使用此代码,我看到的是一个黑屏,屏幕顶部带有android图标和应用程序名称。 我想要做的就是在应用程序启动时打开logindialog。要求用户输入详细信息并关闭loginDialog,应通知活动。而已。我也在提及API和http://developer.android.com/guide/topics/ui/dialogs.html#ShowingADialog并试图找出答案,但是我也没做过。并且控制台窗口中的该异常将继续存在。我甚至无法在网上找到任何这样的纯粹例子,我可以作为参考。我哪里出错了,如何纠正它?

请帮助我知道我为什么会遇到这个错误。代码有什么问题。

由于

3 个答案:

答案 0 :(得分:2)

我想我有解决方案。您是否在AndroidManifest中设置了适当的权限?不这样做可能会导致您所描述的异常。

答案 1 :(得分:1)

它看起来不像您的代码中的错误。 你试过用另一个avd吗?我还会尝试对LoginDialog行进行注释,以便在启动应用程序时获得空白屏幕。

应用程序启动还是只收到“无互联网”消息?您在LogCat中看到了什么?

答案 2 :(得分:0)

似乎不是你的应用程序是问题,而是模拟器。我猜你在没有应用程序的情况下尝试启动模拟器时会遇到同样的错误。您可以通过转到“Android SDK和AVD Manager”手动启动模拟器,然后选择开始。

如果它开始正常,请尝试打开预安装的应用程序“Internet”。您是否能够通过此网络浏览网页?