Java Android应用程序在';正在尝试获取编辑文本值

Java Android应用程序在';正在尝试获取编辑文本值,java,android,xml,android-studio,Java,Android,Xml,Android Studio,我的Android Studio应用程序有问题。而登录功能工作正常。我的寄存器功能有问题。一旦用户尝试成功注册,应用程序就会崩溃(可能是由于NullPointerException)。问题可能在于后参数函数。 总之,代码如下: import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.os.AsyncTask; import andro

我的Android Studio应用程序有问题。而登录功能工作正常。我的寄存器功能有问题。一旦用户尝试成功注册,应用程序就会崩溃(可能是由于NullPointerException)。问题可能在于后参数函数。 总之,代码如下:

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import org.json.JSONObject;

import java.util.HashMap;
import java.util.Map;



public class RegisterActivity extends Activity{
private EditText txtEmail;
private EditText txtPassword1;
private EditText txtPassword2;
private EditText txtFirstName;
private EditText txtLastName;
private ProgressDialog m_ProgresDialog;
private AccessServiceAPI m_AccessServiceAPI;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_register);
    txtEmail = (EditText)findViewById(R.id.txt_email);
    txtPassword1 = (EditText)findViewById(R.id.txt_pwd1);
    txtPassword2 = (EditText) findViewById(R.id.txt_pwd2);
    txtFirstName = (EditText) findViewById(R.id.txt_first_name);
    txtLastName = (EditText) findViewById(R.id.txt_last_name);
    m_AccessServiceAPI = new AccessServiceAPI();
}
public void btnRegister_Click(View v) {
    //Validate input
    if("".equals(txtEmail.getText().toString())) {
        txtEmail.setError("Email is required!");
        return;
    }
    if("".equals(txtFirstName.getText().toString())) {
        txtFirstName.setError("First name is required!");
        return;
    }
    if("".equals(txtLastName.getText().toString())) {
        txtLastName.setError("Last name is required!");
        return;
    }
    if("".equals(txtPassword1.getText().toString())) {
        txtPassword1.setError("Password is required!");
        return;
    }
    if("".equals(txtPassword2.getText().toString())) {
        txtPassword2.setError("Please retype your password!");
        return;
    }
    if(txtPassword1.getText().toString().equals(txtPassword2.getText().toString())) {
        //exec task register
        new TaskRegister().execute(txtEmail.getText().toString(), txtPassword1.getText().toString());
    } else {
        txtPassword2.setError("Confirm password does not match!");
    }
}

