我在我的android应用程序中使用ksoap2 api作为参考,将我的android应用程序中的数据存储到远程SQL Server数据库。其想法是保存用户数据,这些数据是为构建用户配置文件而收集的信息。我在doInBackground()
中使用了AsyncTask
方法,如下所示:
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME1);
request.addProperty("userName",username.getText().toString());
request.addProperty("eamil",email.getText().toString());
request.addProperty("gender",gender.getSelectedItem().toString());
request.addProperty("country",country.getSelectedItem().toString());
request.addProperty("about",about.getText().toString() );
request.addProperty("pic",byteArray);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
envelope.dotNet = true;
try {
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL,20000);
androidHttpTransport.call(SOAP_ACTION1, envelope);
if (envelope.bodyIn instanceof SoapFault) {
String str= ((SoapFault) envelope.bodyIn).faultstring;
Log.i("fault", str);
} else {
SoapObject result = (SoapObject)envelope.bodyIn;
if(result != null)
{
message=result.getProperty(0).toString();
}
}
} catch (Exception e) {
e.printStackTrace();
}
return message;
问题在于,当我添加request.addProperty("pic",byteArray);
时,我收到一条错误,指出Ksoap2无法序列化,但是当我从类型{更改byteArray
的类型时{1}} byte[ ]
请求正确执行,数据保存在我的数据库中。这是来自我的网络服务的snipshote
string
将完全赞赏有关此问题的任何帮助
问候
答案 0 :(得分:0)
我想我弄清楚如何解决上面提到的问题,并将如下:
我没有向web服务发送一个byte [],而是改变主意发送如下构建的字符串:
Bitmap selectedImage = BitmapFactory.decodeFile(filePath);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
selectedImage.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] byteArray = stream.toByteArray();
String strBase64=Base64.encodeToString(byteArray, 0);
然后我使用strBase64
request.addProperty("pic",strBase64);
作为字符串发送到我的网络服务
然后检索该字符串并再次将其设为图片我只需从远程数据库中检索该字符串,然后执行以下操作:
byte[] decodedString = Base64.decode(strBase64, Base64.DEFAULT);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
image.setImageBitmap(decodedByte);
其中strBase64
是我从远程数据库检索的字符串。