Как преобразовать System.Byte [] в растровое изображение? - PullRequest
1 голос
/ 14 марта 2020

Я делаю работу для школы, но у меня проблемы с изображениями. Я получил System.Byte [] от своего веб-сервиса, и я попробовал несколько решений, и я не могу преобразовать в растровое изображение и добавить свой ImageView. В моей базе данных появляется столбец «Изображение». Кто-нибудь может мне помочь? спасибо

Вот мой android код.

private String NAMESPACE = "http://tempuri.org/";
private String URL = "http://X.X.X.X/ProjetoFinal/WSGestao.asmx?WSDL";
private String METHOD_NAME = "List_Images";
private String SOAP_ACTION = "http://tempuri.org/List_Images";
private String[] List;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.list_layout);

    new MyAsyncTask().execute();

}

private class MyAsyncTask extends AsyncTask<Void,Void,String[]> {

    protected String[] doInBackground(Void... strings) {

        //connection to the web service
        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.dotNet = true;
        envelope.setOutputSoapObject(request);
        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
        androidHttpTransport.debug = true;

        try {
            androidHttpTransport.call(SOAP_ACTION, envelope);
            SoapObject response = (SoapObject) envelope.getResponse();

            //Fetch the server's response and add the list
            List = new String[response.getPropertyCount()];

            for (int i = 0; i < response.getPropertyCount(); i++) {

                List[i] = response.getProperty(i).toString();

            }
        } catch (Exception e) {
            e.printStackTrace();
        }


        return List;
    }


    @Override
    protected void onPostExecute(String[] result) {
        super.onPostExecute(result);


        //convert to Bitmap

    }
}

Веб-служба отправляет:

<ArrayOfString xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/">
<string>System.Byte[]</string>
<string>System.Byte[]</string>
<string>System.Byte[]</string>
<string>System.Byte[]</string>
<string>System.Byte[]</string>
<string>System.Byte[]</string>
<string>System.Byte[]</string>
<string>System.Byte[]</string>
</ArrayOfString>

Ответы [ 2 ]

0 голосов
/ 17 марта 2020

Ваш веб-сервис отправляет вам строки. И вы пытаетесь конвертировать System.Byte[] строку в изображение. Но это строка, а не изображение. Вот почему это не работает.

result[0].getBytes() показывает это:

enter image description here

Здесь в массиве data имеется 13 элементов (длина "System.Byte[]" Строка тоже 13). Каждый байт здесь - это просто utf8 код символа в строке "System.Byte[]". 83 - большой S символ, 121 - y, 115 - s et c.

Таким образом, вам нужно предоставить правильный байтовый массив реального изображения и использовать метод setImageViewWithByteArray из ответа Destroyer.

0 голосов
/ 14 марта 2020
  public static void setImageViewWithByteArray(ImageView view, Byte[] data) {
        Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
        view.setImageBitmap(bitmap);
    }

Используйте этот код для отображения байта [] в imageView

...