¿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:
- JSONException: No hay valor para id
- Convierta un sitio web con un diseño de respuesta a la aplicación de Android
- ¿Cómo puedo iniciar sesión con facebook y obtener información de usuario para enviar mi db remoto desde la aplicación android
- Enviar la imagen de Base64 desde Android con JSON a php webservice, decodificar, guardar en SQL
- Android, enviar mensajes a 1000 dispositivos rápidamente
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.
- Ejecutar script php a través de la aplicación para Android
- Android - skia decoder-> decodificar devuelto falso
- Android: Subir imagen al servidor PHP
- Cómo hacer que Android y Arduino se comuniquen sin un módulo inalámbrico
- Android JSON a PHP Server y volver
- Envío de Amazon SNS desde mi servidor PHP
- SHA1 Checksum es diferente para el mismo archivo en php y android
- Cómo convertir caracteres de indicador a caracteres Unicode Escaped
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)); }
- Android.view.InflateException: Línea # 1 del archivo XML binario: Error al inflar la clase <unknown>
- Google Analytics para Android v2 Seguimiento de campaña no funciona