【问题标题】:Android http php json mysqli web services insert and retrieve data doesn't workAndroid http php json mysqli Web服务插入和检索数据不起作用
【发布时间】: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


【解决方案1】:

我很抱歉。问题很简单,即使它让我发疯了两个星期! 查看获取文件“Fetch_User_Data.php”,然后查看我称之为“FetchUserData.php”的字符串,您将完成...

【讨论】:

    猜你喜欢
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    相关资源
    最近更新 更多