java – 使用HTTP客户端将序列化对象从Android发送到servlet

前端之家收集整理的这篇文章主要介绍了java – 使用HTTP客户端将序列化对象从Android发送到servlet前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我试图创建一个Android应用程序,它将一个序列化对象从手机发送到一个servlet,该对象的内容是来自用户的输入,我将使用hibernate将其存储在数据库中.我认为问题在于代码所在的对象的序列化和反序列化.如果有人可以帮助我会非常感激.

用户实现可序列化接口的类

客户

    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();

        }

 }




 }
最佳答案
如建议的那样,使用XML或JSON.
您可以为Android from this blog修补XStream,以便将对象序列化为XML.

猜你在找的Android相关文章