使用Web服务和Ksoap2获取图像
当用户在智能手机的图库中选择一张照片时,我使用.net网络服务上传图片。
为了实现这一点,我使用了ksoap2。
在我的服务中,我发送一个字符串作为参数,我的代码如下:
File myFile = new File(imagepath);
Log.d(TAG, "myFile: " + myFile);
Request.addProperty("bytes", myFile);
SoapObject Request = new SoapObject(
WSDL_TARGET_NAMESPACE, OPERATION_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(Request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(
SOAP_ADDRESS);
androidHttpTransport.debug = true;
try {
androidHttpTransport.call(SOAP_ACTION, envelope);
SoapPrimitive resultString = (SoapPrimitive) envelope
.getResponse();
Log.d(TAG, "form webservice: "
+ resultString);
} catch (Exception e) {
e.printStackTrace();
}
不幸的是,我的矢量显示为空,我在LogCat中得到解析错误:
09-25 14:29:58.490: TAG(10919):
myFile: /storage/emulated/0/DCIM/Camera/20140923_084731.jpg
09-25 14:29:58.530: W/System.err(10919):
java.lang.RuntimeException: Cannot serialize: /storage/emulated/0/DCIM/Camera/20140923_084731.jpg
09-25 14:29:58.530: W/System.err(10919):
at org.ksoap2.serialization.SoapSerializationEnvelope.writeElement(SoapSerializationEnvelope.java:708)
09-25 14:29:58.530: W/System.err(10919):
at org.ksoap2.serialization.SoapSerializationEnvelope.writeProperty(SoapSerializationEnvelope.java:692)
09-25 14:29:58.530: W/System.err(10919):
at org.ksoap2.serialization.SoapSerializationEnvelope.writeObjectBody(SoapSerializationEnvelope.java:661)
09-25 14:29:58.530: W/System.err(10919):
at org.ksoap2.serialization.SoapSerializationEnvelope.writeObjectBody(SoapSerializationEnvelope.java:645)
09-25 14:29:58.530: W/System.err(10919):
at org.ksoap2.serialization.SoapSerializationEnvelope.writeElement(SoapSerializationEnvelope.java:702)
09-25 14:29:58.530: W/System.err(10919):
at org.ksoap2.serialization.SoapSerializationEnvelope.writeBody(SoapSerializationEnvelope.java:618)
09-25 14:29:58.530: W/System.err(10919):
at org.ksoap2.SoapEnvelope.write(SoapEnvelope.java:198)
09-25 14:29:58.530: W/System.err(10919):
at org.ksoap2.transport.Transport.createRequestData(Transport.java:111)
09-25 14:29:58.530: W/System.err(10919):
at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:119)
09-25 14:29:58.530: W/System.err(10919):
at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:95)
09-25 14:29:58.530: W/System.err(10919):
at com.up.upload.MainActivity$2.run(MainActivity.java:237)
09-25 14:29:58.530: W/System.err(10919):
at java.lang.Thread.run(Thread.java:841)
我想知道是否有人可以帮我解决问题,你有什么建议?
提前致谢。
答案 0 :(得分:1)
试试这个:
public void UploadImage(String image, String imageName) {
String lStr = imagepath;
File myFile = new File(imagepath);
Log.d(TAG, "myFile: " + myFile);
SoapObject Request = new SoapObject(WSDL_TARGET_NAMESPACE,
OPERATION_NAME);
byte[] bytearray = null;
try {
FileInputStream is = new FileInputStream(mFile);
if (mFile != null)
try {
bytearray = streamToBytes(is);
} finally {
is.close();
}
} catch (Exception e) {
}
Request.addProperty("bytes", bytearray);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
new MarshalBase64().register(envelope);
envelope.dotNet = true;
envelope.encodingStyle = "UTF-8";
envelope.setOutputSoapObject(Request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(SOAP_ADDRESS);
androidHttpTransport.debug = true;
try {
androidHttpTransport.call(SOAP_ACTION, envelope);
SoapPrimitive resultString = (SoapPrimitive) envelope.getResponse();
Log.d(TAG, "From webservice: " + resultString);
} catch (Exception e) {
e.printStackTrace();
}
}
public static byte[] streamToBytes(InputStream is) {
ByteArrayOutputStream os = new ByteArrayOutputStream(1024);
byte[] buffer = new byte[1024];
int len;
try {
while ((len = is.read(buffer)) >= 0) {
os.write(buffer, 0, len);
}
} catch (java.io.IOException e) {
}
return os.toByteArray();
}
new Thread(new Runnable() {
public void run() {
try {
String lStr = imagepath;
UploadImage(
imagepath,
lStr.substring(lStr.lastIndexOf("/")).replace(
"/", ""));
} catch (Exception e) {
e.printStackTrace();
Log.e(TAG, "Error..", e);
}
}
}).start();