简体   繁体   English

android应用崩溃并导致注册错误

[英]android app crashes and gives error in registration

I have in the process of developing a registration app using Android Studios, however once users try to register the application just says error in registration and the LogCat does not give any error, as well as when debugging the app, I still get no errors. 我正在使用Android Studios开发注册应用程序,但是一旦用户尝试注册该应用程序时,只会说注册错误并且LogCat不会给出任何错误,以及在调试该应用程序时,我仍然没有收到任何错误。

Please can you help and tell me where I am going wrong as the code is correct as it was working couple of months ago, however since I have returned from holiday it just says "Error occurred in registration". 请您帮忙,告诉我哪里出了问题,因为该代码正确无误,因为它在几个月前就可以正常工作了,但是自从假期回来后,它只说“注册时发生错误”。

User data gets entered into the database however it does not allow the user to move onto the next activity as it says "Error occurred in registration". 用户数据已输入数据库,但是由于该用户说“注册时发生错误”,因此不允许用户继续进行下一个活动。 Please can you help or advise? 请您提供帮助或建议?

LogCat logcat的

  01-07 15:14:42.933 2161-4203/com.Oakland E/JSON Parser: Error parsing data org.json.JSONException: Value 2016-01-07 of type java.lang.String cannot be converted to JSONObject
01-07 15:14:42.938 2161-2161/com.Oakland E/AndroidRuntime: FATAL EXCEPTION: main
                                                                       Process: com.Oakland, PID: 2161
                                                                       java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String org.json.JSONObject.getString(java.lang.String)' on a null object reference
                                                                           at com.Oakland.Register$ProcessRegister.onPostExecute(Register.java:211)
                                                                           at com.Oakland.Register$ProcessRegister.onPostExecute(Register.java:171)

Line 211- if (json.getString(KEY_SUCCESS) != null) { if (json.getString(KEY_SUCCESS) != null) {

Register.Java Register.Java

@Override
    protected JSONObject doInBackground(String... args) {


        UserFunctions userFunction = new UserFunctions();
        JSONObject json = userFunction.registerUser(fname, lname, email, uname, password);

        return json;


    }
    @Override
    protected void onPostExecute(JSONObject json) {
        try {
            if (json != null && json.getString(KEY_SUCCESS) != null) {
                if (json != null && json.getString(KEY_SUCCESS) != null)
                registerErrorMsg.setText("");
                String res = json.getString(KEY_SUCCESS);

                String red = json.getString(KEY_ERROR);

                if(Integer.parseInt(res) == 1){
                    pDialog.setTitle("Getting Data");
                    pDialog.setMessage("Loading Info");

                    registerErrorMsg.setText("Successfully Registered");


                    DatabaseHandler db = new DatabaseHandler(getApplicationContext());
                    JSONObject json_user = json.getJSONObject("user");

                    /**
                     * Removes all the previous data in the SQlite database
                     **/

                    UserFunctions logout = new UserFunctions();
                    logout.logoutUser(getApplicationContext());
                    db.addUser(json_user.getString(KEY_FIRSTNAME),json_user.getString(KEY_LASTNAME),json_user.getString(KEY_EMAIL),json_user.getString(KEY_USERNAME),json_user.getString(KEY_UID),json_user.getString(KEY_CREATED_AT));
                    /**
                     * Stores registered data in SQlite Database
                     * Launch Registered screen
                     **/

                    Intent registered = new Intent(getApplicationContext(), Registered.class);

                    /**
                     * Close all views before launching Registered screen
                     **/
                    registered.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    pDialog.dismiss();
                    startActivity(registered);


                    finish();
                }

                else if (Integer.parseInt(red) ==2){
                    pDialog.dismiss();
                    registerErrorMsg.setText("User already exists");
                }
                else if (Integer.parseInt(red) ==3){
                    pDialog.dismiss();
                    registerErrorMsg.setText("Invalid Email id");
                }

            }


            else{
                pDialog.dismiss();

                registerErrorMsg.setText("Error occurred in registration");
            }

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


        }
    }}
public void NetAsync(View view){
    new NetCheck().execute();
}}

UserFunction.Java UserFunction.Java

//URL of the PHP API

    private static String registerURL = "http://10.0.2.2/Register_api/";

private static String register_tag = "register";



    /**
         * Function to  Register
         **/
        public JSONObject registerUser(String fname, String lname, String email, String uname, String password){
            // Building Parameters
            List params = new ArrayList();
            params.add(new BasicNameValuePair("tag", register_tag));
            params.add(new BasicNameValuePair("fname", fname));
            params.add(new BasicNameValuePair("lname", lname));
            params.add(new BasicNameValuePair("email", email));
            params.add(new BasicNameValuePair("uname", uname));
            params.add(new BasicNameValuePair("password", password));
            JSONObject json = jsonParser.getJSONFromUrl(registerURL,params);
            return json;
        }

