For school I had to do a real simple login and authentication system on an Android app, and I'm wondering how my code can be optimised to reduce code duplication and how it can be made more object oriented?All the app does is make an API call to my SLIM restful web service using AsyncHttpClient library and stores the AUTHkey, name, and surname of the logged in user to shared preferences.loginScreen.java:public class LoginScreen extends ActionBarActivity {    private String username;    private String password;    private ProgressDialog prgDialog;    private String localhostURL = http://10.0.3.2/diploma/cloud_computing/tutorials/tutorial2/;    private String vKey;//    private String localhostURL = http://10.0.2.2/diploma/cloud_computing/tutorials/tutorial2/;    StringEntity entity = null;    StringEntity authVkeyEntity = null;    //Will store our post data    JSONObject params = new JSONObject();    JSONObject paramsAuth = new JSONObject();    //Shared Pref vars    public static final String MyPREFERENCES = MyPrefs;    public static final String SURNAME = surname;    public static final String FIRSTNAME = firstname;    public static final String VKEY = vkey;    public static SharedPreferences sharedpreferences;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_login_screen);        checkIfLoggedIn();        //Register assets        Button btnLogin = (Button) findViewById(R.id.btnLogin);        final EditText txtUsername = (EditText) findViewById(R.id.txtUsername);        final EditText txtPassword = (EditText) findViewById(R.id.txtPassword);        //Progress dialog initiation        prgDialog = new ProgressDialog(this); // Instantiate Progress Dialog object        prgDialog.setMessage(Please wait...);  // Set Progress Dialog Text        prgDialog.setCancelable(false); // Set Cancelable as False        btnLogin.setOnClickListener(                new View.OnClickListener() {                    @Override                    public void onClick(View v) {                        //Get username & password                        username = txtUsername.getText().toString();                        password = txtPassword.getText().toString();                        try {                            //Append json object name and value  (username, username)                            params.put(username, username);                            params.put(password, password);                        } catch (JSONException e) {                            e.printStackTrace();                        }                        try {                            entity = new StringEntity(params.toString());                        } catch (UnsupportedEncodingException e) {                            e.printStackTrace();                        }                        entity.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, application/json));                        //Make the request with the above params                        makeApiRequest(entity);                        System.out.println(4);                    }                });    }    public void makeApiRequest(StringEntity entity){        // Show Progress Dialog        prgDialog.show();        // Make RESTful webservice call using AsyncHttpClient object        AsyncHttpClient client = new AsyncHttpClient();        Context context = this.getApplicationContext();        client.post(context, localhostURL + user, entity, application/json, new AsyncHttpResponseHandler() {            // When the response returned by REST has Http response code '200'            @Override            public void onSuccess(String response) {                prgDialog.hide(); // Hide Progress Dialog                try {                    JSONObject obj = new JSONObject(response);   // Create JSON Object                    //If the object has a string named key run the following code                    if (obj.has(key)) {                        Toast.makeText(getApplicationContext(), obj.getString(givename) +  You are successfully logged in!, Toast.LENGTH_LONG).show();                        // Save data to shared pref and change page                        saveSharedPreferences(obj.getString(surname),obj.getString(givename),                                obj.getString(key));                        changeToWelcomeActivity();                    }                    else if (obj.has(pass-error))                        Toast.makeText(getApplicationContext(), Your password is incorrect, Toast.LENGTH_LONG).show();                    else if((obj.has(account-error)))                        Toast.makeText(getApplicationContext(), Your account doesn't exists, Toast.LENGTH_LONG).show();                } catch (JSONException e) {                    Toast.makeText(getApplicationContext(), Error Occured [Server's JSON response might be invalid]!, Toast.LENGTH_LONG).show();                    e.printStackTrace();                }            }            // When the response returned by REST has Http response code other than '200'            @Override            public void onFailure(int statusCode, Throwable error,                                  String content) {                // Hide Progress Dialog                prgDialog.hide();                // When Http response code is '404'                if (statusCode == 404) {                    Toast.makeText(getApplicationContext(), Requested resource not found, Toast.LENGTH_LONG).show();                }                // When Http response code is '500'                else if (statusCode == 500) {                    Toast.makeText(getApplicationContext(), Something went wrong at server end, Toast.LENGTH_LONG).show();                }                // When Http response code other than 404, 500                else {                    Toast.makeText(getApplicationContext(), Unexpected Error occcured! [Most common Error: Device might not be connected to Internet or remote server is not up and running], Toast.LENGTH_LONG).show();                }            }        });    }    public void saveSharedPreferences(String surname, String firstname, String key){        // Set up preferences collection        sharedpreferences = getSharedPreferences(MyPREFERENCES,                Context.MODE_PRIVATE);        //Save vkey, firstname, and vkey        SharedPreferences.Editor editor = sharedpreferences.edit();        editor.putString(SURNAME, surname );        editor.putString(FIRSTNAME, firstname );        editor.putString(VKEY, key );        editor.apply();        changeToWelcomeActivity();    }    public void checkIfLoggedIn(){        // Get vKey shared pref and assign to variable        validateSharedPreferenceAuthKeyApiRequest();        Log.d(checkIfLoggedIn, ???);        Log.d(vkey, vKey);        // If vKey is NOT empty, then don't run API request        if(vKey != ) {            validateSharedPreferenceAuthKeyApiRequest();            Log.d(in vKey = \\, 'VKEY is not empty');        }        // If vKey is empty then do nothing        else            return;    }    // Get shared pref vKey and assign to vKey variable    public void getSharedPref(){        SharedPreferences prefs = this.getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);        vKey = prefs.getString(VKEY, );        Log.d(in SHARED PREF = \\, vKey);    }    // Create the JSON auth params that will be sent via the POST HTTP    public void createAuthJsonRequestParams(){        try {            //Append json object/string name and value  (auth, vKey)            paramsAuth.put(auth, vKey);            Log.d(inCreateJsonReques, vKey);        } catch (JSONException e) {            e.printStackTrace();        }        try {            authVkeyEntity = new StringEntity(paramsAuth.toString());        } catch (UnsupportedEncodingException e) {            e.printStackTrace();        }        authVkeyEntity.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, application/json));    }    // Validate the auth key by sending post key of AUTH and receiving a true or false value    public void validateSharedPreferenceAuthKeyApiRequest(){        // Create the JSON object that is used below        getSharedPref();        createAuthJsonRequestParams();        // Make RESTful webservice call using AsyncHttpClient object        AsyncHttpClient client = new AsyncHttpClient();        Context context = this.getApplicationContext();        client.post(context, localhostURL + user/auth/, authVkeyEntity, application/json, new AsyncHttpResponseHandler() {            // When the response returned by REST has Http response code '200'            @Override            public void onSuccess(String response) {                prgDialog.hide(); // Hide Progress Dialog                try {                    Log.d(in AUTHENTICATED = \\, HIIHIHIHI);                    JSONObject obj = new JSONObject(response);   // Create JSON Object                    //If the object has a string named authenticated run the following code                    if (obj.has(authenticated)) {                        Toast.makeText(getApplicationContext(), Valid verification key!, Toast.LENGTH_LONG).show();                        Log.d(in AUTHENTICATED = \\, vKey);                        changeToWelcomeActivity();                    }                    // If the vKey is incorrect then post this                    else if (obj.has(error_authenticated))                        Toast.makeText(getApplicationContext(), Something has gone wrong, invalid authentication key, Toast.LENGTH_LONG).show();                } catch (JSONException e) {                    Toast.makeText(getApplicationContext(), !Error Occured [Server's JSON response might be invalid]!, Toast.LENGTH_LONG).show();                    e.printStackTrace();                }            }            // When the response returned by REST has Http response code other than '200'            @Override            public void onFailure(int statusCode, Throwable error,                                  String content) {                // Hide Progress Dialog                prgDialog.hide();                // When Http response code is '404'                if (statusCode == 404) {                    Toast.makeText(getApplicationContext(), Requested resource not found, Toast.LENGTH_LONG).show();                }                // When Http response code is '500'                else if (statusCode == 500) {                    Toast.makeText(getApplicationContext(), Something went wrong at server end, Toast.LENGTH_LONG).show();                }                // When Http response code other than 404, 500                else {                    Toast.makeText(getApplicationContext(), Unexpected Error occcured! [Most common Error: Device might not be connected to Internet or remote server is not up and running], Toast.LENGTH_LONG).show();                }            }        });    }    // Change from current activity to Welcome.class activity    public void changeToWelcomeActivity(){        //Change to welcome page        Intent myIntent = new Intent(this.getApplicationContext(), Welcome.class);        startActivity(myIntent);    }Welcome.java:public class Welcome extends ActionBarActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_welcome);        TextView txtWelcome = (TextView) findViewById(R.id.txtWelcome);        Log.d(in welcome, eee);        if(getPreferences() == 1)            txtWelcome.setText(Welcome  + LoginScreen.sharedpreferences.getString(LoginScreen.FIRSTNAME, ) +                      + LoginScreen.sharedpreferences.getString(LoginScreen.SURNAME, ));        else            txtWelcome.setText(Not logged in);    }    // custom method to get preferences    public static int getPreferences(){        int returned;        if (LoginScreen.sharedpreferences.contains(LoginScreen.SURNAME))            returned = 1;        else            returned = 0;        return returned;    }
Simple login and authentication app
java;object oriented;android;authentication