¿Por qué la función no obtiene datos de php en android?

Quiero obtener respuesta después de los datos de post, pero falla. Quiero crear un sistema de inicio de sesión, he enviado con éxito los datos al archivo php, todo está funcionando bien ahora Quiero obtener la respuesta de la misma función, pero soy incapaz de saber dónde está el problema.

Aquí está la función de Java:

public class PostDataGetRes extends AsyncTask<String, String, String> { protected void onPreExecute() { super.onPreExecute(); } @Override protected String doInBackground(String... strings) { try { postRData(); } catch (NullPointerException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(String lenghtOfFile) { // do stuff after posting data } } public void postRData() { String result = ""; InputStream isr = null; final String email = editEmail.getText().toString(); final String pass = editPass.getText().toString(); // Create a new HttpClient and Post Header HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://website.com/appservice.php"); try { // Add your data List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); nameValuePairs.add(new BasicNameValuePair("id", email)); nameValuePairs.add(new BasicNameValuePair("stringdata", pass)); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); // Execute HTTP Post Request HttpResponse response = httpclient.execute(httppost); resultView.setText("Inserted"); HttpEntity entity = response.getEntity(); isr = entity.getContent(); //convert response to string try{ BufferedReader reader = new BufferedReader(new InputStreamReader(isr,"iso-8859-1"),8); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } isr.close(); result=sb.toString(); } catch(Exception e){ Log.e("log_tag", "Error converting result "+e.toString()); } //parse json data try { String s = ""; JSONArray jArray = new JSONArray(result); for(int i=0; i<jArray.length();i++){ JSONObject json = jArray.getJSONObject(i); s = s + "Name : "+json.getString("first_name")+"\n\n"; //"User ID : "+json.getInt("user_id")+"\n"+ //"Name : "+json.getString("first_name")+"\n"+ //"Email : "+json.getString("email")+"\n\n"; } resultView.setText(s); } catch (Exception e) { // TODO: handle exception Log.e("log_tag", "Error Parsing Data "+e.toString()); } } catch (ClientProtocolException e) { // TODO Auto-generated catch block } catch (IOException e) { // TODO Auto-generated catch block } resultView.setText("Done"); } 

Y aquí está el código php:

 if($id){ $query = mysql_query("SELECT first_name FROM users where email = '$id' "); while($row=mysql_fetch_assoc($query)){ $selectedData[]=$row; } print(json_encode($selectedData)); } 

Por favor, ayúdame He intentado hasta ahora, pero no pude lograr ningún resultado. Por favor, ayúdame cómo puedo obtener respuesta de archivo php después de la ejecución de la consulta.

Al principio asegúrese de obtener el objeto JSON correcto de su sitio web – intente imprimirlo como Toast.makeText() . En cuanto a los navegadores web mantener los comentarios html distancia, android se obtiene en respuesta.

AsyncTask objetos y clases de AsyncTask no están diseñados para que se hagan de la forma en que se proporcionan y tampoco se pueden realizar operaciones de interfaz de usuario en doInBackground() . AsyncTask se hace de una manera de no bloquear GUI. Este es un ejemplo no muy diferente de cómo utiliza métodos que tiene en la clase AsyncTask :

 class Logging extends AsyncTask<String,String,Void>{ JSONObject json=null; String output=""; String log=StringCheck.buildSpaces(login.getText().toString()); String pas=StringCheck.buildSpaces(password.getText().toString()); String url="http://www.mastah.esy.es/webservice/login.php?login="+log+"&pass="+pas; protected void onPreExecute() { Toast.makeText(getApplicationContext(), "Operation pending, please wait", Toast.LENGTH_SHORT).show(); } @Override protected Void doInBackground(String... params) { HttpClient client = new DefaultHttpClient(); HttpGet request = new HttpGet(url); request.addHeader("User-Agent", "User-Agent"); HttpResponse response; try { response = client.execute(request); BufferedReader br = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); String line=""; StringBuilder result = new StringBuilder(); while ((line = br.readLine()) != null) { result.append(line); } output=result.toString(); } catch (ClientProtocolException e) { Toast.makeText(getApplicationContext(), "Connection problems", Toast.LENGTH_LONG).show(); } catch (IOException e) { Toast.makeText(getApplicationContext(), "Conversion problems", Toast.LENGTH_LONG).show(); } return null; } @Override protected void onPostExecute(Void w) { try { json = new JSONObject(output); if(json.getInt("err")==1){ Toast.makeText(getApplicationContext(), json.getString("msg"), Toast.LENGTH_LONG).show(); }else{ String id_user="-1"; Toast.makeText(getApplicationContext(), json.getString("msg"), Toast.LENGTH_LONG).show(); JSONArray arr = json.getJSONArray("data"); for(int i =0;i<arr.length();i++){ JSONObject o = arr.getJSONObject(i); id_user = o.getString("id_user"); } User.getInstance().setName(log); User.getInstance().setId(Integer.valueOf(id_user)); Intent i = new Intent(getApplicationContext(),Discover.class); startActivity(i); } } catch (JSONException e) { } super.onPostExecute(w); } } 

Contenido del archivo PHP :

 $data = array( 'err' => 0, 'msg' => "", 'data' => array(), ); $mysqli = new MySQLi($dbhost,$dbuser,$dbpass,$dbname); if($mysqli->connect_errno){ $data['err'] = 1; $data['msg'] = "Brak polaczenia z baza"; exit(json_encode($data)); } if(isset($_GET['login']) && isset($_GET['pass'])){ $mysqli->query("SET CHARACTER SET 'utf8';"); $query = $mysqli->query("SELECT banned.id_user FROM banned JOIN user ON user.id_user = banned.id_user WHERE user.login ='{$_GET['login']}' LIMIT 1;"); if($query->num_rows){ $data['err']=1; $data['msg']="User banned"; exit(json_encode($data)); }else{ $query = $mysqli->query("SELECT login FROM user WHERE login='{$_GET['login']}' LIMIT 1;"); if($query->num_rows){ $query = $mysqli->query("SELECT pass FROM user WHERE pass ='{$_GET['pass']}' LIMIT 1;"); if($query->num_rows){ $data['msg']="Logged IN!"; $query = $mysqli->query("SELECT id_user FROM user WHERE login='{$_GET['login']}' LIMIT 1;"); $data['data'][]=$query->fetch_assoc(); exit(json_encode($data)); }else{ $data['err']=1; $data['msg']="Wrong login credentials."; exit(json_encode($data)); } }else{ $data['err']=1; $data['msg']="This login doesn't exist."; exit(json_encode($data)); } } }else{ $data['err']=1; $data['msg']="Wrong login credentials"; exit(json_encode($data)); } 

He creado allí pequeño diccionario $data para mi aplicación. Utilicé su llave del err como bandera para saber si cualquier error apareció, msg para informar al usuario sobre los resultados de la operación y los data para enviar los objetos de JSON .

La cosa que usted quisiera hacer con if(response == true) si había existido es similar a la construcción que utilicé en mi onPostExecute(Void w) método en AsyncTask :

 if(json.getInt("err")==1){ //something went wrong }else{ //everything is okay, get JSON, inform user, start new Activity } 

También aquí es la forma en que usé $data['data'] para obtener la respuesta de JSON :

 if($query->num_rows){ while($res=$query->fetch_assoc()){ $data['data'][]=$res; } exit(json_encode($data)); } 
  • Ejecutar Gps como servicio de fondo y enviar coordenadas al servidor web (PHP)
  • Mensaje de error de PHP GCM MismatchSenderId
  • ¿Hay alguna manera de escribir aplicaciones de Android en PHP?
  • Android GPS retrasa al enviar a la base de datos
  • Cómo crear API de sitio web
  • Conversión de TimeStamp a tiempo legible en PHP y Android
  • ¿Cómo puedo comprobar la compra en la aplicación de google en php?
  • Android, http: ¿Cómo subir un archivo a un sitio alojado por un servidor compartido?
  • Volley de Android está enviando información dos veces con carga de imagen
  • Cómo comunicarse desde php a Android
  • Mensaje GCM de Android enviado correctamente pero no recibido
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.