Jsonpasar.java Jsonpasar.java

public class JSONParser {

    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";

    // constructor
    public JSONParser() {

    }

    public JSONObject getJSONFromUrl(String url, List<NameValuePair> params) {

        // Making HTTP request
        try {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);
            httpPost.setEntity(new UrlEncodedFormEntity(params));

            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
            Log.e("JSON", json);
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }

        // try parse the string to a JSON object
        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

        // return JSON String
        return jObj;

    }
}

DatabaseHandler.java DatabaseHandler.java

public class DatabaseHandler extends SQLiteOpenHelper {

    // All Static variables
    // Database Version
    private static final int DATABASE_VERSION = 1;

    // Database Name
    private static final String DATABASE_NAME = "cloud_contacts";

    // Login table name
    private static final String TABLE_LOGIN = "login";

    // Login Table Columns names
    private static final String KEY_ID = "id";
    private static final String KEY_FIRSTNAME = "fname";
    private static final String KEY_LASTNAME = "lname";
    private static final String KEY_EMAIL = "email";
    private static final String KEY_USERNAME = "uname";
    private static final String KEY_UID = "uid";
    private static final String KEY_CREATED_AT = "created_at";

    public DatabaseHandler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    // Creating Tables
    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_LOGIN_TABLE = "CREATE TABLE " + TABLE_LOGIN + "("
                + KEY_ID + " INTEGER PRIMARY KEY,"
                + KEY_FIRSTNAME + " TEXT,"
                + KEY_LASTNAME + " TEXT,"
                + KEY_EMAIL + " TEXT UNIQUE,"
                + KEY_USERNAME + " TEXT,"
                + KEY_UID + " TEXT,"
                + KEY_CREATED_AT + " TEXT" + ")";
        db.execSQL(CREATE_LOGIN_TABLE);
    }

    // Upgrading database
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Drop older table if existed
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_LOGIN);

        // Create tables again
        onCreate(db);
    }

    /**
     * Storing user details in database
     * */
    public void addUser(String fname, String lname, String email, String uname, String uid, String created_at) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_FIRSTNAME, fname); // FirstName
        values.put(KEY_LASTNAME, lname); // LastName
        values.put(KEY_EMAIL, email); // Email
        values.put(KEY_USERNAME, uname); // UserName
        values.put(KEY_UID, uid); // Email
        values.put(KEY_CREATED_AT, created_at); // Created At

        // Inserting Row
        db.insert(TABLE_LOGIN, null, values);
        db.close(); // Closing database connection
    }


    /**
     * Getting user data from database
     * */
    public HashMap<String, String> getUserDetails(){
        HashMap<String,String> user = new HashMap<String,String>();
        String selectQuery = "SELECT  * FROM " + TABLE_LOGIN;

        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);
        // Move to first row
        cursor.moveToFirst();
        if(cursor.getCount() > 0){
            user.put("fname", cursor.getString(1));
            user.put("lname", cursor.getString(2));
            user.put("email", cursor.getString(3));
            user.put("uname", cursor.getString(4));
            user.put("uid", cursor.getString(5));
            user.put("created_at", cursor.getString(6));
        }
        cursor.close();
        db.close();
        // return user
        return user;
    }






    /**
     * Getting user login status
     * return true if rows are there in table
     * */
    public int getRowCount() {
        String countQuery = "SELECT  * FROM " + TABLE_LOGIN;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(countQuery, null);
        int rowCount = cursor.getCount();
        db.close();
        cursor.close();

        // return row count
        return rowCount;
    }


    /**
     * Re crate database
     * Delete all tables and create them again
     * */
    public void resetTables(){
        SQLiteDatabase db = this.getWritableDatabase();
        // Delete All Rows
        db.delete(TABLE_LOGIN, null, null);
        db.close();
    }

I would suggest to use Jackson to create JSON strings. 我建议使用Jackson来创建JSON字符串。 You just set object and convert to json string. 您只需设置对象并转换为json字符串即可。 Also converting to object is easy. 同样转换为对象也很容易。

Error is connected with parsing error. 错误与解析错误有关。 Hmm. 嗯。 That's weird. 这很奇怪。 You say user is added to database but if "Error occurred in registration" shows, code with addUser couldn't be executed because it's inside if. 您说用户已添加到数据库,但是如果显示“注册时发生错误”,则无法执行带有addUser的代码,因为它位于if中。 I don't get application flow :( Can you tell more in comment? Also "registerUser" doesn't register user but only create json as I see. 我没有应用程序流程:(您能在评论中告诉更多吗?“ registerUser”也不会注册用户,而是仅创建json,正如我所见。

db.addUser(json_user.getString(KEY_FIRSTNAME),json_user.getString(KEY_LASTNAME),json_user.getString(KEY_EMAIL),json_user.getString(KEY_USERNAME),json_user.getString(KEY_UID),json_user.getString(KEY_CREATED_AT));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM