Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java php文件返回一个空数组,can';不显示用户信息_Java_Php_Android - Fatal编程技术网

Java php文件返回一个空数组,can';不显示用户信息

Java php文件返回一个空数组,can';不显示用户信息,java,php,android,Java,Php,Android,我正在使用php将我的android应用程序连接到在线托管的数据库。这里是指向保存php文件的页面的链接,这样您就可以看到它输出的内容,一个空数组 给我带来问题的是fetchUserData,它应该使用用户提供的用户名和密码来搜索该用户,然后显示用户表中与用户名匹配的所有其他行 这是连接到数据库的php文件(我知道连接很好,因为我的注册活动成功地在列中创建了一个新行) 请不要存储明文密码。这完全是为了一个课堂项目,我的教授告诉我们只有在完成后才需要担心安全问题。 <?php /*serve

我正在使用php将我的android应用程序连接到在线托管的数据库。这里是指向保存php文件的页面的链接,这样您就可以看到它输出的内容,一个空数组

给我带来问题的是fetchUserData,它应该使用用户提供的用户名和密码来搜索该用户,然后显示用户表中与用户名匹配的所有其他行

这是连接到数据库的php文件(我知道连接很好,因为我的注册活动成功地在列中创建了一个新行)


请不要存储明文密码。这完全是为了一个课堂项目,我的教授告诉我们只有在完成后才需要担心安全问题。
<?php
/*server, user, password, databse */
$conn=mysqli_connect("xxx", "xxx", "xxx","xxx");
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}

$password = $_POST["password"];
$username = $_POST["username"];  

$statement = mysqli_prepare($conn, "SELECT * FROM User WHERE username = ? AND password = ?");
if($statement === FALSE){ die(mysqli_error($conn)); }

mysqli_stmt_bind_param($statement, "ss", $username, $password);


mysqli_stmt_execute($statement);
//printf("Error: %s.\n", mysqli_stmt_error($statement));
mysqli_stmt_store_result($statement);
mysqli_stmt_bind_result($statement, $id, $username, $name, $sex, $age, $password);
$user = array ();
while(mysqli_stmt_fetch($statement)){
    $user[username] = $username;
    $user[name] = $name;
    $user[sex] = $sex;
    $user[age] = $age;
    $user[password] = $password;
}

echo json_encode($user);