public class TaskRegister extends AsyncTask<String, Void, Integer> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        m_ProgresDialog = ProgressDialog.show(RegisterActivity.this, "Please wait", "Registration processing...", true);
    }

    @Override
    protected Integer doInBackground(String... params) {
        Map<String, String> postParam = new HashMap<>();
        postParam.put("email", params[0]);
        postParam.put("password", params[1]); //There is no First name and Last name params because those two lines of code crashes the app. Yet without it, you can't register.
        postParam.put("first_name", params[2]);
        postParam.put("last_name", params[3]);
        try{
            String jsonString = m_AccessServiceAPI.getJSONStringWithParam_POST(Common2.SERVICE_API_URL, postParam);
            JSONObject jsonObject = new JSONObject(jsonString);
            return jsonObject.getInt("result");
        }catch (Exception e) {
            e.printStackTrace();
            return Common2.RESULT_ERROR;
        }

    }

    @Override
    protected void onPostExecute(Integer integer) {
        super.onPostExecute(integer);
        m_ProgresDialog.dismiss();
        if(integer == Common2.RESULT_SUCCESS) {
            Toast.makeText(RegisterActivity.this, "Registration success", Toast.LENGTH_LONG).show();
            Intent i = new Intent();
            i.putExtra("email", txtEmail.getText().toString());
            i.putExtra("password", txtPassword1.getText().toString());
            i.putExtra("first_name", txtFirstName.getText().toString()); //These two lines of code causes the app to crash
            i.putExtra("last_name", txtLastName.getText().toString());
            setResult(3, i);
            finish();
        } else if(integer == Common2.RESULT_USER_EXISTS) {
            Toast.makeText(RegisterActivity.this, "Username already exists!", Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(RegisterActivity.this, "Registration failed!", Toast.LENGTH_LONG).show();
        }
    }
}}
导入android.app.Activity;
导入android.app.ProgressDialog;
导入android.content.Intent;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.EditText;
导入android.widget.Toast;
导入org.json.JSONObject;
导入java.util.HashMap;
导入java.util.Map;
公共类注册活动扩展活动{
私人编辑文本邮件;
私有EditText txtPassword1;
私有EditText txtPassword2;
私有EditText txtFirstName;
私有编辑文本txtLastName;
private ProgressDialog m_ProgressDialog;
私有AccessServiceAPI m_AccessServiceAPI;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u寄存器);
txtEmail=(EditText)findViewById(R.id.txt_电子邮件);
txtPassword1=(EditText)findViewById(R.id.txt_pwd1);
txtPassword2=(EditText)findViewById(R.id.txt_pwd2);
txtFirstName=(EditText)findViewById(R.id.txt\u first\u name);
txtLastName=(EditText)findViewById(R.id.txt\u last\u name);
m_AccessServiceAPI=新的AccessServiceAPI();
}
公共无效BTN注册表\单击(视图v){
//验证输入
if(“.”等于(txtEmail.getText().toString()){
setError(“需要电子邮件!”);
返回;
}
if(“.”.equals(txtFirstName.getText().toString())){
setError(“需要名字!”);
返回;
}
如果(“.equals(txtLastName.getText().toString())){
setError(“需要姓氏!”);
返回;
}
if(“.”.equals(txtPassword1.getText().toString())){
设置错误(“需要密码!”);
返回;
}
if(“.”.equals(txtPassword2.getText().toString())){
setError(“请重新键入您的密码!”);
返回;
}
if(txtPassword1.getText().toString().equals(txtPassword2.getText().toString())){
//执行任务寄存器
新任务寄存器().execute(txtmail.getText().toString(),txtPassword1.getText().toString());
}否则{
设置错误(“确认密码不匹配!”);
}
}
公共类TaskRegister扩展了异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
m_ProgresDialog=ProgressDialog.show(RegisterActivity.this,“请稍候”,“注册处理…”,true);
}
@凌驾
受保护的整数doInBackground(字符串…参数){
Map postParam=新的HashMap();
postParam.put(“电子邮件”,参数[0]);
postParam.put(“password”,params[1]);//没有名字和姓氏参数,因为这两行代码会使应用程序崩溃。但是如果没有它,您就无法注册。
postParam.put(“名字”,参数[2]);
postParam.put(“姓氏”,参数[3]);
试一试{
字符串jsonString=m_AccessServiceAPI.getJSONStringWithParam_POST(Common2.SERVICE_API_URL,postParam);
JSONObject JSONObject=新的JSONObject(jsonString);
返回jsonObject.getInt(“结果”);
}捕获(例外e){
e、 printStackTrace();
返回Common2.RESULT\u错误;
}
}
@凌驾
受保护的void onPostExecute(整数){
onPostExecute(整数);
m_ProgresDialog.discouse();
if(整数==Common2.RESULT\u SUCCESS){
Toast.makeText(RegisterActivity.this,“注册成功”,Toast.LENGTH_LONG.show();
意图i=新意图();
i、 putExtra(“email”,txtEmail.getText().toString());
i、 putExtra(“密码”,txtPassword1.getText().toString());
i、 putExtra(“first_name”,txtFirstName.getText().toString());//这两行代码导致应用程序崩溃
i、 putExtra(“last_name”,txtLastName.getText().toString());
setResult(3,i);
完成();
}else if(integer==Common2.RESULT\u USER\u存在){
Toast.makeText(RegisterActivity.this,“用户名已存在!”,Toast.LENGTH_LONG.show();
}否则{
Toast.makeText(RegisterActivity.this,“注册失败!”,Toast.LENGTH_LONG.show();
}
}
}}

您可能会遇到
空指针异常
,因为您尝试使用
param[2]
param[3]
,但没有将它们传递给
异步任务


您的修复将是
newtaskregister().execute(txtmail.getText().toString(),txtPassword1.getText().toString(),txtFirstName.getText().toString(),txtLastName.getText().toString())

您可能会遇到
空指针异常
,因为您尝试使用
param[2]
param[3]
,但没有将它们传递给
异步任务


您的修复将是
newtaskregister().execute(txtmail.getText().toString(),txtPassword1.getText().toString(),txtFirstName.getText().toString(),txtLastName.getText().toString())

您只传递电子邮件和密码,当您将参数设置为使用firstName和lastName时。更正行,如new
TaskRegister().execute(txtmail.getText().toString(),txtPassword1.getText().toString(),txtFirstName.getText().toString(),txtLastName.getText().toString())

您只传递电子邮件和密码,当您将参数设置为使用firstName和lastName时。更正行,如new
TaskRegister().execute(txtmail.getText().toString(),txtPassword1.getText().toString(),txtFirstName.getText().toString(),txtLastName.getText().toString())

显示