2015-09-09 3 views
5

Follows ma classe fetchingconnexion Android avec objet JSON vide à aller chercher, même si l'exécution de fichier php dans le navigateur Chrome est ok

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){ 
       Log.v("happened", "2"); 
       String name = jObject.getString("name"); 
       int age = jObject.getInt("age"); 

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



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

     return returnedUser; 
    } 

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

Php fichier aller chercher Fetch_User_Data.php

<?php 

$con=mysqli_connect("localhost","root","","loginregister"); 

if (mysqli_connect_errno($con)) 
{ 
echo "Failed to connect to MySQL: " , mysqli_connect_error(); 
} 

if (isset($_POST["password"])) {$password = $_POST 

["password"];}else $password = 'bimbomix'; 
if (isset($_POST["username"])) {$username = $_POST 

["username"];}else $username = 'bimbomix'; 



$statement = mysqli_prepare($con, "SELECT * FROM user WHERE 

username = ? AND password = ?"); 
mysqli_stmt_bind_param($statement, "ss", $username, 

$password); 
mysqli_stmt_execute($statement); 
mysqli_stmt_store_result($statement); 
mysqli_stmt_bind_result($statement, $user_id, $name, $age, 

$username, $password); 

$user = array(); 

while(mysqli_stmt_fetch($statement)){ 
    $user['name'] = $name; 
    $user['age'] = $age; 
    $user['username'] = $username; 
    $user['password']= $password;  
} 

echo json_encode($user); 


mysqli_close($con); 

?> 

Test de codage en dur

 User returnedUser=null; 
     try { 

      post.setEntity(new UrlEncodedFormEntity(dataToSend)); 

      HttpResponse httpResponse = client.execute(post); 

      HttpEntity entity = httpResponse.getEntity(); 

      String result = EntityUtils.toString(entity); 
//until here hardcoding fills correctly returnedUser 
      JSONObject jObject = new JSONObject(result); 
returnedUser = new User("hello", 42, user.username, user.password); 
// this is hardcoded string that let returnedUser ==null 
// so perhaps problem is in jObject    

if (jObject.length() != 0){ 
       Log.v("happened", "2"); 
       String name = jObject.getString("name"); 
       int age = jObject.getInt("age"); 

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



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

     return returnedUser; 
    } 
+1

essayez d'ajouter returnUtilisateur; avant votre ligne de capture. – MetaSnarf

+1

Essayez d'ajouter un autre après votre 'if (jObject.length()! = 0) {' et en enregistrant le contenu de 'result' pour voir ce que PHP rejette autrement si votre' Log.v ("est arrivé", "2 ");' montre, essayez d'ajouter un autre Log.v montrant ensuite le contenu de 'result'. – Ultimater

+0

@ MetaSnarf Il donne une erreur car le retour stmt appartient à la méthode doInBackground –

Répondre

0

Je suis vraiment désolé. La question était simple, même si cela m'a rendu fou pour une paire de semaines! Regardez chercher le fichier "Fetch_User_Data.php" puis regardez la chaîne où je l'appelle "FetchUserData.php" et vous aurez fini ...