Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 4.0使用JSON登录和注册_Android_Json_Android Asynctask - Fatal编程技术网

Android 4.0使用JSON登录和注册

Android 4.0使用JSON登录和注册,android,json,android-asynctask,Android,Json,Android Asynctask,我正在尝试在安卓4.0设备上进行登录和注册。因此,我必须更新代码以使用Asynctask,我遇到了错误,不知道如何修复它们。任何帮助都将不胜感激 public class RegisterActivity extends Activity { Button btnRegister; Button btnLinkToLogin; EditText inputFullName; EditText inputEmail; EditText inputPassword; TextView registe

我正在尝试在安卓4.0设备上进行登录和注册。因此,我必须更新代码以使用Asynctask,我遇到了错误,不知道如何修复它们。任何帮助都将不胜感激

public class RegisterActivity extends Activity {
Button btnRegister;
Button btnLinkToLogin;
EditText inputFullName;
EditText inputEmail;
EditText inputPassword;
TextView registerErrorMsg;

//JSON Response node names
private static String KEY_SUCCESS = "success";
private static String KEY_UID = "uid";
private static String KEY_NAME = "name";
private static String KEY_EMAIL = "email";
private static String KEY_CREATED_AT = "created_at";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_register);

    // Importing all assets like buttons, text fields
    inputFullName = (EditText) findViewById(R.id.registerName);
    inputEmail = (EditText) findViewById(R.id.registerEmail);
    inputPassword = (EditText) findViewById(R.id.registerPassword);
    btnRegister = (Button) findViewById(R.id.btnRegister);
    btnLinkToLogin = (Button) findViewById(R.id.btnLinkToLoginScreen);
    registerErrorMsg = (TextView) findViewById(R.id.register_error);

    // Register Button Click event
    btnRegister.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {

            new RegisterTask().execute();
        }
    });

    // Link to Login Screen
    btnLinkToLogin.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {
            Intent i = new Intent(getApplicationContext(),
                    LoginActivity.class);
            startActivity(i);
            // Close Registration View
            finish();
        }
    });
}

class RegisterTask extends AsyncTask<String, String, String> {
int success;
String email;
String password;
String name;

@Override
protected void onPreExecute() {
    super.onPreExecute();
    email = inputEmail.getText().toString();
    password = inputPassword.getText().toString();
    name = inputFullName.getText().toString();
}

@Override
protected String doInBackground(String... args) {
    UserFunctions userFunction = new UserFunctions();
    JSONObject json = userFunction.registerUser(name, email, password);

    Log.d("Create Response", json.toString());

    try {
        int success = json.getInt(KEY_SUCCESS);
        if (success == 1) {
            // DATABASE HANDLER
            // user successfully logged in
            // Store user details in SQLite Database
            DatabaseHandler db = new DatabaseHandler(
                    getApplicationContext());
            JSONObject json_user = json.getJSONObject("user");

            // Clear all previous data in database
            userFunction.logoutUser(getApplicationContext());

            db.addUser(json_user.getString(KEY_NAME),
                    json_user.getString(KEY_EMAIL),
                    json_user.getString(KEY_UID),
                    json_user.getString(KEY_CREATED_AT));

        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return null;
}

protected void onPostExecute(String file_url) {
if (success == 1) {
        Intent dashboard = new Intent(getApplicationContext(), LoginActivity.class);
        dashboard.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(dashboard);
        finish();
}else{
    //tvLError.setText("Incorrect username/password");

 }
}
}
}
公共类注册表活动扩展活动{
按钮BTN注册表;
按钮btnLinkToLogin;
编辑文本输入全名;
编辑文本输入电子邮件;
编辑文本输入密码;
TextView注册表errormsg;
//JSON响应节点名称
私有静态字符串密钥\u SUCCESS=“SUCCESS”;
私有静态字符串密钥\u UID=“UID”;
私有静态字符串密钥\u NAME=“NAME”;
私有静态字符串密钥\u EMAIL=“EMAIL”;
私有静态字符串密钥\u CREATED\u AT=“CREATED\u AT”;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u寄存器);
//导入按钮、文本字段等所有资源
inputFullName=(EditText)findViewById(R.id.registerName);
inputEmail=(EditText)findViewById(R.id.registerEmail);
inputPassword=(EditText)findViewById(R.id.registerPassword);
btnRegister=(按钮)findViewById(R.id.btnRegister);
btnLinkToLogin=(按钮)findViewById(R.id.btnLinkToLoginScreen);
registerErrorMsg=(TextView)findViewById(R.id.register\u错误);
//注册按钮点击事件
btnRegister.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图){
新寄存器任务().execute();
}
});
//链接到登录屏幕
btnLinkToLogin.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图){
意图i=新意图(getApplicationContext(),
物流活动(类);
星触觉(i);
//关闭注册视图
完成();
}
});
}
类RegisterTask扩展了异步任务{
成功;
字符串电子邮件;
字符串密码;
字符串名;
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
email=inputEmail.getText().toString();
password=inputPassword.getText().toString();
name=inputFullName.getText().toString();
}
@凌驾
受保护的字符串doInBackground(字符串…args){
UserFunctions userFunction=新的UserFunctions();
JSONObject json=userFunction.registerUser(名称、电子邮件、密码);
d(“创建响应”,json.toString());
试一试{
int success=json.getInt(KEY_success);
如果(成功==1){
//数据库处理程序
//用户已成功登录
//在SQLite数据库中存储用户详细信息
DatabaseHandler db=新的DatabaseHandler(
getApplicationContext());
JSONObject json_user=json.getJSONObject(“用户”);
//清除数据库中以前的所有数据
logoutUser(getApplicationContext());
db.addUser(json_user.getString(KEY_NAME),
json_user.getString(KEY_电子邮件),
json_user.getString(KEY_UID),
json_user.getString(KEY_CREATED_AT));
}
}捕获(JSONException e){
e、 printStackTrace();
}
返回null;
}
受保护的void onPostExecute(字符串文件\u url){
如果(成功==1){
意图仪表板=新意图(getApplicationContext(),LoginActivity.class);
dashboard.addFlags(意图、标志、活动、清除、顶部);
startActivity(仪表板);
完成();
}否则{
//tvLError.setText(“不正确的用户名/密码”);
}
}
}
}
我得到的错误日志

