Android的HTTP PHP JSON mysqli的Web服务插入和检索数据不起作用 [英] Android http php json mysqli web services insert and retrieve data doesn't work

查看:187
本文介绍了Android的HTTP PHP JSON mysqli的Web服务插入和检索数据不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不知道哪里出Bug。希望有人能帮助我。
运行它真实的Andr​​oid设备将返回不正确的用户范围,howewer它不发送数据到MySQL服务器,然后到数据库。
如果我运行Chrome浏览器的PHP文件它完美。
我使用wampp服务器为localhost。
非常感谢在前进。

Android清单

 <?XML版本=1.0编码=UTF-8&GT?;
<清单的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
包=com.wikibuyers.loginregister>
<使用许可权的android:NAME =android.permission.INTERNET对/>
<使用许可权的android:NAME =android.permission.ACCESS_NETWORK_STATE/>
<使用许可权的android:NAME =android.permission.ACCESS_WIFI_STATE/>
<应用
    机器人:allowBackup =真
    机器人:图标=@的mipmap / ic_launcher
    机器人:标签=@字符串/ APP_NAME
     >
    <活动
        机器人:名字=。MainActivity
        机器人:标签=@字符串/ APP_NAME>
        &所述;意图滤光器>
            <作用机器人:名字=android.intent.action.MAIN/>            <类机器人:名字=android.intent.category.LAUNCHER/>
        &所述; /意图滤光器>
    < /活性GT;
    <活动
        机器人:登录NAME =
        机器人:标签=@字符串/ title_activity_login>
    < /活性GT;
    <活动
        机器人:注册NAME =
        机器人:标签=@字符串/ title_activity_register>
    < /活性GT;
< /用途>< /清单>

登录活动

 包com.wikibuyers.loginregister;进口android.app.Activity;
进口android.app.AlertDialog;
进口android.content.Intent;
进口android.support.v7.app.AppCompatActivity;
进口android.os.Bundle;
进口android.view.Menu;
进口android.view.MenuItem;
进口android.view.View;
进口android.widget.Button;
进口android.widget.EditText;
进口android.widget.TextView;公共类扩展登录活动实现View.OnClickListener {按钮bLogin;
的EditText etUsername,etPassword;
TextView的tvRegisterLink;
UserLocalStore userLocalStore;@覆盖
保护无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_login);    bLogin =(按钮)findViewById(R.id.bLogin);
    etUsername =(EditText上)findViewById(R.id.etUsername);
    etPassword =(EditText上)findViewById(R.id.etPassword);
    tvRegisterLink =(的TextView)findViewById(R.id.tvRegisterLink);    bLogin.setOnClickListener(本);
    tvRegisterLink.setOnClickListener(本);    userLocalStore =新UserLocalStore(本);}
@覆盖
公共无效的onClick(视图v){    开关(v.getId()){        案例R.id.bLogin:
            字符串username = etUsername.getText()的toString()。
            。字符串密码= etPassword.getText()的toString();            用户的用户=新用户(用户名,密码);            认证(用户);            userLocalStore.storeUserData(用户);
            userLocalStore.setUserLoggedIn(真);
            打破;        案例R.id.tvRegisterLink:
            startActivity(新意图(这一点,Register.class));            打破;
    }
}私人无效身份验证(用户用户){
    ServerRequest serverRequest =新ServerRequest(本);
    serverRequest.fetchUserDataInBackground(用户,新GetUserCallback(){
        @覆盖
        公共无效完成(用户returnedUser){
            如果(returnedUser == NULL){
                showErrorMessage();
            }其他{
                logUserIn(returnedUser);
            }
        }
    });
}私人无效showErrorMessage(){
    AlertDialog.Builder dialogBu​​ilder =新AlertDialog.Builder(Login.this);
    dialogBu​​ilder.setMessage(不正确的用户详细信息);
    dialogBu​​ilder.setPositiveButton(OK,NULL);
    dialogBu​​ilder.show();
}私人无效logUserIn(用户returnedUser){
    userLocalStore.storeUserData(returnedUser);
    userLocalStore.setUserLoggedIn(真);    startActivity(新意图(这一点,MainActivity.class)); }
}

注册活动

 包com.wikibuyers.loginregister;进口android.app.Activity;
