Android中获取在AlertDialog 中的EditText 的内容是崩溃

时间:2022-11-01 14:21:49
package com.example.myclient;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;


public class MainActivity extends Activity {
private String targetIP = "123.456.789.147";
private int target_port_number = 0;
private Button ConnectButton;
private EditText EntryIP_EditView;
private EditText EntryPort_EditView;

@Override
protected Dialog onCreateDialog(int id) {
switch(id)
{
case 1:
return buildDialog3(MainActivity.this);
}
return null;
}

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        ConnectButton = (Button)findViewById(R.id.Button03);
    }
    
    @SuppressWarnings("deprecation")
public void onConnectButtonClicked(View v)
    {
     showDialog(1);
    }
    
private Dialog buildDialog3(Context context) 
{
LayoutInflater inflater = LayoutInflater.from(this);
final View textEntryView = inflater.inflate(R.layout.text_entry, null);
EntryIP_EditView = (EditText)textEntryView.findViewById(R.id.Entry_Ip_view);
EntryPort_EditView = (EditText)textEntryView.findViewById(R.id.Entry_Port_view);
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setIcon(R.drawable.alert_dialog_icon);
builder.setTitle("输入IP地址和端口号");
builder.setView(textEntryView);
builder.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {


//EntryIP_EditView.getText().toString().trim();
//target_port_number = Integer.parseInt(EntryPort_EditView.getText().toString());
setTitle("Target IP:" + targetIP );
}
});
builder.setNegativeButton("取消",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
//setTitle("您刚才点击了对话框上的取消按钮");
}
});
return builder.create();
}
    


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}


4 个解决方案

#1


你自定义了 view 又设置 positive button, 那么 dialog 查找的时候只会在你自定义 view 里查找,但是找不到,所以报错,建议自己在自定义 view 里创建两个 button,然后为他们设置监听器

#2


引用 1 楼 kifile 的回复:
你自定义了 view 又设置 positive button, 那么 dialog 查找的时候只会在你自定义 view 里查找,但是找不到,所以报错,建议自己在自定义 view 里创建两个 button,然后为他们设置监听器

我注释掉53和54行就好了不会崩溃,然后使用64行的来获取EditText的值,但是当我按确定的时候又崩溃了

#3


错误日志呢?发出来看看

#4


引用 2 楼 u010735108 的回复:
Quote: 引用 1 楼 kifile 的回复:

你自定义了 view 又设置 positive button, 那么 dialog 查找的时候只会在你自定义 view 里查找,但是找不到,所以报错,建议自己在自定义 view 里创建两个 button,然后为他们设置监听器

我注释掉53和54行就好了不会崩溃,然后使用64行的来获取EditText的值,但是当我按确定的时候又崩溃了

你注释掉了53和54行,64行的EditText不就没有初始化,当然会会报空指针异常
如果你原来是弹出dialog时出错的话,那就是text_entry这个layout中没有53和54这两个控件

#1


你自定义了 view 又设置 positive button, 那么 dialog 查找的时候只会在你自定义 view 里查找,但是找不到,所以报错,建议自己在自定义 view 里创建两个 button,然后为他们设置监听器

#2


引用 1 楼 kifile 的回复:
你自定义了 view 又设置 positive button, 那么 dialog 查找的时候只会在你自定义 view 里查找,但是找不到,所以报错,建议自己在自定义 view 里创建两个 button,然后为他们设置监听器

我注释掉53和54行就好了不会崩溃,然后使用64行的来获取EditText的值,但是当我按确定的时候又崩溃了

#3


错误日志呢?发出来看看

#4


引用 2 楼 u010735108 的回复:
Quote: 引用 1 楼 kifile 的回复:

你自定义了 view 又设置 positive button, 那么 dialog 查找的时候只会在你自定义 view 里查找,但是找不到,所以报错,建议自己在自定义 view 里创建两个 button,然后为他们设置监听器

我注释掉53和54行就好了不会崩溃,然后使用64行的来获取EditText的值,但是当我按确定的时候又崩溃了

你注释掉了53和54行,64行的EditText不就没有初始化,当然会会报空指针异常
如果你原来是弹出dialog时出错的话,那就是text_entry这个layout中没有53和54这两个控件