萌新提问——EditText使用SetText时出现空指针异常

zzy563 2018-02-24 09:03:51

我想做到打开设置按钮的对话框的时候把对话框的内容变成按钮上的字母,但是一跳转到虚拟手柄界面程序就崩溃了。出现了空指针的异常

对话框是这么设置的。

上面的EditText.SetText注释之后,按下确定后也是程序崩溃,出现异常

弄了好久也没弄懂。求大佬们帮帮忙指导一下哪里出问题了。
...全文
932 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
接口的说法 2018-03-08
  • 打赏
  • 举报
回复
dialog弹框里的输入框和按钮都应该使用dialog的布局View去findViewById(例如:gamepad_setbtn.findViewById(....))
  • 打赏
  • 举报
回复
引用 4 楼 weixin_41640078 的回复:
[quote=引用 3 楼 cxz003 的回复:] findViewById 是View的内部方法 是有作用范围的 你在Activity里用就是在R.layout.gamepad 这个资源文件里面找控件
那应该怎么改才能在activity里找到那个控件啊?[/quote] 你贴的截图 没法copy代码 就是你设置这个dialog的时候用了一个View 你在这个View里面findViewById
zzy563 2018-03-03
  • 打赏
  • 举报
回复
引用 3 楼 cxz003 的回复:
findViewById 是View的内部方法 是有作用范围的 你在Activity里用就是在R.layout.gamepad 这个资源文件里面找控件
那应该怎么改才能在activity里找到那个控件啊?
  • 打赏
  • 举报
回复
findViewById 是View的内部方法 是有作用范围的 你在Activity里用就是在R.layout.gamepad 这个资源文件里面找控件
zzy563 2018-02-24
  • 打赏
  • 举报
