0
Я пытаюсь получить изображение с сервера через веб-службу SOAP в приложение Android. Я получаю некоторую ошибку. Я пытаюсь получить изображение в массиве байтов из веб-службы. Мои коды являются-Ошибка при получении изображения с мыльного веб-сервиса в приложение для Android
код веб-сервис
это-@WebMethod(operationName = "GetDiseasePic")
public byte[] picFromServer(@WebParam(name = "file_name") String filename) {
String filePath = "C:/Users/Ashraful/Desktop/layout/icons/" + filename;
System.out.println("Sending file: " + filePath);
try {
File file = new File(filePath);
FileInputStream fis = new FileInputStream(file);
BufferedInputStream inputStream = new BufferedInputStream(fis);
byte[] fileBytes = new byte[(int) file.length()];
inputStream.read(fileBytes);
inputStream.close();
return fileBytes;
} catch (IOException ex) {
System.err.println(ex);
throw new WebServiceException(ex);
}
}
деятельности моего приложения Android
IS-private void imageSelect() {
final String NAMESPACE_D_PIC = "http://DiseaseInformationWS/"; // target namespace of the Web service available
final String METHOD_NAME_D_PIC = "GetDiseasePic";// Name of the method in the Webservice file
final String SOAP_ACTION_D_PIC = "http://DiseaseInformationWS/GetDiseasePic"; // SoapAction that consists of the NAMESPACE+ METHOD_NAME1
final String URL_D_PIC = "http://"+IpchangeInteface.IPADDRESS+":8080/AshrafThesisWebService/DiseaseWebSer vice?wsdl";
new AsyncTask<String,Void, Bitmap>(){
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Bitmap doInBackground(String... params) {
SoapObject request_d_pic = new SoapObject(NAMESPACE_D_PIC,METHOD_NAME_D_PIC);
request_d_pic.addProperty("file_name",imagefilename);
SoapSerializationEnvelope envelop_d_pic = new SoapSerializationEnvelope(SoapEnvelope.VER10);
envelop_d_pic.setOutputSoapObject(request_d_pic);
HttpTransportSE androidHttpTransport_d_pic = new HttpTransportSE(URL_D_PIC);
try {
androidHttpTransport_d_pic.call(SOAP_ACTION_D_PIC,envelop_d_pic);
SoapObject result_d_pic = (SoapObject) envelop_d_pic.bodyIn;
SoapObject result_d_picSP = (SoapObject) envelop_d_pic.bodyIn;
String getresult = result_d_pic.toString();
Log.d("IMAGEFILE",getresult);
if (getresult!=""){
filebyte = Base64.decode(getresult,Base64.DEFAULT);
bitmapImage = BitmapFactory.decodeByteArray(filebyte,0,filebyte.length);
}
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
return bitmapImage;
}
@Override
protected void onPostExecute(Bitmap bitmap) {
if(bitmapImage!=null) {
diseasePic.setImageBitmap(bitmapImage);
}
}
}.execute();
}
ошибка я получаю
IS-05-25 20:33:47.282 3184-3249/com.thesiswork.ashraf.ashrafresearchwork E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #2
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:299)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
at java.util.concurrent.FutureTask.run(FutureTask.java:239)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:838)
Caused by: java.lang.IllegalArgumentException: bad base-64
at android.util.Base64.decode(Base64.java:161)
at android.util.Base64.decode(Base64.java:136)
at android.util.Base64.decode(Base64.java:118)
at com.thesiswork.ashraf.ashrafresearchwork.Disease_InformationScreen$5.doInBackground(Disease_InformationScreen.java:410)
at com.thesiswork.ashraf.ashrafresearchwork.Disease_InformationScreen$5.doInBackground(Disease_InformationScreen.java:384)
at android.os.AsyncTask$2.call(AsyncTask.java:287)
at java.util.concurrent.FutureTask.run(FutureTask.java:234)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:838)
Пожалуйста, предложите мне, что теперь делать ??
Его дает мне ту же ошибку, даже после применения вашего предложения @Tabassum – Ashraf
Пожалуйста, кто-то поможет мне в этом вопросе. – Ashraf
, если вы храните строку base64 в базе данных, поэтому проверьте, что тип поля - это текст или другой, если это текст, тогда изображение сохраняет в порядке, а не то, почему возникает ошибка –