public class MainActivity extends UserID { private Button btn; private EditText et1; private EditText et2; private TextView tv; private String dbpwd = null; private ArrayList<String> arraylist; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn = (Button) findViewById(R.id.button1); et1 = (EditText) findViewById(R.id.editText1); et2 = (EditText) findViewById(R.id.editText2); tv = (TextView) findViewById(R.id.textView4); System.out.println("btn名称:" + btn.getId()); System.out.println("已经获取view"); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { System.out.println("View v" + v.toString()); setclick(); } }); } @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; } private void setclick() { final String userid = et1.getText().toString(); final String pwd = et2.getText().toString(); System.out.println("输入的用户名为:" + userid + " 输入的密码为:" + pwd); if (userid != null && pwd != null) { System.out.println("已经判断输入框"); new Thread() { public void run() { DBUtil dbu = new DBUtil(); System.out.println("new DBUtil"); arraylist = dbu.getInfo("emp", " where UserID = """ + userid + """"); System.out.println("arraylist.toString():" + arraylist.toString()); } }.start(); if (arraylist.size() > 8) { dbpwd = arraylist.get(7); System.out.println("getInfo已经结束。返回ArrayList"); System.out.println("数据库中的密码为:" + dbpwd); if (pwd.equals(dbpwd)) { setUserID(userid); System.out.println("页面跳转中......"); Intent intent = new Intent(MainActivity.this, MenuActivity.class); startActivity(intent); // finish();//登陆成功后完全关闭此activity } else { tv.setText("密码错误"); et2.setText(""); System.out.println("密码错误"); et2.setText(""); } } else { System.out.println("请输入正确的用户名和密码"); tv.setText("请输入正确的用户名"); et1.setText(""); et2.setText(""); } } else { System.out.println("请输入正确的用户名和密码"); tv.setText("请输入正确的用户名和密码"); et1.setText(""); et2.setText(""); } } } |
|
15分 |
arraylist是在new 的工作线程创建的
而arraylist.size是在主线程调用的,而且还是紧接着的。 有可能arraylist.size调用时,工作线程还未初始化完,所以空指针了 你看下代码第62行是不是arraylist.size |
10分 |
public class MainActivity extends UserID
UserID是什么来的? 显示空指针的地方 tv已经赋值 这就奇怪了 |
10分 |
当你点击btn的时候,触发btn的监听事件。 这个时候 你的tv 还没有获取到控件。所以就 null了。解决方法:
第一种: 第二种: |
5分 |
代码执行顺序 从上往下 tv在 Button 设置监听之前 还有就是 在onCreate的时候 用户是不可见的吧 |