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:

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?

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.

  • ¿Por qué el valor de tiempo de espera no es respetado por HttpURLConnection de Android?
  • HttpUrlConnection getOutputStream lanza IOException
  • Establecer setChunkedStreamingMode en HttpURLConnection no puede entregar datos al servidor
  • Diferencia entre okhttp y httpurlconnection?
  • Android, HttpURLConnection y manejo de credenciales incorrectas
  • Java HttpURLConnection VS Android HttpURLConnection
  • HTTPURLConnection - POST multipart / form-data con archivo grande con FixedLengthStreamingMode
  • EPIPE (Broken pipe) durante la carga?
  • Carga de matriz de bytes de imagen con httpurlconnection y android
  • Estrategia de la aplicación de Android para realizar un seguimiento de una sesión de inicio de sesión
  • Necesita un ejemplo de HttpResponseCache en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.