Android: Descargar Object

Así que estoy tratando de descargar y cargar un objeto de un archivo almacenado en un servidor web. El código que utilizo está dentro de un bloque try-catch en un AsyncTask:

URL url = new URL("http://www.mydomain.com/thefileIwant"); URLConnection urlConn = url.openConnection(); ObjectInputStream ois = new ObjectInputStream(urlConn.getInputStream()); foo = (Foo) ois.readObject(); ois.close(); 

Construyo el archivo con este código:

 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("thefileIwant")); oos.writeObject(foo); oos.close(); 

Cuando intento y leo el objeto en la primera pieza del código consigo una IOExecption que el formato de datos de UTF no empareja UTF-8. He intentado reconstruir el archivo un par de veces y siempre me da el mismo error. ¿Puedo descargar un objeto como este?

Esto parece un problema de codificación. Creo que kichik es correcto y lo más probable es que su servidor esté enviando datos usando el tipo de contenido equivocado, pero creo que necesitará configurarlo en application/x-java-serialized-object . Intente agregar las siguientes líneas justo después de abrir la URLConnection:

 urlConn.setUseCaches(false); urlConn.setRequestProperty("Content-Type", "application/x-java-serialized-object"); 

Si eso no funciona (su servidor no puede enviarlo usando ese tipo) puede intentar usar Socket en lugar de UrlConnection, o bien serializar su objeto usando XML o JSON y obtenerlo a través de HttpUrlConnection

Prueba esto. Es similar a su código, pero con un par de diferencias. La lectura / escritura secuencial puede ser un poco anticuada, pero funciona bien para mí.

  URL url = new URL("your URL"); HttpURLConnection urlConn = (HttpURLConnection) url.openConnection(); urlConn.setRequestMethod("GET"); urlConn.setRequestProperty("Content-Type", "text/plain; charset=utf-8"); urlConn.connect(); InputStream is = urlConn.getInputStream(); byte[] buffer = new byte[1024]; int numRead = 0; FileOutputStream fos = new FileOutputStream("Your File"); while ((numRead = is.read(buffer)) > 0) { fos.write(buffer, 0, numRead); } fos.close(); 

Esto funciona para nosotros, Utilizando algunas bibliotecas Apache

  FileOutputStream fos = new FileOutputStream("Your File"); HttpParams params = new BasicHttpParams(); HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); HttpProtocolParams.setContentCharset(params, HTTP.UTF_8); SchemeRegistry registry = new SchemeRegistry(); registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry); HttpClient client = new DefaultHttpClient(ccm, params); HttpGet httpGet = new HttpGet(downloadURL); try { HttpResponse response = client.execute(httpGet); StatusLine statusLine = response.getStatusLine(); int statusCode = statusLine.getStatusCode(); Log.d(LOG_TAG, "code is " + statusCode); if (statusCode == 200) { HttpEntity entity = response.getEntity(); InputStream content = entity.getContent(); byte[] buffer = new byte[1024]; int len1 = 0; while ( (len1 = content.read(buffer)) > 0 ) { fos.write(buffer,0, len1); } success = true; } else { Log.e(LOG_TAG_JSON, "Failed to download file " + downloadURL); } if (null != response.getEntity()) { response.getEntity().consumeContent(); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { Log.e(LOG_TAG, "downloadVersion " + e.toString()); e.printStackTrace(); } 
  • Espaciado de Android GridView y cuestión de centro
  • Enfoque correcto de Android: ¿dónde se debe analizar la respuesta de JSON - en el subproceso de interfaz de usuario, o en otro?
  • LibGDX - ¿Cómo Gdx.graphics.getWidth () devuelve el ancho de la superficie de visualización?
  • Rehacer la solicitud anterior cuando el primero falla con 401 No autorizado
  • Cómo analizar la propiedad DateTime de AppEngine en Java (Android)?
  • ¿Cómo agregar contacto en Android como skype, whatsapp en la aplicación de contacto nativo?
  • ¿Qué hace transitive = true en Gradle exactamente hacer (wrt crashlytics)?
  • Genera un identificador único como ID de notificación de android
  • La carga de archivos zip por FTP está dañada a veces
  • La imagen compartida de Android no borra la vista previa de un elemento previamente compartido
  • Cambiar el radio de la esquina de programación programable
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.