我想使用套接字(在开发远程PC时)从Android客户端向Java服务器发送2个对象。
AndroidClient.java
public class MainActivity extends Activity{
Socket client;
ObjectOutputStream oos;
OutputStream os;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SendObj so=new SendObj();
so.execute();
}
class SendObj extends AsyncTask<Void, Void, Void>{
@Override
protected Void doInBackground(Void... arg0) {
try {
client=new Socket("192.168.237.1",6566);
os=client.getOutputStream();
oos=new ObjectOutputStream(os);
Serializer ma=new Serializer(2, "Helllo");
Log.i("Serial",""+ma.name);
oos.writeObject(ma);
oos.writeObject(new String("Another Object from Client"));
oos.close();
os.close();
client.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
@SuppressWarnings("serial")
class Serializer implements Serializable {
int num;
String name;
public Serializer(int num,String name){
this.name=name;
this.num=num;
}
}
JavaServer.java
public class ObjectReceiver {
static ServerSocket server;
static Socket client;
static ObjectInputStream ois;
static InputStream is;
public static void main(String[] arg) throws IOException, ClassNotFoundException{
server=new ServerSocket(6566);
System.out.println("Wait");
while(true){
client=server.accept();
System.out.println("Connected");
is=client.getInputStream();
ois=new ObjectInputStream(is);
try {
ObjectSerail or = (ObjectSerail) ois.readObject();
if(or!=null){
System.out.println("Done");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
@SuppressWarnings("serial")
class ObjectSerail implements Serializable{
int num;
String name;
public ObjectSerail(int num,String name){
this.name=name;
this.num=num;
}
}
}
当然我知道上面的方法是行不通的,因为它可以提供ClassNotFoundException()
。因此,现在我想知道如何使用Gson库对对象进行序列化和反序列化。提前致谢。
gson可以在任何平台上与Java一起使用-不仅限于Android。
使用gson序列化单个对象:
// Serialize a single object.
public String serializeToJson(MyClass myClass) {
Gson gson = new Gson();
String j = gson.toJson(myClass);
return j;
}
使用gson反序列化为单个对象。
// Deserialize to single object.
public MyClass deserializeFromJson(String jsonString) {
Gson gson = new Gson();
MyClass myClass = gson.fromJson(jsonString, MyClass.class);
return myClass;
}
从示例中可以看到,gson非常神奇:)实际上并不神奇-您需要确保至少以下几点:
确保您的类具有no args构造函数,以便gson库可以轻松获取实例。
确保属性名称与json中的属性名称匹配,以便gson库可以将json中的字段映射到类中的字段。
另请参阅https://sites.google.com/site/gson/gson-user-guide#TOC-Object-
Examples
问题内容: 我想使用套接字(在开发远程PC时)从Android客户端向Java服务器发送2个对象。 当然我知道上面的方法是行不通的,因为它可以提供。所以现在我想知道如何使用Gson库对对象进行序列化和反序列化。提前致谢。 问题答案: gson可以在任何平台上与Java一起使用-不仅限于Android。 使用gson序列化单个对象: 使用gson反序列化为单个对象。 从示例中可以看到,gson非常神
我使用下面的方法(来自spark-java framework的方法)从DB返回的数据如下: 从DB返回的数据: ClasStypeAdapterFactory: 类类型适配器: 这里我使用的是,它从spark-java ResponseTransformer接口实现了
问题内容: 我想将此对象序列化为JSON字符串 并获得如下结果: 我尝试使用 但是相反,我得到了: 人员序列化器: 欢迎任何建议 谢谢,马里奥 问题答案: 为了获得所需的结果,您需要像这样编写串行器: 的结果 将会 完整的代码:
问题内容: 我在尝试序列化包含 即使我写了: 并应用: 我仍然无法序列化此类: Stacktrace :(在pastebin上完整) 有什么办法吗? 问题答案: 您的问题是那是一个。假设您使用它将在Windows PC上创建类似的实例。现在,您必须告诉GSON如何反序列化此类型: 您可以使用的另一种方法是: typeHierarchyAdapter的目的是在您希望为类型的所有子类型使用相同的表示形
主要内容:示例我们将一个Java对象序列化为一个Json文件,然后读取该Json文件以获取对象。 在这个例子中,创建一个类。 然后将对象列化后存储在文件中,该文件将具有对象的json表示形式。 示例 在中创建一个名为的Java类文件,参考以下代码 - 执行上面示例代码,得到以下结果 -
我正在尝试反序列化类型为 每当我尝试执行 其中类型是使用TypeToken从TypeToken获取的 我认为使用类型会解决我的问题,因为最初我不想使用它,但它没有。感谢任何帮助。