LoginActivity中85行数组越界,提示很明确:总长度才1,却取到index107-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.saveUserMsg(LoginActivity.java:85)
解决方案 »
- 商品展示,关于商品详情,服务端是用的html,的图片尺寸过大,怎么处理?
- android pull解析器解析xml文档报错XmlPullParserException,求解决
- flipper的showNext和setDisplayedChild同时使用会冲突吗?
- AudioFlinger::setMasterVolume函数是做什么用的?
- android的几个问题
- 自定义View组件
- GridView中item获得焦点放大缩小
- Library projects 不支持Annotation 怎么修改
- project structure 点击打不开,快捷键也没反应
- android开发如何在8.0系统中用代码打开“允许安装未知来源的应用”,而不需用指引用户去跳转带应用列表去打开
- andorid怎么实现一个效果
- 如何用Service检测正在运行的程序
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;import com.amaker.util.HttpUtil;public class LoginActivity extends Activity {
// 声明登录、取消按钮
private Button cancelBtn,loginBtn;
// 声明用户名、密码输入框
private EditText userEditText,pwdEditText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 设置标题
setTitle("掌中宝无线订餐系统-用户登录");
// 设置当前Activity界面布局
setContentView(R.layout.login_system);
// 通过findViewById方法实例化组件
cancelBtn = (Button)findViewById(R.id.cancelButton);
// 通过findViewById方法实例化组件
loginBtn = (Button)findViewById(R.id.loginButton);
// 通过findViewById方法实例化组件
userEditText = (EditText)findViewById(R.id.userEditText);
// 通过findViewById方法实例化组件
pwdEditText = (EditText)findViewById(R.id.pwdEditText);
cancelBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
finish();
}
});
loginBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if(validate()){
if(login()){
Intent intent = new Intent(LoginActivity.this,MainMenuActivity.class);
startActivity(intent);
}else{
showDialog("用户名称或者密码错误,请重新输入!");
}
}
}
});
}
// 登录方法
private boolean login(){
// 获得用户名称
String username = userEditText.getText().toString();
// 获得密码
String pwd = pwdEditText.getText().toString();
// 获得登录结果
String result=query(username,pwd);
if(result!=null&&result.equals("0")){
return false;
}else{
saveUserMsg(result);
return true;
}
}
// 将用户信息保存到配置文件
private void saveUserMsg(String msg){
// 用户编号
String id = "";
// 用户名称
String name = "";
// 获得信息数组
String[] msgs = msg.split(";");
int idx = msgs[0].indexOf("=");
id = msgs[0].substring(idx+1);
idx = msgs[1].indexOf("=");
name = msgs[1].substring(idx+1);
// 共享信息
SharedPreferences pre = getSharedPreferences("user_msg", MODE_WORLD_WRITEABLE);
SharedPreferences.Editor editor = pre.edit();
editor.putString("id", id);
editor.putString("name", name);
editor.commit();
}
// 验证方法
private boolean validate(){
String username = userEditText.getText().toString();
if(username.equals("")){
showDialog("用户名称是必填项!");
return false;
}
String pwd = pwdEditText.getText().toString();
if(pwd.equals("")){
showDialog("用户密码是必填项!");
return false;
}
return true;
}
private void showDialog(String msg){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(msg)
.setCancelable(false)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
AlertDialog alert = builder.create();
alert.show();
}
// 根据用户名称密码查询
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);
}
}
程序源代码,求大神帮忙,书上抄的,但是运行总是出现上面的报错
// 根据用户名称密码查询
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(";");
id "网络异常!" (id=830026090968)
idx -1
msgs String[1] (id=830026091240)
name "" (id=830012502784)
count 0
hashCode 0
offset 0
value (id=830012502816)
msg "网络异常!" (id=830026090968)
count 5
hashCode 1027227840
offset 0
value (id=830026091000)
以下是我的mySql数据库链接,是不是填错了呢,本机运行安卓链接mySql数据库地址有什么格式没,谢谢大家啦
public static final String BASE_URL="http://192.168.1.104:8080/mysql/";
private void saveUserMsg(String msg){ 把这个msg打印下,不就明了了么
07-11 13:01:25.616: E/AndroidRuntime(581): java.lang.NullPointerException
07-11 13:01:25.616: E/AndroidRuntime(581): at com.amaker.wlo.LoginActivity.login(LoginActivity.java:67)
07-11 13:01:25.616: E/AndroidRuntime(581): at com.amaker.wlo.LoginActivity.access$1(LoginActivity.java:60)
07-11 13:01:25.616: E/AndroidRuntime(581): at com.amaker.wlo.LoginActivity$2.onClick(LoginActivity.java:49)
07-11 13:01:25.616: E/AndroidRuntime(581): at android.view.View.performClick(View.java:3480)
07-11 13:01:25.616: E/AndroidRuntime(581): at android.view.View$PerformClick.run(View.java:13983)
07-11 13:01:25.616: E/AndroidRuntime(581): at android.os.Handler.handleCallback(Handler.java:605)
07-11 13:01:25.616: E/AndroidRuntime(581): at android.os.Handler.dispatchMessage(Handler.java:92)
07-11 13:01:25.616: E/AndroidRuntime(581): at android.os.Looper.loop(Looper.java:137)
07-11 13:01:25.616: E/AndroidRuntime(581): at android.app.ActivityThread.main(ActivityThread.java:4340)
07-11 13:01:25.616: E/AndroidRuntime(581): at java.lang.reflect.Method.invokeNative(Native Method)
07-11 13:01:25.616: E/AndroidRuntime(581): at java.lang.reflect.Method.invoke(Method.java:511)
07-11 13:01:25.616: E/AndroidRuntime(581): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
07-11 13:01:25.616: E/AndroidRuntime(581): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
07-11 13:01:25.616: E/AndroidRuntime(581): at dalvik.system.NativeStart.main(Native Method)
还是有问题啊
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();
}