1

私は、Androidアプリケーションの参照としてksoap2 apiを使用して、AndroidアプリケーションからリモートSQLサーバーデータベースにデータを保存しました。アイデアは、ユーザープロファイルを構築するために収集された情報であるユーザーデータを保存することです。私は以下のようにこの内部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、タイプをタイプbyte[ ]からリクエストに変更するstringと、データがデータベースに保存されて正しく実行されたことです。これが私のWebサービスからのsnipshoteです

Public Function AddUser(userName As String, email As String, gender As String, country As String, about As String, pic As Byte()) as String
// Some code to add data to databae 
Return "you are done"
 End Function

この問題に関する助けは完全にありがたいです

よろしく

4

1 に答える 1

0

私は上記の私の問題を解決する方法を理解していると思います、そしてそれは次のようになります:

バイト[]をWebサービスに送信する代わりに、次のように作成された文字列を送信するように考えを変更しました。

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次に、を使用して文字列としてWebサービスに送信しますrequest.addProperty("pic",strBase64);

次に、その文字列を取得して再び画像として作成するには、リモートデータベースから文字列を取得して、次のようにします。

byte[] decodedString = Base64.decode(strBase64, Base64.DEFAULT);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
image.setImageBitmap(decodedByte);

ここstrBase64で、リモートデータベースから取得した文字列です。

于 2013-03-18T21:40:30.317 に答える