进口android.content.Intent;
进口android.support.v7.app.AppCompatActivity;
进口android.os.Bundle;
进口android.view.Menu;
进口android.view.MenuItem;
进口android.view.View;
进口android.widget.Button;
进口android.widget.EditText;公共类注册扩展活动实现View.OnClickListener {按钮bRegister;
的EditText etName,ETAGE,etUsername,etPassword;@覆盖
保护无效的onCreate(捆绑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 =(按钮)findViewById(R.id.bRegister);
    bRegister.setOnClickListener(本);
}
@覆盖
公共无效的onClick(视图v){
    开关(v.getId()){        案例R.id.bRegister:            字符串名称= etName.getText()的toString()。
            字符串username = etUsername.getText()的toString()。
            。字符串密码= etPassword.getText()的toString();
            INT年龄=的Integer.parseInt(etAge.getText()的toString());            用户的用户=新用户(姓名,年龄,用户名,密码);            registerUser(用户);            打破;
    }
}私人无效registerUser(用户用户){
    ServerRequest serverRequest =新ServerRequest(本);
    serverRequest.storeUserDataInBackground(用户,新GetUserCallback(){
        @覆盖
        公共无效完成(用户returnedUser){
            startActivity(新意图(Register.this,Login.class));
        }
    });
}
}

服务器请求处理程序

 包com.wikibuyers.loginregister;进口android.annotation.Sup pressLint;
进口android.app.ProgressDialog;
进口android.content.Context;
进口android.os.AsyncTask;进口org.apache.http.HttpEntity;
进口org.apache.http.Htt presponse;
进口org.apache.http.NameValuePair;
进口org.apache.http.client.ClientProtocolException;
进口org.apache.http.client.HttpClient;
进口org.apache.http.client.entity.UrlEn codedFormEntity;
进口org.apache.http.client.methods.HttpPost;
进口org.apache.http.impl.client.DefaultHttpClient;
进口org.apache.http.message.BasicNameValuePair;
进口org.apache.http.params.BasicHttpParams;
进口org.apache.http.params.HttpConnectionParams;
进口org.apache.http.params.HttpParams;
进口org.apache.http.util.EntityUtils;
进口org.json.JSONException;
进口org.json.JSONObject;进口java.io.IOException异常;
进口的java.util.ArrayList;/ **
 *创建者多梅尼科上20/08/15。
 * /公共类ServerRequest {ProgressDialog progressDialog;
公共静态最终诠释CONNECTION_TIMEOUT = 1000 * 15;
公共静态最后弦乐SERVER_ADDRESS =HTTP://192.168.1.***:8080 /;公共ServerRequest(上下文的背景下){    progressDialog =新ProgressDialog(背景);
    progressDialog.setCancelable(假);
    progressDialog.setTitle(处理);
    progressDialog.setMessage(请稍候...);
}公共无效storeUserDataInBackground(用户用户,GetUserCallback userCallback){    progressDialog.show();
    新StoreUserDataAsyncTask(用户,userCallback).execute();
}公共无效fetchUserDataInBackground(用户用户,GetUserCallback userCallback){    progressDialog.show();
    新fetchUserDataAsyncTask(用户,userCallback).execute();}公共类StoreUserDataAsyncTask扩展的AsyncTask<太虚,太虚,太虚> {    用户用户;
    GetUserCallback userCallback;    公共StoreUserDataAsyncTask(用户用户,GetUserCallback userCallback){
        this.user =用户;
        this.userCallback = userCallback;
    }    @覆盖
    保护无效doInBackground(虚空...... PARAMS){        ArrayList的<&的NameValuePair GT; dataToSend =新的ArrayList<&的NameValuePair GT;();
        dataToSend.add(新BasicNameValuePair(姓名,user.name));
        dataToSend.add(新BasicNameValuePair(时代,user.age +));
        dataToSend.add(新BasicNameValuePair(用户名,user.username));
        dataToSend.add(新BasicNameValuePair(密码,user.password的));        的HttpParams HTT prequestParams =新BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(HTT prequestParams,CONNECTION_TIMEOUT);
        HttpConnectionParams.setSoTimeout(HTT prequestParams,CONNECTION_TIMEOUT);        HttpClient的客户端=新DefaultHttpClient(HTT prequestParams);
        HttpPost后=新HttpPost(SERVER_ADDRESS +Register.php);        尝试{
            post.setEntity(新UrlEn codedFormEntity(dataToSend));
            HTT presponse HTT presponse = client.execute(岗位);
        }赶上(例外五){
            e.printStackTrace();
        }
        返回null;
    }    @覆盖
    保护无效onPostExecute(虚空避免){
        progressDialog.dismiss();
        userCallback.done(NULL);
        super.onPostExecute(避免);
    }
}公共类fetchUserDataAsyncTask扩展的AsyncTask<太虚,太虚,使用者名称> {
    用户用户;
    GetUserCallback userCallback;
    用户returnedUser;
    公共fetchUserDataAsyncTask(用户用户,GetUserCallback userCallback){
        this.user =用户;
        this.userCallback = userCallback;
    }    @覆盖
    保护用户doInBackground(虚空...... PARAMS){
        ArrayList的<&的NameValuePair GT; dataToSend =新的ArrayList<&的NameValuePair GT;();        dataToSend.add(新BasicNameValuePair(用户名,user.username));
        dataToSend.add(新BasicNameValuePair(密码,user.password的));        的HttpParams HTT prequestParams =新BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(HTT prequestParams,CONNECTION_TIMEOUT);
        HttpConnectionParams.setSoTimeout(HTT prequestParams,CONNECTION_TIMEOUT);        HttpClient的客户端=新DefaultHttpClient(HTT prequestParams);
        HttpPost后=新HttpPost(SERVER_ADDRESS +FetchUserData.php);
        尝试{
            post.setEntity(新UrlEn codedFormEntity(dataToSend));
            HTT presponse HTT presponse = client.execute(岗位);            HttpEntity实体= HTT presponse.getEntity();
            字符串结果= EntityUtils.toString(实体);
         尝试{
             JSONObject的jObject =新的JSONObject(结果);             如果(jObject.length()== 0){
                 returnedUser = NULL;
             }其他{
                 字符串名称= jObject.getString(名称);
                 INT年龄= jObject.getInt(时代);
                 returnedUser =新用户(姓名,年龄,user.username,user.password的);             }
         }赶上(JSONException JE){
             jE.printStackTrace();
         }
        }赶上(IOException异常五){
            e.printStackTrace();
        }
        返回returnedUser;        }    @覆盖
    保护无效onPostExecute(用户returnedUser){
        progressDialog.dismiss();
        userCallback.done(returnedUser);
        super.onPostExecute(returnedUser);
    }
}
}

