当前位置: 代码迷 >> Android >> Andriod Runtime报错求解!解决方法
  详细解决方案

Andriod Runtime报错求解!解决方法

热度:61   发布时间:2016-04-28 07:17:18.0
Andriod Runtime报错求解!
07-08 10:30:19.604: E/AndroidRuntime(567): FATAL EXCEPTION: main
07-08 10:30:19.604: E/AndroidRuntime(567): java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
07-08 10:30:19.604: E/AndroidRuntime(567):  at com.amaker.wlo.LoginActivity.saveUserMsg(LoginActivity.java:85)
07-08 10:30:19.604: E/AndroidRuntime(567):  at com.amaker.wlo.LoginActivity.login(LoginActivity.java:70)
07-08 10:30:19.604: E/AndroidRuntime(567):  at com.amaker.wlo.LoginActivity.access$1(LoginActivity.java:60)
07-08 10:30:19.604: E/AndroidRuntime(567):  at com.amaker.wlo.LoginActivity$2.onClick(LoginActivity.java:49)
07-08 10:30:19.604: E/AndroidRuntime(567):  at android.view.View.performClick(View.java:3480)
07-08 10:30:19.604: E/AndroidRuntime(567):  at android.view.View$PerformClick.run(View.java:13983)
07-08 10:30:19.604: E/AndroidRuntime(567):  at android.os.Handler.handleCallback(Handler.java:605)
07-08 10:30:19.604: E/AndroidRuntime(567):  at android.os.Handler.dispatchMessage(Handler.java:92)
07-08 10:30:19.604: E/AndroidRuntime(567):  at android.os.Looper.loop(Looper.java:137)
07-08 10:30:19.604: E/AndroidRuntime(567):  at android.app.ActivityThread.main(ActivityThread.java:4340)
07-08 10:30:19.604: E/AndroidRuntime(567):  at java.lang.reflect.Method.invokeNative(Native Method)
07-08 10:30:19.604: E/AndroidRuntime(567):  at java.lang.reflect.Method.invoke(Method.java:511)
07-08 10:30:19.604: E/AndroidRuntime(567):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
07-08 10:30:19.604: E/AndroidRuntime(567):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
07-08 10:30:19.604: E/AndroidRuntime(567):  at dalvik.system.NativeStart.main(Native Method)

------解决方案--------------------
LoginActivity中85行数组越界,提示很明确:总长度才1,却取到index1

07-08 10:30:19.604: E/AndroidRuntime(567): java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
07-08 10:30:19.604: E/AndroidRuntime(567): at com.amaker.wlo.LoginActivity.saveUserMsg(LoginActivity.java:85)
------解决方案--------------------
这明显是越界了嘛
------解决方案--------------------

// 根据用户名称密码查询
private String query(String account,String password){
// 查询参数
String queryString = "account="+account+"&password="+password;
// url
String url = HttpUtil.BASE_URL+"servlet/LoginServlet?"+queryString;
// 查询返回结果
return HttpUtil.queryStringForPost(url);
  }

这一段,你的程序中有LoginServlet这个Servlet么?如果没有,肯定不行啊,如果有的话,看看返回的String有没有这个分号 ;  因为这里拆分的时候就用分号的

// 获得信息数组
String[] msgs = msg.split(";");

------解决方案--------------------
数组越界,应该是你的返回数据有问题,解析的时候,只解析出一部分,可以log后者debug看一下返回的数据
------解决方案--------------------
数组索引超出范围,截取的时候字符串里可能没有你那个分隔符,第一,你可以分割的时候验证一下,第二,可以给你的数组默认一个数值,这样,至少不会报错,然后debug看看,到底是哪个地方数据格式不对就好。android技术群:237305376,新群人不多,欢迎大家的加入~
------解决方案--------------------
明显越界,debug跟踪下
------解决方案--------------------
引用:
貌似不是越界啊,数组更改过了还不行,Debug结果

this LoginActivity  (id=830022674824)
id "网络异常!" (id=830026090968)
idx -1
msgs String[1]  (id=830026091240)
name "" (id=830012502784)
count 0
hashCode 0
offset 0
……


private void saveUserMsg(String msg){  把这个msg打印下,不就明了了么
------解决方案--------------------
出错应该是userEditText.getText()或者pwdEditText.getText()的值为空,

可将以下2行代码改一下

String username = userEditText.getText().toString();
String pwd = pwdEditText.getText().toString();

改成:
String username = null;
String pwd = null;
if(userEditText!=null && userEditText.getText()!=null)
{
username = userEditText.getText().toString();
}
if(pwdEditText!=null && pwdEditText.getText()!=null)
{
pwd = pwdEditText.getText().toString();
}
  相关解决方案