I don't know where the bug is. Hope someone can help me. Running it on real android device it returns "Incorrect user details" and howewer it doesn't send data to mysql server and then to database. If I run php files from chrome browser it works perfectly. I'm using wampp server as localhost. Thanks very much in advance.
Android Manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.wikibuyers.loginregister" >
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
>
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".Login"
android:label="@string/title_activity_login" >
</activity>
<activity
android:name=".Register"
android:label="@string/title_activity_register" >
</activity>
</application>
</manifest>
Login Activity
package com.wikibuyers.loginregister;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class Login extends Activity implements View.OnClickListener{
Button bLogin;
EditText etUsername, etPassword;
TextView tvRegisterLink;
UserLocalStore userLocalStore;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
bLogin = (Button)findViewById(R.id.bLogin);
etUsername = (EditText)findViewById(R.id.etUsername);
etPassword = (EditText)findViewById(R.id.etPassword);
tvRegisterLink = (TextView)findViewById(R.id.tvRegisterLink);
bLogin.setOnClickListener(this);
tvRegisterLink.setOnClickListener(this);
userLocalStore = new UserLocalStore(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.bLogin:
String username = etUsername.getText().toString();
String password = etPassword.getText().toString();
User user = new User(username,password);
authenticate(user);
userLocalStore.storeUserData(user);
userLocalStore.setUserLoggedIn(true);
break;
case R.id.tvRegisterLink:
startActivity(new Intent(this,Register.class));
break;
}
}
private void authenticate(User user){
ServerRequest serverRequest = new ServerRequest(this);
serverRequest.fetchUserDataInBackground(user, new GetUserCallback() {
@Override
public void done(User returnedUser) {
if (returnedUser == null){
showErrorMessage();
}else{
logUserIn(returnedUser);
}
}
});
}
private void showErrorMessage(){
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(Login.this);
dialogBuilder.setMessage("Incorrect user details");
dialogBuilder.setPositiveButton("Ok", null);
dialogBuilder.show();
}
private void logUserIn(User returnedUser){
userLocalStore.storeUserData(returnedUser);
userLocalStore.setUserLoggedIn(true);
startActivity(new Intent(this, MainActivity.class));
}
}
Register Activity
package com.wikibuyers.loginregister;
import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class Register extends Activity implements View.OnClickListener{
Button bRegister;
EditText etName, etAge, etUsername, etPassword;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
etName = (EditText)findViewById(R.id.etName);
etAge = (EditText)findViewById(R.id.etAge);
etUsername = (EditText)findViewById(R.id.etUsername);
etPassword = (EditText)findViewById(R.id.etPassword);
bRegister = (Button)findViewById(R.id.bRegister);
bRegister.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bRegister:
String name = etName.getText().toString();
String username = etUsername.getText().toString();
String password = etPassword.getText().toString();
int age = Integer.parseInt(etAge.getText().toString());
User user = new User(name,age,username,password);
registerUser(user);
break;
}
}
private void registerUser(User user){
ServerRequest serverRequest = new ServerRequest(this);
serverRequest.storeUserDataInBackground(user, new GetUserCallback() {
@Override
public void done(User returnedUser) {
startActivity(new Intent(Register.this,Login.class));
}
});
}
}
Server Requests Handler
package com.wikibuyers.loginregister;
import android.annotation.SuppressLint;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.util.EntityUtils;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.util.ArrayList;
/**
* Created by Domenico on 20/08/15.
*/
public class ServerRequest {
ProgressDialog progressDialog;
public static final int CONNECTION_TIMEOUT = 1000*15;
public static final String SERVER_ADDRESS = "http://192.168.1.***:8080/";
public ServerRequest (Context context){
progressDialog = new ProgressDialog(context);
progressDialog.setCancelable(false);
progressDialog.setTitle("Processing");
progressDialog.setMessage("Please wait...");
}
public void storeUserDataInBackground(User user, GetUserCallback userCallback){
progressDialog.show();
new StoreUserDataAsyncTask(user,userCallback).execute();
}
public void fetchUserDataInBackground(User user, GetUserCallback userCallback){
progressDialog.show();
new fetchUserDataAsyncTask(user,userCallback).execute();
}
public class StoreUserDataAsyncTask extends AsyncTask <Void,Void,Void>{
User user;
GetUserCallback userCallback;
public StoreUserDataAsyncTask(User user, GetUserCallback userCallback){
this.user = user;
this.userCallback = userCallback;
}
@Override
protected Void doInBackground(Void... params) {
ArrayList<NameValuePair> dataToSend = new ArrayList<NameValuePair>();
dataToSend.add(new BasicNameValuePair("name", user.name));
dataToSend.add(new BasicNameValuePair("age", user.age + ""));
dataToSend.add(new BasicNameValuePair("username", user.username));
dataToSend.add(new BasicNameValuePair("password", user.password));
HttpParams httpRequestParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpRequestParams, CONNECTION_TIMEOUT);
HttpConnectionParams.setSoTimeout(httpRequestParams, CONNECTION_TIMEOUT);
HttpClient client = new DefaultHttpClient(httpRequestParams);
HttpPost post = new HttpPost(SERVER_ADDRESS+"Register.php");
try {
post.setEntity(new UrlEncodedFormEntity(dataToSend));
HttpResponse httpResponse = client.execute(post);
} catch (Exception e){
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid){
progressDialog.dismiss();
userCallback.done(null);
super.onPostExecute(aVoid);
}
}
public class fetchUserDataAsyncTask extends AsyncTask<Void, Void, User>{
User user;
GetUserCallback userCallback;
User returnedUser ;
public fetchUserDataAsyncTask(User user, GetUserCallback userCallback){
this.user = user;
this.userCallback = userCallback;
}
@Override
protected User doInBackground(Void... params) {
ArrayList<NameValuePair> dataToSend = new ArrayList<NameValuePair>();
dataToSend.add(new BasicNameValuePair("username", user.username));
dataToSend.add(new BasicNameValuePair("password", user.password));
HttpParams httpRequestParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpRequestParams, CONNECTION_TIMEOUT);
HttpConnectionParams.setSoTimeout(httpRequestParams, CONNECTION_TIMEOUT);
HttpClient client = new DefaultHttpClient(httpRequestParams);
HttpPost post = new HttpPost(SERVER_ADDRESS + "FetchUserData.php");
try {
post.setEntity(new UrlEncodedFormEntity(dataToSend));
HttpResponse httpResponse = client.execute(post);
HttpEntity entity = httpResponse.getEntity();
String result = EntityUtils.toString(entity);
try {
JSONObject jObject = new JSONObject(result);
if (jObject.length() == 0) {
returnedUser = null;
} else {
String name = jObject.getString("name");
int age = jObject.getInt("age");
returnedUser = new User(name, age, user.username, user.password);
}
}catch (JSONException jE){
jE.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
return returnedUser;
}
@Override
protected void onPostExecute(User returnedUser){
progressDialog.dismiss();
userCallback.done(returnedUser);
super.onPostExecute(returnedUser);
}
}
}
Main Activity
package com.wikibuyers.loginregister;
import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity implements View.OnClickListener{
Button bLogout;
EditText etName, etAge, etUsername;
UserLocalStore userLocalStore;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bLogout = (Button)findViewById(R.id.bLogout);
etName = (EditText)findViewById(R.id.etName);
etAge = (EditText)findViewById(R.id.etAge);
etUsername = (EditText)findViewById(R.id.etUsername);
bLogout.setOnClickListener(this);
userLocalStore = new UserLocalStore(this);
}
@Override
protected void onStart() {
super.onStart();
if (autenthicate() == true){
displayUserDetails();
}else {
startActivity(new Intent(MainActivity.this, Login.class));
}
}
private void displayUserDetails(){
User user = userLocalStore.getLoggedInUser();
etUsername.setText(user.username);
etName.setText(user.name);
etAge.setText(user.age + "");
}
private boolean autenthicate(){
return userLocalStore.getUserLoggedIn();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bLogout:
userLocalStore.clearUserData();
userLocalStore.setUserLoggedIn(false);
startActivity(new Intent(this, Login.class));
break;
}
}
}
User class
package com.wikibuyers.loginregister;
/**
* Created by Domenico on 18/08/15.
*/
public class User {
String name, username, password;
int age;
public User (String name,int age,String username, String password) {
this.name = name;
this.age = age;
this.username = username;
this.password = password;
}
public User (String username,String password){
this.username = username;
this.password = password;
this.age = -1;
this.name = "";
}
}
UserLocalStore class
package com.wikibuyers.loginregister;
import android.content.Context;
import android.content.SharedPreferences;
/**
* Created by Domenico on 18/08/15.
*/
public class UserLocalStore {
public static final String SP_NAME = "userDetails";
SharedPreferences userLocalDatabase;
public UserLocalStore (Context context){
userLocalDatabase = context.getSharedPreferences(SP_NAME,0);
}
public void storeUserData (User user){
SharedPreferences.Editor spEditor = userLocalDatabase.edit();
spEditor.putString("name",user.name);
spEditor.putString("username",user.username);
spEditor.putString("password",user.password);
spEditor.putInt("age", user.age);
spEditor.commit();
}
public User getLoggedInUser (){
String name = userLocalDatabase.getString("name", "");
String username = userLocalDatabase.getString("username", "");
String password = userLocalDatabase.getString("password", "");
int age = userLocalDatabase.getInt("age", -1);
User storedUser = new User(name,age, username,password);
return storedUser;
}
public void setUserLoggedIn (boolean loggedIn){
SharedPreferences.Editor spEditor = userLocalDatabase.edit();
spEditor.putBoolean("LoggedIn",loggedIn);
spEditor.commit();
}
public boolean getUserLoggedIn(){
if(userLocalDatabase.getBoolean("loggedIn",false) == true){
return true;
}else{
return false;
}
}
public void clearUserData (){
SharedPreferences.Editor spEditor = userLocalDatabase.edit();
spEditor.clear();
spEditor.commit();
}
}
GetUserCallback interface
package com.wikibuyers.loginregister;
/**
* Created by Domenico on 20/08/15.
*/
interface GetUserCallback {
public abstract void done (User returnedUser);
}
Register.php
<?php
$con= mysqli_connect("localhost","root","","loginregister");
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " .mysqli_connect_error();
exit();
}
else{
echo "Connessione effettuata";}
if(isset($POST['name'])){$name = $_POST["name"];}else{$name="domenico";}
if(isset($POST['age'])){$age = $_POST["age"];}else{$age='42';}
if(isset($POST['password'])){$password = $_POST["password"];}else{$password="pacecca";}
if(isset($POST['username'])){$username = $_POST["username"];}else{$username="dompac";}
$statement = mysqli_prepare($con, "INSERT INTO user (name, age, username, password) VALUES (?, ?, ?, ?)");
mysqli_stmt_bind_param($statement, "siss", $name, $age, $username, $password);
mysqli_stmt_execute($statement);
mysqli_close($con);
?>
Fetch_User_Data.php
<?php
$con=mysqli_connect("localhost","root", "","loginregister");
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " .mysqli_connect_error();
}
$statement=mysqli_stmt_init($con);
if (mysqli_stmt_prepare($statement, "SELECT * FROM user WHERE username = ? AND password = ?")){
mysqli_stmt_bind_param($statement, "ss", $username, $password);
mysqli_stmt_execute($statement);
mysqli_stmt_bind_result($statement, $userID, $name, $age, $username, $password);
}
$user = array();
while (mysqli_stmt_fetch($statement)){
$user[0] = $name;
$user[1] = $age;
$user[2] = $username;
$user[3] = $password;
}
echo json_encode ($user);
mysqli_stmt_close($statement);
mysqli_close($con);
?>