这是我的代码:
public class PostSoap extends AsyncTask<HashMap<String, String>, Void, HashMap<String, String> >{
private String Tag= "PostSoap";
final static String NAMESPACE = "http://wwyw.unimportant.com/";
final static String METHOD_NAME = "unimportant";
final static String SOAP_ACTION = "http://wwyw.adsdsad.com/unimportan";
final static String URL = "http://unimportant:80/Service.asmx";
@Override
protected HashMap<String, String> doInBackground(
HashMap<String, String>... params) {
SoapObject request = new SoapObject(NAMESPACE,METHOD_NAME);
request.addProperty("obj",params[0]);
SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
soapEnvelope.dotNet = true;
soapEnvelope.setOutputSoapObject(request);
Log.i(Tag,"soapenv..");
HttpTransportSE aht = new HttpTransportSE(URL);
Log.i(Tag,"httptransport");
try { aht.call(SOAP_ACTION, soapEnvelope); }catch(Exception e){ e.printStackTrace(); return null; }
try { return ""+?????????;}catch(Exception e){ e.printStackTrace(); return null; }
}
protected void onPostExecute(HashMap<bool,String> dyr) {
if (dyr == null) { Toast.makeText( , "error.", Toast.LENGTH_SHORT).show(); return; } //
try { Toast.makeText( , " "+dyr, Toast.LENGTH_LONG).show(); }catch(Exception e){ } //
}
}
我知道此代码中有太多失败。我想以HashMap
的身份发送请求,并希望以HashMap
的身份收到。我该怎么做。我需要更多关于此的建议。
提前谢谢你:)
答案 0 :(得分:2)
HashMap 本身是可序列化的,以防所有Key和Value对象都是可序列化的,在您的情况下,key和value对象是String对象。因此,您可以将HashMap序列化为字节数组,如下所示:
HashMap<String, String> hashMap; //reference to the HashMap to be serialized
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(hashMap);
byte[] hashMapAsByteArray = bos.toByteArray(); //HashMap serialized to a byte[] array
oos.close();
您可以将此字节数组转换为使用Base64编码的文本,然后将其嵌入到SOAP消息中。
答案 1 :(得分:0)
您可以从hashmap创建JSON数组,并将该JSON数据发送到另一侧。
答案 2 :(得分:0)
您可以循环访问作为输入的HashMap,将这些键/值添加到SoapObject。从服务器接收响应后,需要根据soap方法的输出格式解析结果,并将它们填充到新创建的HashMap或ArrayList对象(取决于您的需要)中。如果您创建的应用程序的服务器端属于您,则可以返回格式为XML或JSON的字符串。这样可以更容易地解析为对象。