【发布时间】:2015-11-23 13:18:32
【问题描述】:
我不知道错误在哪里。希望可以有人帮帮我。 在真正的 android 设备上运行它会返回“不正确的用户详细信息”,但是它不会将数据发送到 mysql 服务器然后发送到数据库。 如果我从 chrome 浏览器运行 php 文件,它可以完美运行。 我使用 wampp 服务器作为本地主机。 提前非常感谢。
Android 清单
<?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>
登录活动
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));
}
}
注册活动
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));
}
});
}
}
服务器请求处理程序
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);
}
}
}
主要活动
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;
}
}
}
用户类
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 类
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 接口
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);
?>
【问题讨论】:
-
你的php代码在哪里?
标签: php android json web-services mysqli