Изображение Android для .net - PullRequest
       16

Изображение Android для .net

1 голос
/ 31 августа 2011

Я извлекаю изображение из моей таблицы SQLite и преобразовываю его в байтовый массив, используя этот код:

byte[] imageByteArray = cImage.getBlob(cImage.getColumnIndex("ImageData")); 

, который работает нормально (я доказал это, расшифровав его до исходного изображения, например:

ByteArrayInputStream imageStream = new ByteArrayInputStream(imageByteArray);
Bitmap theImage = BitmapFactory.decodeStream(imageStream);

Проблема в том, что мне нужно сериализовать данные изображения и отправить их через веб-службы .net, а затем декодировать их на другом конце.

Я использую этот код для кодирования байта [] в строку Base64:

String sImageData = Base64.encode(imageByteArray);

Затем добавьте его в качестве свойства в мой сервисный вызов.

Для завершения вызова требуется указание, что он отправляет данные - хотя я получаю исключение «Значение не может быть нулевым», когда я делаю это в веб-службе:

byte[] baImageData = Convert.FromBase64String(sImageData);

Я не уверен, как можно отлаживать это дальше - я что-то упускаю очевидное?

Ответы [ 2 ]

0 голосов
/ 09 марта 2012

работает нормально, но при отправке длинного снимка происходит сбой.

в Android:

private static final String NAMESPACE = "http://tempuri.org/";
private static String URL="http://XXX.XX.113.79/Sincro_Mobile/Sincro.asmx";
ws_btn_Enviar_foto.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {

                final String METHOD_NAME = "FOTO_and";
                final String SOAP_ACTION ="http://tempuri.org/FOTO_and";

                ws_resultado.setText("");
                request = new SoapObject(NAMESPACE, METHOD_NAME);
                Bitmap imagen_decodificar = BitmapFactory.decodeFile (Environment.getExternalStorageDirectory().getAbsolutePath()+
                        "/"+Globales.fotos_sgi+"/tomafoto1_resize_70.jpg");   
                ByteArrayOutputStream out = new ByteArrayOutputStream();     
                imagen_decodificar.compress(CompressFormat.JPEG, 70, out);     
                byte[] imagebyte = out.toByteArray(); 
                String strBase64 = Base64.encodeBytes(imagebyte); 
                request.addProperty("user", "ap"); 
                request.addProperty("pass", "qwerty"); 
                request.addProperty("x", contrasena); 
                request.addProperty("buffer",strBase64);
                request.addProperty("filename","primer_foto.jpg");
                //request.addProperty("Fecha_MOVIMIENTOS_y_FOTOS",dia_de_hoy.toString());
                envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
                envelope.dotNet = true; //se asigna true para el caso de que el WS sea de dotNet
                envelope.setOutputSoapObject(request);
                HttpTransportSE transporte = new HttpTransportSE(URL);

                try {
                    transporte.call(SOAP_ACTION, envelope);
                    resultsRequestSOAP = (SoapPrimitive)envelope.getResponse();
                    ws_resultado.setText(resultsRequestSOAP.toString()) ;
                    } 
                catch (IOException e) {
                    ws_resultado.setText(e.toString());;
                    }
                 catch (XmlPullParserException e) {
                     ws_resultado.setText(e.toString());;
                    }

              }
        });

В .net Webservice:

 <WebMethod()> Public Function FOTO_and(ByVal user As String, ByVal pass As String, _
    ByVal x As String, ByVal buffer As Byte(), ByVal filename As String) As String

        Dim Log As String = Validacion_User_EMEI(user, pass, x)

        If Log <> Estados_Sincro.OK Then
            Return Log
        End If

        '--VERIFICA QUE EXISTA LA CARPETA PARA ALMACENAR LA FOTO

        Dim Path_Fotos As String

        Path_Fotos = AppSettings.GetValues("Fotos")(0) + Now.ToString("yyMMdd")
        If Directory.Exists(Path_Fotos) = False Then
            Directory.CreateDirectory(Path_Fotos)
        End If

        '---VERIFICA QUE LA FOTO NO EXISTA

        If File.Exists(Path_Fotos + "\" + filename) Then
            Kill(Path_Fotos + "\" + filename)
        End If

        '--GUARDA LA FOTO

        Dim binWriter As New BinaryWriter(File.Open(Path_Fotos + "\" + filename, _
        FileMode.CreateNew, FileAccess.ReadWrite))
        binWriter.Write(buffer)
        binWriter.Close()

        Return Estados_Sincro.OK

    End Function
0 голосов
/ 31 августа 2011

Часть андроида выглядит хорошо для меня.

...