回复
引用 1 楼 YXTS122 的回复:
fun_Gamepad.java这个文件里的onCreate有问题,第64行有问题,把这个文件发出来看看
package com.example.package1; import android.app.Activity; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.util.DisplayMetrics; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; public class fun_Gamepad extends Activity implements OnClickListener { private Button btn1, btn2, btn3, btn4, btn5, btn6, btnMenu, btnSet; private RockerView rockerView1; private RockerView rockerView2; int screenWidth; int screenHeight; String Str_btn_1, Str_btn_2, Str_btn_3, Str_btn_4, Str_btn_5, Str_btn_6; EditText setbtn_et_1, setbtn_et_2, setbtn_et_3, setbtn_et_4, setbtn_et_5, setbtn_et_6; MainActivity mainActivity = new MainActivity(); @Override protected void onCreate(Bundle savedInstanceState) { // TODO 自动生成的方法存根 super.onCreate(savedInstanceState); setContentView(R.layout.gamepad); btnSet = (Button) findViewById(R.id.gameepad_btnSet); btnMenu = (Button) findViewById(R.id.gameepad_BtnMenu); btn1 = (Button) findViewById(R.id.gameepad_Btn1); btn2 = (Button) findViewById(R.id.gameepad_Btn2); btn3 = (Button) findViewById(R.id.gameepad_Btn3); btn4 = (Button) findViewById(R.id.gameepad_Btn4); btn5 = (Button) findViewById(R.id.gameepad_Btn5); btn6 = (Button) findViewById(R.id.gameepad_Btn6); setbtn_et_1 = (EditText) findViewById(R.id.gamepad_setbtn_et_1); setbtn_et_2 = (EditText) findViewById(R.id.gamepad_setbtn_et_2); setbtn_et_3 = (EditText) findViewById(R.id.gamepad_setbtn_et_3); setbtn_et_4 = (EditText) findViewById(R.id.gamepad_setbtn_et_4); setbtn_et_5 = (EditText) findViewById(R.id.gamepad_setbtn_et_5); setbtn_et_6 = (EditText) findViewById(R.id.gamepad_setbtn_et_6); // 获得按钮上的文字 Str_btn_1 = btn1.getText().toString(); Str_btn_2 = btn2.getText().toString(); Str_btn_3 = btn3.getText().toString(); Str_btn_4 = btn4.getText().toString(); Str_btn_5 = btn5.getText().toString(); Str_btn_6 = btn6.getText().toString(); // // 按钮设置中默认设置改为按钮上的文字 // setbtn_et_1.setText(Str_btn_1); // setbtn_et_2.setText(Str_btn_2); // setbtn_et_3.setText(Str_btn_3); // setbtn_et_4.setText(Str_btn_4); // setbtn_et_5.setText(Str_btn_5); // setbtn_et_6.setText(Str_btn_6); btnSet.setOnClickListener(this); btnMenu.setOnClickListener(this); btn1.setOnClickListener(this); btn2.setOnClickListener(this); btn3.setOnClickListener(this); btn4.setOnClickListener(this); btn5.setOnClickListener(this); btn6.setOnClickListener(this); DisplayMetrics dm = getResources().getDisplayMetrics(); screenWidth = dm.widthPixels; screenHeight = dm.heightPixels; rockerView1 = (RockerView) findViewById(R.id.rockerView1); rockerView2 = (RockerView) findViewById(R.id.rockerView2); rockerView1 .setRockerChangeListener(new RockerView.RockerChangeListener() { @Override public void report(float x, float y) { // TODO Auto-generated method stub // doLog(x + "/" + y); // setLayout(rockerView2, (int)x, (int)y); setLayout(rockerView2, (int) x, (int) y); } }); rockerView2 .setRockerChangeListener(new RockerView.RockerChangeListener() { @Override public void report(float x, float y) { // TODO Auto-generated method stub // doLog(x + "/" + y); setLayout(rockerView1, (int) x, (int) y); } }); } @Override // 按钮监听 public void onClick(View v) { // TODO 自动生成的方法存根 switch (v.getId()) { case R.id.gameepad_Btn1: { MainActivity.Send("GP,"+Str_btn_1); } break; case R.id.gameepad_Btn2: { MainActivity.Send("GP,"+Str_btn_2); } break; case R.id.gameepad_Btn3: { MainActivity.Send("GP,"+Str_btn_3); } break; case R.id.gameepad_Btn4: { MainActivity.Send("GP,"+Str_btn_4); } break; case R.id.gameepad_Btn5: { MainActivity.Send("GP,"+Str_btn_5); } break; case R.id.gameepad_Btn6: { MainActivity.Send("GP,"+Str_btn_6); } break; case R.id.gameepad_btnSet: { Gamepad_BtnSet(); } break; case R.id.gameepad_BtnMenu: { Intent intent = new Intent(fun_Gamepad.this, MainActivity.class); startActivity(intent); } break; } } public void Gamepad_BtnSet() { // 创建窗口对象 AlertDialog.Builder builder = new Builder(fun_Gamepad.this); // 创建选项 final String[] array1 = { "摇杆设置", "按键设置" }; // 设置选项列表 builder.setItems(array1, // 选项监听 new DialogInterface.OnClickListener() { public void onClick(DialogInterface arg0, int arg1) { System.out.println(arg1); if (arg1 == 0) { // 创建选择"摇杆设置"后显示的对话框 AlertDialog.Builder builder1 = new Builder( fun_Gamepad.this); final String[] array2 = { "WSAD", "↑↓←→(上下左右)" }; builder1.setItems(array2, new DialogInterface.OnClickListener() { public void onClick( DialogInterface arg0, int arg1) { System.out.println(arg1); if (arg1 == 0) { // 选择"WSAD"后的操作 } else { // 选择"↑↓←→(上下左右)"后的操作 } arg0.dismiss(); } }).create().show(); } else { // 创建选择"按键设置"后显示的对话框 AlertDialog.Builder builder1 = new Builder( fun_Gamepad.this); LayoutInflater layoutInflater = LayoutInflater .from(fun_Gamepad.this); View gamepad_setbtn = layoutInflater.inflate( R.layout.gamepad_setbtn, null); builder1.setTitle("设置按钮") .setView(gamepad_setbtn) .setPositiveButton( "确定", new DialogInterface.OnClickListener() { @Override public void onClick( DialogInterface dialog, int i) { // 按下确定以后进行的操作 // // 获得设置按钮文本框中的文字 // Str_btn_1 = setbtn_et_1 // .getText() // .toString(); // Str_btn_2 = setbtn_et_2 // .getText() // .toString(); // Str_btn_3 = setbtn_et_3 // .getText() // .toString(); // Str_btn_4 = setbtn_et_4 // .getText() // .toString(); // Str_btn_5 = setbtn_et_5 // .getText() // .toString(); // Str_btn_6 = setbtn_et_6 // .getText() // .toString(); // // // 按钮上的文字换成设置后的文字 // btn1.setText(Str_btn_1); // btn1.setText(Str_btn_2); // btn1.setText(Str_btn_3); // btn1.setText(Str_btn_4); // btn1.setText(Str_btn_5); // btn1.setText(Str_btn_6); } }) .setNeutralButton( "取消", new DialogInterface.OnClickListener() { @Override public void onClick( DialogInterface dialog, int i) { // 按下取消以后关闭 dialog.dismiss(); } }).create().show(); } // 点击选择后对话框消失 arg0.dismiss(); } // 显示上面定义的窗口 }).create().show(); } public void setLayout(View v, int dx, int dy) { int left = v.getLeft() + dx; int top = v.getTop() + dy; int right = v.getRight() + dx; int bottom = v.getBottom() + dy; if (left < 0) { left = 0; right = left + v.getWidth(); MainActivity.Send("1"); } if (right > screenWidth) { right = screenWidth; left = right - v.getWidth(); MainActivity.Send("2"); } if (top < 0) { top = 0; bottom = top + v.getHeight(); MainActivity.Send("3"); } if (bottom > screenHeight) { bottom = screenHeight; top = bottom - v.getHeight(); MainActivity.Send("4"); } v.layout(left, top, right, bottom); } }
YXTS122 2018-02-24
  • 打赏
  • 举报
回复
fun_Gamepad.java这个文件里的onCreate有问题,第64行有问题,把这个文件发出来看看

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