主要活动

 包com.wikibuyers.loginregister;进口android.app.Activity;
进口android.content.Intent;
进口android.support.v7.app.AppCompatActivity;
进口android.os.Bundle;
进口android.view.Menu;
进口android.view.MenuItem;
进口android.view.View;
进口android.widget.Button;
进口android.widget.EditText;公共类MainActivity扩展活动实现View.OnClickListener {按钮bLogout;
的EditText etName,ETAGE,etUsername;
UserLocalStore userLocalStore;
@覆盖
保护无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_main);
    bLogout =(按钮)findViewById(R.id.bLogout);
    etName =(EditText上)findViewById(R.id.etName);
    ETAGE =(EditText上)findViewById(R.id.etAge);
    etUsername =(EditText上)findViewById(R.id.etUsername);    bLogout.setOnClickListener(本);    userLocalStore =新UserLocalStore(本);
}
@覆盖
保护无效调用onStart(){
    super.onStart();
    如果(autenthicate()==真){        displayUserDetails();    }其他{
        startActivity(新意图(MainActivity.this,Login.class));
    }}私人无效displayUserDetails(){
    用户的用户= userLocalStore.getLoggedInUser();    etUsername.setText(user.username);
    etName.setText(user.name);
    etAge.setText(user.age +);}私人布尔autenthicate(){    返回userLocalStore.getUserLoggedIn();
}@覆盖
公共无效的onClick(视图v){    开关(v.getId()){        案例R.id.bLogout:
            userLocalStore.clearUserData();
            userLocalStore.setUserLoggedIn(假);
            startActivity(新意图(这一点,Login.class));
            打破;
    }
}
}

用户级

 包com.wikibuyers.loginregister;/ **
*创建者多梅尼科上18/08/15。
* /
公共类用户{字符串名称,用户名,密码;
INT年龄;公共用户(字符串名称,诠释年龄,字符串username,字符串密码){    this.name =名称;
    this.age =年龄;
    this.username =用户名;
    this.password =密码;}公共用户(用户名字符串,字符串密码){    this.username =用户名;
    this.password =密码;
    this.age = -1;
    this.name =;}}