mysqli_close($conn);
public class LoginActivity extends AppCompatActivity implements View.OnClickListener {

Button bLogin;
EditText etUsername, etFirst, etLast, etSex, etAge, etPassword;
TextView tvRegisterLink;

UserLocalStore userLocalStore;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    etUsername = (EditText) findViewById(R.id.etUsername);
    etPassword = (EditText) findViewById(R.id.etPassword);
    bLogin = (Button) findViewById(R.id.bLogin);
    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);
            break;

        case R.id.tvRegisterLink:
            startActivity(new Intent(this, RegisterActivity.class));
            break;
    }
}
private void authenticate(User user){
    ServerRequests serverRequests = new ServerRequests(this);
    serverRequests.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(LoginActivity.this);
    dialogBuilder.setMessage("Incorrect user info");
    dialogBuilder.setPositiveButton("Ok", null);
    dialogBuilder.show();
}
private void logUserIn(User returnedUser){
    userLocalStore.storeUserData(returnedUser);
    userLocalStore.setUserLoggedIn(true);

    startActivity(new Intent(this, ProfileActivity.class));
}
/*public void openHome(View view) {
    //build the intent
    Intent intent = new Intent(this, Home.class);
    startActivity(intent);
}*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_games) {
        return true;
    }

    return super.onOptionsItemSelected(item);
    }
public void openHome(View view) {
    // build the intent
    Intent intent = new Intent(this, Home.class);
    startActivity(intent);
}

}


public class User {
String username, name, sex, password;


 int age;

    public User (String username, String name, String sex, int age,
                 String password){

        this.username = username;
        this.name = name;
        this.sex = sex;
        this.age = age;
        this.password = password;
    }

    public User(String username, String password) {
        this.username = username;
        this.password = password;
        this.name = "";
        this.sex = "N/A";
        this.age = -1;
    }

}

    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("username", user.username);
        spEditor.putString("name", user.name);
        spEditor.putString("sex", user.sex);
        spEditor.putInt("age", user.age);
        spEditor.putString("password", user.password);
    }

    public User getLoggedInUser(){
        String username = userLocalDatabase.getString("username", "");
        String name = userLocalDatabase.getString("name", "");
        String sex = userLocalDatabase.getString("sex", "");
        int age = userLocalDatabase.getInt("age", -1);
        String password = userLocalDatabase.getString("password", "");

        User storedUser = new User(username, name, sex, age, 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)) {
            return true;
        }else{
            return false;
        }
    }
    public void clearUserData(){
        SharedPreferences.Editor spEditor = userLocalDatabase.edit();
        spEditor.clear();
        spEditor.commit();

    }


}


public class ProfileActivity extends AppCompatActivity implements View.OnClickListener {

    Button openHome;
    Button bLogout;
    TextView etUsername, etName, etSex, etAge;
    UserLocalStore userLocalStore;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_profile);

        etUsername = (TextView) findViewById(R.id.etUsername);
        etName = (TextView) findViewById(R.id.etName);
        etSex = (TextView) findViewById(R.id.etSex);
        etAge = (TextView) findViewById(R.id.etAge);
        bLogout = (Button) findViewById(R.id.bLogout);

        bLogout.setOnClickListener(this);

        userLocalStore = new UserLocalStore(this);
    }

    @Override
    protected void onStart() {
        super.onStart();

        if (authenticate() == true) {
            displayUserDetails();
        }else{
            startActivity(new Intent(ProfileActivity.this, LoginActivity.class));
        }
    }

    private boolean authenticate(){
        return userLocalStore.getUserLoggedIn();
    }

    private void displayUserDetails(){
        User user = userLocalStore.getLoggedInUser();

        etUsername.setText(user.username);
        etName.setText(user.name);
        etSex.setText(user.sex);
        etAge.setText(user.age + "");

    }

    @Override
    public void onClick(View v) {
        switch(v.getId()){
            case R.id.bLogout:
                userLocalStore.clearUserData();
                userLocalStore.setUserLoggedIn(false);



                startActivity(new Intent(this, LoginActivity.class));
                break;
        }
    }



}

public class ServerRequests {
    User user;
    GetUserCallback userCallback;

    ProgressDialog progressDialog;
    public static final int CONNECTION_TIMEOUT = 1000 * 15;
    public static final String SERVER_ADDRESS = "http://6mansquad.esy.es/";


    public ServerRequests(Context context) {
        progressDialog = new ProgressDialog(context);
        progressDialog.setCancelable(false);
        progressDialog.setTitle("Processing");
        progressDialog.setMessage("Please wait...");
    }

    public void storedUserDataInBackground(User user, GetUserCallback userCallback) {
        progressDialog.show();
        new StoreUserDataAsyncTask(user, userCallback).execute();

    }

    public void fetchUserDataInBackground(User user, GetUserCallback callBack) {
        progressDialog.show();
        new fetchUserDataAsyncTask(user, callBack).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<>();
            dataToSend.add(new BasicNameValuePair("username", user.username));
            dataToSend.add(new BasicNameValuePair("name", user.name));
            dataToSend.add(new BasicNameValuePair("sex", user.sex));
            dataToSend.add(new BasicNameValuePair("age", user.age + ""));
            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));
                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;

        public fetchUserDataAsyncTask(User user, GetUserCallback userCallback) {
            this.user = user;
            this.userCallback = userCallback;
        }

        @Override
        protected User doInBackground(Void... params) {
            ArrayList<NameValuePair> dataToSend = new ArrayList<>();
            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");

            User returnedUser = null;

            try {
                post.setEntity(new UrlEncodedFormEntity(dataToSend));
                HttpResponse httpResponse = client.execute(post);

                HttpEntity entity = httpResponse.getEntity();
                String result = EntityUtils.toString(entity);
                JSONObject jObject = new JSONObject(result);

                if (jObject.length() == 0) {
                    returnedUser = null;
                } else {

                    String name = jObject.getString("name");
                    String sex = jObject.getString("sex");
                    int age = jObject.getInt("age");


                    returnedUser = new User(user.username, name, sex, age, user.password);

                }

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

            }


            return returnedUser;
        }


        @Override
        protected void onPostExecute(User returnedUser) {
            progressDialog.dismiss();
            userCallback.done(user);
            super.onPostExecute(returnedUser);

        }
    }
}




public class LoginActivity extends AppCompatActivity implements View.OnClickListener {

    Button bLogin;
    EditText etUsername, etFirst, etLast, etSex, etAge, etPassword;
    TextView tvRegisterLink;

    UserLocalStore userLocalStore;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        etUsername = (EditText) findViewById(R.id.etUsername);
        etPassword = (EditText) findViewById(R.id.etPassword);
        bLogin = (Button) findViewById(R.id.bLogin);
        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);
                break;

            case R.id.tvRegisterLink:
                startActivity(new Intent(this, RegisterActivity.class));
                break;
        }
    }
    private void authenticate(User user){
        ServerRequests serverRequests = new ServerRequests(this);
        serverRequests.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(LoginActivity.this);
        dialogBuilder.setMessage("Incorrect user info");
        dialogBuilder.setPositiveButton("Ok", null);
        dialogBuilder.show();
    }
    private void logUserIn(User returnedUser){
        userLocalStore.storeUserData(returnedUser);
        userLocalStore.setUserLoggedIn(true);

        startActivity(new Intent(this, ProfileActivity.class));
    }
    /*public void openHome(View view) {
        //build the intent
        Intent intent = new Intent(this, Home.class);
        startActivity(intent);
    }*/
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_games) {
            return true;
        }

        return super.onOptionsItemSelected(item);
        }
    public void openHome(View view) {
        // build the intent
        Intent intent = new Intent(this, Home.class);
        startActivity(intent);
    }

}