Envío de un objeto serializado de Android a un servlet utilizando cliente HTTP
He intentado crear una aplicación de android que envía un objeto serialzed del teléfono a un servlet el contenido del objeto es la entrada del usuario que almacenaré en una base de datos usando hibernate. Creo que el problema está en torno a la serialización y deserialización del objeto del código está por debajo. Si alguien pudiera ayudarme, sería muy agradecido.
Ps la clase El usuario implementa la interfaz serializable
- Conversión de mapa de bits Java a matriz de bytes
- Android: cómo almacenar persistentemente un Spanned?
- ¿Por qué un Comparator debería implementar Serializable?
- Excepción Cast de clase al pasar una matriz de Serializables de una actividad a otra
- "Unparseable date: 1302828677828" intentando deserializar con Gson una fecha de formato milisegundo recibida del servidor
cliente
public class Adduser extends Activity implements OnClickListener { EditText uname; EditText password; EditText rating; EditText date; Button add; User user; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); uname = (EditText) findViewById(R.id.Usernamei); password = (EditText) findViewById(R.id.passwordi); rating = (EditText) findViewById(R.id.ratingi); date = (EditText) findViewById(R.id.datei); add = (Button) findViewById(R.id.Adduser); user = new User(); add.setOnClickListener(this); } @Override public void onClick(View v) { user.setusername(uname.getText().toString()); user.setpassword(password.getText().toString()); user.setdate(date.getText().toString()); user.setrating(rating.getText().toString()); HttpClient httpClient = new DefaultHttpClient(); ObjectOutput out; try{ String url = "MY URL goes here"; HttpPost post = new HttpPost(url); //Serialisation of object ByteArrayOutputStream bos = new ByteArrayOutputStream() ; out = new ObjectOutputStream(bos) ; out.writeObject(user); //puts bytes into object which is the body of the http request post.setHeader(new BasicHeader("Content-Length", "" + bos.toByteArray().length)); ByteArrayEntity barr = new ByteArrayEntity(bos.toByteArray()); //sets the body of the request post.setEntity(barr); out.close(); //executes request and returns a response HttpResponse response = httpClient.execute(post); } catch (IOException e) { Log.e( "ouch", "!!! IOException " + e.getMessage() ); } uname.setText(String.valueOf("")); password.setText(String.valueOf("")); rating.setText(String.valueOf("")); date.setText(String.valueOf("")); } } Server side public class Adduser extends HttpServlet { //logger for properties file //private static Logger logger = Logger.getLogger(Adduser.class); public void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException { //test //logger.warn("this is a sample log message."); String usern = null; String password = null; String rating = null; String date = null; InputStream in; try { //gets http content body byte array should be on the stream in = request.getInputStream(); //int bytesToRead; //bytesToRead = Integer.parseInt(request.getHeader("Content-Length")); //reads inputream contents into bytearray int bytesRead=0; int bytesToRead=1024; byte[] input = new byte[bytesToRead]; while (bytesRead < bytesToRead) { int result = in.read(input, bytesRead, bytesToRead - bytesRead); if (result == -1) break; bytesRead += result; } //passes byte array is passed into objectinput stream ObjectInputStream inn = new ObjectInputStream(new ByteArrayInputStream(input)); User users = null; try { //object is read into user object and cast users = (User)inn.readObject(); } catch (ClassNotFoundException e1) { // TODO Auto-generated catch block System.out.println(e1.getMessage()); } in.close(); inn.close(); //contents of object is put into variables to be passed into database usern = users.getusername(); password = users.getpassword(); rating = users.getrating(); date = users.getdate(); } catch (IOException e2) { // TODO Auto-generated catch block System.out.println(e2.getMessage()); } Session session = null; try{ SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); session = sessionFactory.openSession(); //Create new instance of Contact and set Transaction tx = session.beginTransaction(); Userr user = new Userr(); user.setusername(usern); user.setpassword(password); user.setrating(rating); user.setdate(date); session.save(user); tx.commit(); }catch(Exception e){ System.out.println(e.getMessage()); }finally{ // Actual contact insertion will happen at this step session.flush(); session.close(); } } }
- Android java.lang.IllegalArgumentException: no hay campo de caracteres 'exponencial' en android 2.3
- Escribir objeto en el almacenamiento interno en android (Dentro del nuevo directorio)
- Uso de genéricos en código Java de Android
- Android cómo guardar un mapa de bits - código de buggy
- Cómo serializar para la clase android.location?
- Rendimiento de la serialización y Google Android
- Java.io.NotSerializableException incluso si implemento "Serializable"
Como se sugiere, utilice XML o JSON. Usted puede obtener XStream parcheado para Android desde este blog con el fin de serializar sus objetos a XML.
No utilice la serialización entre arquitecturas. Utilice JSON, XML o cualquier otra cosa que sea neutral en cuanto a la arquitectura.
En segundo lugar la sugerencia de XStream. Es una API muy agradable y fácil. No me gustan los formatos de serialización XML o JSON porque son basados en texto. Para un formato de serialización más compacto, pruebe ProtoBuf de Google.