UserLocalStore类

 包com.wikibuyers.loginregister;进口android.content.Context;
进口android.content.Shared preferences;/ **
*创建者多梅尼科上18/08/15。
* /
公共类UserLocalStore {公共静态最后弦乐SP_NAME =为userDetails;
共享preferences userLocalDatabase;公共UserLocalStore(上下文的背景下){
    userLocalDatabase = context.getShared preferences(SP_NAME,0);
}公共无效storeUserData(用户用户){   共享preferences.Editor spEditor = userLocalDatabase.edit();
    spEditor.putString(名,user.name);
    spEditor.putString(用户名,user.username);
    spEditor.putString(密码,user.password的);
    spEditor.putInt(时代,user.age);
    spEditor.commit();
}公共用户getLoggedInUser(){    字符串名称= userLocalDatabase.getString(名,);
    字符串username = userLocalDatabase.getString(用户名,);
    字符串密码= userLocalDatabase.getString(密码,);
    INT年龄= userLocalDatabase.getInt(时代,-1);    用户storedUser =新用户(姓名,年龄,用户名,密码);    返回storedUser;}公共无效setUserLoggedIn(布尔的loggedIn){    共享preferences.Editor spEditor = userLocalDatabase.edit();
    spEditor.putBoolean(的loggedIn的loggedIn);
    spEditor.commit();
}公共布尔getUserLoggedIn(){
    如果(userLocalDatabase.getBoolean(的loggedIn,假)==真){
        返回true;
    }其他{
        返回false;
    }}公共无效clearUserData(){
    共享preferences.Editor spEditor = userLocalDatabase.edit();
    spEditor.clear();
    spEditor.commit();
}}

GetUserCallback接口

 包com.wikibuyers.loginregister;/ **
*创建者多梅尼科上20/08/15。
* /
接口GetUserCallback {公共抽象无效完成(用户returnedUser);}

Register.php

 < PHP
$ CON = mysqli_connect(本地主机,根,,登录登录注册);如果(mysqli_connect_errno())
{
回声无法连接到MySQL:.mysqli_connect_error();
出口();
}
其他{
回声CONNESSIONE effettuata;}如果(使用isset($ POST ['名'])){$名= $ _ POST [名称];}其他{$ NAME =多梅尼科;}
如果(使用isset($ POST ['年龄'])){$年龄= $ _ POST [时代];}其他{$年龄= '42';}
如果(使用isset($ POST ['密码'])){$密码= $ _ POST [密码];}其他{$密码=pacecca;}
如果(使用isset($ POST ['用户名'])){$用户名= $ _ POST [用户名];}其他{$用户名=dompac;}$声明= mysqli_ prepare($ CON,INSERT INTO用户(姓名,年龄,用户名,密码)VALUES(,,,)????);mysqli_stmt_bind_param($声明,SISS,$名称,$年龄,$的用户名,密码$);mysqli_stmt_execute($语句);mysqli_close($ CON);
?>

Fetch_User_Data.php

 < PHP $ CON = mysqli_connect(本地主机,根,,登录登录注册); 如果(mysqli_connect_errno())
 {
 回声无法连接到MySQL:.mysqli_connect_error();
 }$声明= mysqli_stmt_init($ CON);如果(mysqli_stmt_ prepare($声明,SELECT * FROM用户WHERE用户名=?AND密码=?)){mysqli_stmt_bind_param($声明中,SS,$的用户名,密码$);
mysqli_stmt_execute($语句);
mysqli_stmt_bind_result($声明,$用户ID,$名称,$年龄,$的用户名,密码$);
}
 $ USER =阵列(); 而(mysqli_stmt_fetch($语句)){
      $用户[0] = $名称;
      $用户[1] = $周岁;
      $用户[2] = $的用户名;
      $用户[3] = $的密码;
 }
 回声json_en code($用户); mysqli_stmt_close($语句);
 mysqli_close($ CON);?>


解决方案

我很抱歉。问题很简单,即使它已经我疯了一对周!
只看提取文件Fetch_User_Data.php再看看字符串,其中我叫它为FetchUserData.php,你会做...

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);

?>

解决方案

I'm so sorry. Issue was simple, even if it has gone me mad for a pair of weeks! Look at fetch file "Fetch_User_Data.php" and then look at string where I call it as "FetchUserData.php" and you'll be done...

这篇关于Android的HTTP PHP JSON mysqli的Web服务插入和检索数据不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