0

Android4.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");

 }
}
}
}

そして、私が取得しているエラーログ...

12-02 20:45:23.140:E / JSONパーサー(28208):データの解析中にエラーが発生しましたorg.json.JSONException:値

<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

registerUser

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;
}
4

2 に答える 2

0

適切なソースコードがないと理解するのは難しいです。ただし、doInBackground() から呼び出される RegisterActivity.java の Line#89 を確認してください。ブレークポイントを置き、どの項目が NULL になるかを確認します (NullPointerException が発生しているため)。それを修正すると、それは機能します。

于 2013-12-24T06:37:58.840 に答える
0

null値のログイン詳細を確認してから、AsychTaskとregisterUser()メソッドのみを呼び出してください。

于 2012-12-06T12:15:09.960 に答える