12-02 20:45:23.140:E/JSON解析器(28208):解析数据org.JSON.JSONException:Value时出错

<br of type java.lang.String cannot be converted to JSONObject
12-02 20:45:23.140: W/dalvikvm(28208): threadid=13: thread exiting with uncaught exception (group=0x415e62a0)
12-02 20:45:23.140: E/AndroidRuntime(28208): FATAL EXCEPTION: AsyncTask #1
12-02 20:45:23.140: E/AndroidRuntime(28208): java.lang.RuntimeException: An error occured while executing doInBackground()
12-02 20:45:23.140: E/AndroidRuntime(28208): at android.os.AsyncTask$3.done(AsyncTask.java:299)
12-02 20:45:23.140: E/AndroidRuntime(28208): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
12-02 20:45:23.140: E/AndroidRuntime(28208): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
12-02 20:45:23.140: E/AndroidRuntime(28208): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
12-02 20:45:23.140: E/AndroidRuntime(28208): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
12-02 20:45:23.140: E/AndroidRuntime(28208): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
12-02 20:45:23.140: E/AndroidRuntime(28208): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
12-02 20:45:23.140: E/AndroidRuntime(28208): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
12-02 20:45:23.140: E/AndroidRuntime(28208): at java.lang.Thread.run(Thread.java:856)
12-02 20:45:23.140: E/AndroidRuntime(28208): Caused by: java.lang.NullPointerException
12-02 20:45:23.140: E/AndroidRuntime(28208): at com.example.cs309.gotoclass.RegisterActivity$RegisterTask.doInBackground(RegisterActivity.java:89)
12-02 20:45:23.140: E/AndroidRuntime(28208): at com.example.cs309.gotoclass.RegisterActivity$RegisterTask.doInBackground(RegisterActivity.java:1)
12-02 20:45:23.140: E/AndroidRuntime(28208): at android.os.AsyncTask$2.call(AsyncTask.java:287)
12-02 20:45:23.140: E/AndroidRuntime(28208): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
12-02 20:45:23.140: E/AndroidRuntime(28208): ... 5 more

确保验证您的登录详细信息是否为空值,然后只调用AsychTask和call registerUser()方法。

如果没有prper源代码,很难理解。但是检查RegisterActivity.java中的第89行,该行是从doInBackground()调用的。放置一个断点并检查哪个项是空的(因为您得到的是NullPointerException)。一旦你修复了它,它就会工作。

发布更多日志和完整的stacktraceUpdated问题与注册表或者你有json解析问题,所以如果你发布从服务器检索到的json字符串,这将有助于解决你的问题。
(RegisterActivity.java:89)
有一个空值。里面有什么?我对如何获取json字符串感到困惑
public JSONObject registerUser(String name, String email, String password){
    // Building Parameters
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("tag", register_tag));
    params.add(new BasicNameValuePair("name", name));
    params.add(new BasicNameValuePair("email", email));
    params.add(new BasicNameValuePair("password", password));

    // getting JSON Object
    JSONObject json = jsonParser.getJSONFromUrl(registerURL, params);
    // return json
    return json;
}