gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:58:44 25 4
gpt4 key购买 nike

我试图创建一个 android 应用程序,将序列化对象从手机发送到 servlet,对象的内容是用户的输入,我将使用 hibernate 将其存储在数据库中。我相信问题出在代码下面的对象的序列化和反序列化上。如果有人能提供帮助,我将不胜感激。

p.s 类 User 实现了可序列化接口(interface)

客户

    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。你可以获得XStream为 Android 打补丁 from this blog以便将您的对象序列化为 XML。

关于java - 使用 HTTP 客户端将序列化对象从 Android 发送到 servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2009707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com