0

I'm very new to Android and I'm currently making an application wherein the user can enter and ID number once (that serves as a login) and he can use access the rest of the features of the app.

I'm currently stuck in the displaying of a data from the MySQL server. Using the ID that the user entered (which is unique and only the user's identificaton), I can display the information with of the user (through TextView or something).

This is my code so far:

    public class MainActivity3Activity extends Activity {


   HttpPost httppost;
   StringBuffer buffer;
   HttpResponse response;
   HttpClient httpclient;
   List<NameValuePair> nameValuePairs;
   ProgressDialog dialog = null;
    TextView tv;
    TextView tv2;
    String get;

private WebView webView;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_activity3);

    tv = (TextView)findViewById(R.id.tv);
    tv2 = (TextView)findViewById(R.id.tv2);

    webView = (WebView) findViewById(R.id.webView);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.loadUrl("http://usamobileapp.pe.hu/webservice/student_info.php");

    SharedPreferences preferences = getSharedPreferences("rfid", Context.MODE_PRIVATE);
    if(preferences.contains("rfid")){
        get = preferences.getString("rfid", null);
    }

}

So my question what do I do from here? I'm quite familiar about httpost but I'm wondering how do I display the user information using the previously entered ID during the login? I heard things like JSON parsing but I'm not quite sure on how to use it.

How do I get to display the information of the user matching the ID he entered? How to diplay using a TextView?

Thanks for the help.

PS. Please disregard the webview there. I only used it as a sample if my app really us connected to my php.

3 Answers 3

1

1) make a restful API on your server

2) receive API elements on your client (android), i suggest retrofit, its too easy

3) display your data! otto will help :)

want more? more ,

it might seem hard, but if you study for a few days you'll learn it.

Sign up to request clarification or add additional context in comments.

Comments

1

To implement a login / registration system using MySql you need a server-side API, for example in PHP to manipulate the database.

You need something like that on the server side:

// check for tag type
if ($tag == 'login') {
    // Request type is check Login
    $email = $_POST['email'];
    $password = $_POST['password'];

    // check for user
    $user = $db->getUserByEmailAndPassword($email, $password);
    if ($user != false) {
        // user found
        $response["error"] = FALSE;
        $response["uid"] = $user["unique_id"];
        $response["user"]["name"] = $user["name"];
        $response["user"]["email"] = $user["email"];
        $response["user"]["created_at"] = $user["created_at"];
        $response["user"]["updated_at"] = $user["updated_at"];
        echo json_encode($response);
    } else {
        // user not found
        // echo json with error = 1
        $response["error"] = TRUE;
        $response["error_msg"] = "Incorrect email or password!";
        echo json_encode($response);
    }

And the function that queries the database:

public function getUserByEmailAndPassword($username, $password) {
    $query = $this->dbh->prepare("SELECT * FROM users2 WHERE username = :username");
    $query->bindParam(':username', $username);
    $result = $query->execute();
    // check for results
    if ($query->rowCount() > 0) {
        $result = $query->fetch(PDO::FETCH_ASSOC);
        $salt = $result['salt'];
        $encrypted_password = $result['encrypted_password'];
        $hash = $this->checkhashSSHA($salt, $password); 
        // check for password equality
        if ($encrypted_password == $hash) {
            // user authentication details are correct
            return $result;
        }
    } else {
        // user not found
        return false;
    }
}

The android 'calls' the php scripts:

private static String login_tag = "login";
public void loginUser(String username, String password) throws ExecutionException, InterruptedException {
    // Building Parameters
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("tag", login_tag));
    params.add(new BasicNameValuePair("username", username));
    params.add(new BasicNameValuePair("password", password));
    jsonParser = new DbHandler(activity, this, params).execute();
}

And here is the DbHandler:

  public DbHandler1(Activity activity, MyCallback dbIntf, List<NameValuePair> params) {
        this.activity = activity;
        intf = dbIntf;
        this.params = params;
    }


    public JSONObject makeHttpRequest() {
        // Making HTTP request
        try {
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(MainActivity.baseUrl);
            //If database contains greek characters instantiate with UTF-8 Encoding
            httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));

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

        } catch (HttpHostConnectException e) {
            new Handler(Looper.getMainLooper()).post(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(activity, R.string.connection_error, Toast.LENGTH_LONG).show();
                }
            });

        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            //If database contains greek characters instantiate with UTF-8 Encoding
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "UTF-8"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();

        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }
        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

        // return JSON String
        return jObj;
    }


    @Override
    protected JSONObject doInBackground(Void... params) {
        jObj = makeHttpRequest();
        return jObj;
    }

    @Override
    protected void onPostExecute(JSONObject jsonObject) {
        super.onPostExecute(jsonObject);
        try {
            intf.onRemoteCallComplete(jsonObject);
        } catch (JSONException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

So the php scripts 'catches' the tag and if the user exists it returns a JSON response to the device. For example:

{
    "tag": "login",
    "success": 1,
    "error": 0,
}

The data transfered from the MySql server must be JSON encoded.

On the android device you must read the JSON Response and act accordingly.

Take a look here for more details.

1 Comment

great. That's much more like it.
0

you need perform network operations on a separate thread from the UI. reade aboute rest Google I/O 2010 - Developing Android REST client application
documentation
in the client, for rest api i like use retrofit + gsongroundy
or php, very easy create rest api using slim frameworkHow to create REST API for Android app using PHP, Slim and MySQL

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.