Отправить изображение с Android с помощью ksoap2 на веб-сервис - PullRequest
1 голос
/ 08 июня 2011

Я хочу отправить изображение, используя изображение библиотеки ksoap2, снятое камерой:

public class testwebservice extends Activity implements OnClickListener {
    /** Called when the activity is first created. */
    private static final String SOAP_ACTION="http://axis2.soap.webservice.vogella.de/getNumberResponse";
    private static final String METHOD_NAME="getNumberResponse";
    private static final String NAMESPACE="http://axis2.soap.webservice.vogella.de/";
    private static final String URL="http://192.168.0.178:8080/Randomnumber/services/RandomNumber.RandomNumberHttpEndpoint/";

    ImageView imv;
    TextView tv;
    Bitmap bmp;
    int i;
    final static int CAMERA_RESULT = 0;
    Button upload;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        tv = (TextView)findViewById(R.id.text1);

        upload = (Button)findViewById(R.id.upload);

        upload.setOnClickListener(this);
        Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

        startActivityForResult(i,  CAMERA_RESULT);
    }

    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
        super.onActivityResult(requestCode, resultCode, intent);
        if (resultCode == RESULT_OK)
        {
            Bundle extras = intent.getExtras();
            bmp = (Bitmap) extras.get("data");
            imv = (ImageView) findViewById(R.id.ReturnedImageView);
            imv.setImageBitmap(bmp);
        }
    }
}

Затем у меня есть AlertDialog, который спрашивает меня, хочу ли я отправить изображение или нет, тогда я звонюФактическая функция, которая преобразует изображение с помощью Marshallbase64:

public void testWebService() {
    MarshalBase64 b = new MarshalBase64();
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    bmp.compress(CompressFormat.PNG, 100, out);
    byte[] imagebyte = out.toByteArray();

    SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);
    Request.addProperty("image",imagebyte);

    SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    soapEnvelope.dotNet=true;
    soapEnvelope.setOutputSoapObject(Request);

    b.register(soapEnvelope);
    HttpTransportSE aht=new HttpTransportSE(URL);

    try
    {
        aht.call(SOAP_ACTION, soapEnvelope);
        SoapPrimitive response = (SoapPrimitive)soapEnvelope.getResponse();

        tv.setText("REZULTAT:"+response);       
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}

Я сделал веб-сервис с использованием Eclipse WTP и Axis2, это простой метод, который возвращает случайные числа:

package de.vogella.webservice.soap.axis2;

import java.util.Random;

public class RandomNumber {
    public float[] getNumber(byte[] image){
        float u[] = new float[8];
        for(int i = 0; i < 8; i++) {
            u[i] = new Float(i);
            Random random = new Random();
            u[i]= random.nextFloat();
        }
        return u;
    }
}

ВсеМне нужно сделать, это связать эти три, и моя работа сделана.Может кто-нибудь помочь, пожалуйста?

Ответы [ 2 ]

2 голосов
/ 21 июня 2011

Вместо маршалинга вы можете продолжить с вашим кодом:

String strBase64 = Base64.encode(imagebyte);
Request.addProperty("image", strBase64); 

В вашем веб-методе расшифруйте строку как показано ниже:

byte[] data=Base64.decode(image);
0 голосов
/ 08 июня 2011

Непонятно из вашего вопроса , где именно вы храните изображение. Код веб-службы, который вы показали, просто возвращает число и не поддерживает запросы HTTP POST. Из вашего кода мне кажется, что вам нужно настроить свой веб-сервис так, чтобы он принимал этот тип запроса и сохранял свой массив маршаллированных байтов в базе данных. Таким образом, следующим логическим шагом будет создание базы данных для хранения этих изображений, а затем обновление вашего веб-сервиса для подключения к этой БД и вставки данных изображений. Наконец, ваше Android-приложение будет вызывать код маршалинга изображения, а затем выполнит вызов веб-службы с результирующим байтовым массивом.

...