Android devuelve cadena vacía HTTP

Tengo un problema. Tengo una clase AsyncTaskActivity que tiene en su interior el método downloadUrl que se comunica con un servidor php a través de HttpURLConnection . El servidor php, que se comunica con MySql DB, debe devolver, dependiendo del tipo de elemento, una cadena de texto o una cadena en formato json. HttpURLConnection devuelve una cadena vacía, cuando el tipo de elemento devuelto por el servidor es un texto de cadena. Esta es la clase AsyncTaskActivity .

 public class AsyncTaskActivity extends AsyncTask<String, Void, String> { private Context context; String serverParameters; public AsyncResponse delegate = null; String url = null; private ProgressDialog pd; public AsyncTask(Context c, String s, AsyncResponse<String> delegate) { this.serverParameters = s; this.context = c; this.delegate = delegate; } @Override protected String doInBackground(String... strings) { try { url = downloadUrl(strings[0]); } catch (IOException e) { e.printStackTrace(); } return url; } protected void onPreExecute() { super.onPreExecute(); pd = new ProgressDialog(context); pd.setTitle("Please Wait..."); pd.setMessage("Loading..."); pd.show(); } protected void onPostExecute(String result) { super.onPostExecute(result); System.out.println("RESULT = " + result); delegate.processFinish(result); pd.dismiss(); } private String downloadUrl(String targetURL) throws IOException { URL url; HttpURLConnection connection = null; try { // Create connection url = new URL(targetURL); connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/json"); connection.setRequestProperty("Accept", "application/json"); connection.setUseCaches(false); connection.setDoInput(true); connection.setDoOutput(true); // Send request OutputStreamWriter wr = new OutputStreamWriter(connection.getOutputStream()); wr.write(serverParameters); wr.flush(); wr.close(); // Get Response InputStream is = connection.getInputStream(); String data = convertStreamToString(is); is.close(); return data; } catch (Exception e) { e.printStackTrace(); return null; } finally { if (connection != null) { connection.disconnect(); } } } private String convertStreamToString(InputStream inputStream) { Scanner s = new Scanner(inputStream).useDelimiter("\\A"); return s.hasNext() ? s.next() : ""; } 

Esta es la clase AvailabilityActivity . Cuando envíe una petición al servidor se debe especificar como parámetros tipo elemento, tipo de acceso (leer, escribir, cambiar, borrar) y json para escribir. En este caso, cuando envío una solicitud al servidor (tipo element = "expertise", access = "read", json to write = ""), obtengo una cadena vacía. Tipo de elemento "experiencia" debe devolver un texto de cadena. En Riepilogo.setOnClickListener serverParameters se inicializa, sendRequest() ejecuta AsyncTaskActivity() .

 public class AvailabilityActivity extends ActionBarActivity implements AsyncResponse<String> { private Spinner spinner; private Spinner spinner1; /* Parameters Expertise*/ private static final String TIPO_ELEMENTO = "expertise"; private static final String ACCESSO = "read"; private AsyncTaskActivity send_request; private String serverParameters; private JSONObject jsonObject; private ArrayList<String> list = new ArrayList<String>(); AvailabilityEntity availabilityEntity; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_availability); spinner1 = (Spinner) findViewById(R.id.spinner1); spinner = (Spinner) findViewById(R.id.spinner2); Riepilogo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { date_ = date.getText().toString(); startTime_ = startTime.getText().toString(); endTime_ = endTime.getText().toString(); timeEditText_ = timeEditText.getText().toString(); availabilityEntity = new AvailabilityEntity(date_, startTime_, endTime_, itemSpinner, timeEditText_); showSummary(); } }); serverParameters = generateParameters(TIPO_ELEMENTO, ACCESSO, ""); sendRequest(); } private String generateParameters(String tipoElementoLogin, String accesso, String s) { String parameters = "accesso:" + accesso + ", elemento:" + tipoElementoLogin + ", jsonDaScrivere:" + s; return parameters; } private void sendRequest() { send_request = new AsyncTaskActivityString(this, serverParameters, this); send_request.execute(getApplicationContext().getResources().getString(R.string.serverQuery)); } @Override public void processFinish(String output) { System.out.println("Value: " + output); // Aggiunge lista expertise dal server in spinner list.add(output); ArrayAdapter<String> array_adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list); array_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner1.setAdapter(array_adapter); } 

Parece que te olvidas de llamar a connection.connect (). Pruebe con este pedazo de código:

 private String downloadUrl(String targetURL) throws IOException { ... ... // Get Response connection.connect(); int http_code = connection.getResponseCode(); String data = null; if (http_code == HttpURLConnection.HTTP_OK) { data = this.convertStreamToString(connection.getInputStream()); } 
  • Cliente-Servidor-Comunicación con php y android
  • Cómo sincronizar datos entre la aplicación android y el servidor php?
  • Pasa la variable de cadena de java a php
  • Enviar mensajes FCM del lado del servidor al dispositivo Android
  • No recibe la notificación de push de GCM de Amazon SNS
  • SHA1 Checksum es diferente para el mismo archivo en php y android
  • ¿Cómo debo manejar los tiempos de espera del servidor y las respuestas de código de error a una entrada de http en la aplicación para Android?
  • NameValuePair Error "NameValuePair no se puede resolver con un tipo"
  • Cómo hacer un servicio web (preferiblemente usando PHP) que puede ser solicitado para obtener objetos JSON por la aplicación android
  • Secure Asset / Media Folder a través del Auth Controller? Laravel 5.2
  • Encriptación AES 128 en Java Descifrado en PHP
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.