Android Http url conexión Lanzar archivo no encontrado Excepción en getInputstream
Estoy tratando de publicar una cadena de json a un resto sever, pero estoy recibiendo una excepción de archivo java no se encuentra en la entrada de flujo de entrada.
Aquí está mi código:
- HttpURLConnection.getInputStream () lanza SocketTimeoutException
- HttpURLConnection funcionó bien en Android 2.x pero NO en 4.1: No se encontraron desafíos de autenticación
- ¿Por qué HttpURLConnection de Android no devuelve FIN?
- ¿Longitud máxima del contenido?
- Java.io.IOException: final inesperado de la secuencia
package com.muzima.view.sample.activities; import javax.servlet.http.HttpServletResponse; import com.muzima.view.sample.R; import android.app.Activity; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.util.Base64; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; public class SyncFormDataActivity extends Activity implements OnClickListener{ private EditText value; private Button btn; private static final String METHOD_POST = "POST"; private static final String URL = "/ws/rest/v1/muzima/queueData"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sync_form_data); String formsubmissionJson = getIntent().getStringExtra("formdata"); String URF = (getString(R.string.default_server) + URL); System.out.println("url is" +URF); /* Testing to see if we can get the json string from form in webview*/ System.out.println("submit 56565 ======= " + formsubmissionJson); btn=(Button)findViewById(R.id.button1); btn.setOnClickListener(this); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.layout.menu, menu); return true; } @Override protected void onDestroy() { super.onDestroy(); } @Override protected void onResume() { super.onResume(); } @Override protected void onPause() { super.onPause(); } public void onClick(View v) { // TODO Auto-generated method stub String formsubmissionJson = getIntent().getStringExtra("formdata"); new MyAsyncTask().execute(formsubmissionJson.toString()); } private class MyAsyncTask extends AsyncTask<String, String, String>{ @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected String doInBackground(String... args) { try { postingQueueData(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } // TODO Auto-generated method stub return null; } protected void onPostExecute(Double result){ Toast.makeText(getApplicationContext(), "Form Data has been sent to server", Toast.LENGTH_LONG).show(); // Start ListPatient activity Intent ip = new Intent(getApplicationContext(), ListPatientActivity.class); startActivity(ip); } public void postingQueueData() throws Exception { String formsubmissionJson = getIntent().getStringExtra("formdata"); URL url = new URL("http://192.168.1.3:8081/openmrs-standalone/ws/rest/v1/muzima/queueData"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); String encodedAuthorization = "Basic " + Base64.encodeToString("admin:test".getBytes(), Base64.NO_WRAP); // String encodedAuthorization = "Basic " + Base64.encodeToString("admin:test".getBytes(), Base64.NO_WRAP); connection.setRequestProperty("Authorization", encodedAuthorization); connection.setRequestMethod(METHOD_POST); connection.setRequestProperty("Content-Type", "application/json"); connection.setDoOutput(true); OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream()); writer.write(formsubmissionJson); writer.flush(); InputStreamReader reader = new InputStreamReader(connection.getInputStream(),"UTF-8"); int responseCode = reader.read(); if (responseCode == HttpServletResponse.SC_OK || responseCode == HttpServletResponse.SC_CREATED) { //log.info("Queue data created!"); } reader.close(); writer.close(); } } }
El error del sistema que estoy recibiendo es el siguiente:
08-21 10:49:26.389: W/System.err(8640): java.io.FileNotFoundException: http://192.168.1.3:8081/openmrs-standalone/ws/rest/v1/muzima/queueData 08-21 10:49:26.399: W/System.err(8640): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:521) 08-21 10:49:26.399: W/System.err(8640): at com.muzima.view.sample.activities.SyncFormDataActivity$MyAsyncTask.postingQueueData(SyncFormDataActivity.java:135) 08-21 10:49:26.399: W/System.err(8640): at com.muzima.view.sample.activities.SyncFormDataActivity$MyAsyncTask.doInBackground(SyncFormDataActivity.java:98) 08-21 10:49:26.399: W/System.err(8640): at com.muzima.view.sample.activities.SyncFormDataActivity$MyAsyncTask.doInBackground(SyncFormDataActivity.java:1) 08-21 10:49:26.399: W/System.err(8640): at android.os.AsyncTask$2.call(AsyncTask.java:185) 08-21 10:49:26.399: W/System.err(8640): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 08-21 10:49:26.399: W/System.err(8640): at java.util.concurrent.FutureTask.run(FutureTask.java:138) 08-21 10:49:26.399: W/System.err(8640): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 08-21 10:49:26.409: W/System.err(8640): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 08-21 10:49:26.409: W/System.err(8640): at java.lang.Thread.run(Thread.java:1019)
¿Qué podría causar esto y cómo lo soluciono?
- HttpURLConnection con POST "time out" en ICS, funciona en HC
- Android / Java: HttpURLConnection no devuelve los encabezados del archivo redirigido (por ejemplo, en S3)
- Enviar una imagen codificada en base64 al servidor mediante HttpUrlConnection Android
- Cómo manejar las cookies en httpUrlConnection usando cookieManager
- java.io.IOException: El desafío de autenticación recibido es nulo
- Android: Cómo iniciar sesión en la página web mediante programación, mediante HttpsURLConnection
- HttpURLConnection Post: El flujo de salida no tiene efecto?
- Pasar parámetros con HttpURLConnection
En caso de 4 ** Error HTTP Codes use
connection.getErrorStream();
En lugar de
connection.getInputStream();
La conexión es el tipo de HttpURLConnection.
FileNotFound en la conexión de URL significa que el documento de destino no está disponible, es decir, la URL proporcionada es incorrecta, o el servidor devuelve código de 4 *. Compruebe si el recurso de destino está disponible
Intente establecer esto: connection.setDoOutput(false);
A su conexión – espere que ayude;)
Agregue la línea "connection.connect ()" antes de escribir datos en el flujo.
connection.connect(); OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream()); writer.write(formsubmissionJson); writer.flush();
No sé por qué, pero después de agregar la siguiente línea de código el problema se resolvió.
connection.setInstanceFollowRedirects(false);
Si utilizó el método GET
en el lado del servidor, entonces dará este error.
Para que funcione:
Cambiar connection.setRequestMethod("POST");
A connection.setRequestMethod("GET");
Y quite este código siguiente.
connection.setDoOutput(true); OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream()); writer.write(formsubmissionJson); writer.flush();
O simplemente cambie el método GET
a POST
en el servidor sin hacer cambios arriba.
- Android OS Teclado mueve Contenido del sitio web Arriba?
- Cómo encontrar elementos por subcadena de ID usando la sintaxis del selector Jsoup?