android - 在 android 中使用 Web 服务和 Ksoap2 获取图像

标签 android asp.net web-services ksoap2

通过使用 Web 服务和 Ksoap2 获取图像

当有人在智能手机的图库中选择一张照片时,我正在使用 .net 网络服务上传图像。

为了实现这一点,我使用了 ksoap2。

在我的服务中,我发送一个字符串作为参数,我的代码如下:

File myFile = new File(imagepath);
Log.d(TAG, "myFile: " + myFile);
Request.addProperty("bytes", myFile);

SoapObject Request = new SoapObject(
        WSDL_TARGET_NAMESPACE, OPERATION_NAME);


SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
        SoapEnvelope.VER11);


envelope.dotNet = true;
envelope.setOutputSoapObject(Request);


HttpTransportSE androidHttpTransport = new HttpTransportSE(
        SOAP_ADDRESS);
androidHttpTransport.debug = true;

try {

    androidHttpTransport.call(SOAP_ACTION, envelope);

    SoapPrimitive resultString = (SoapPrimitive) envelope
            .getResponse();

    Log.d(TAG, "form webservice: "
            + resultString);

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

不幸的是,我的向量显示为空,而且我在 LogCat 中不断收到解析错误:

09-25 14:29:58.490: TAG(10919): 
myFile: /storage/emulated/0/DCIM/Camera/20140923_084731.jpg

09-25 14:29:58.530: W/System.err(10919): 
java.lang.RuntimeException: Cannot serialize: /storage/emulated/0/DCIM/Camera/20140923_084731.jpg

09-25 14:29:58.530: W/System.err(10919):         
at org.ksoap2.serialization.SoapSerializationEnvelope.writeElement(SoapSerializationEnvelope.java:708)

09-25 14:29:58.530: W/System.err(10919):         
at org.ksoap2.serialization.SoapSerializationEnvelope.writeProperty(SoapSerializationEnvelope.java:692)

09-25 14:29:58.530: W/System.err(10919):         
at org.ksoap2.serialization.SoapSerializationEnvelope.writeObjectBody(SoapSerializationEnvelope.java:661)

09-25 14:29:58.530: W/System.err(10919):         
at org.ksoap2.serialization.SoapSerializationEnvelope.writeObjectBody(SoapSerializationEnvelope.java:645)

09-25 14:29:58.530: W/System.err(10919):         
at org.ksoap2.serialization.SoapSerializationEnvelope.writeElement(SoapSerializationEnvelope.java:702)

09-25 14:29:58.530: W/System.err(10919):         
at org.ksoap2.serialization.SoapSerializationEnvelope.writeBody(SoapSerializationEnvelope.java:618)

09-25 14:29:58.530: W/System.err(10919):         
at org.ksoap2.SoapEnvelope.write(SoapEnvelope.java:198)

09-25 14:29:58.530: W/System.err(10919):         
at org.ksoap2.transport.Transport.createRequestData(Transport.java:111)

09-25 14:29:58.530: W/System.err(10919):         
at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:119)

09-25 14:29:58.530: W/System.err(10919):         
at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:95)

09-25 14:29:58.530: W/System.err(10919):         
at com.up.upload.MainActivity$2.run(MainActivity.java:237)

09-25 14:29:58.530: W/System.err(10919):         
at java.lang.Thread.run(Thread.java:841)

我想知道是否有人可以帮助我解决一个问题,你有什么建议?

提前致谢。

最佳答案

试试这个:

public void UploadImage(String image, String imageName) {

    String lStr = imagepath;

    File myFile = new File(imagepath);
    Log.d(TAG, "myFile: " + myFile);

    SoapObject Request = new SoapObject(WSDL_TARGET_NAMESPACE,
            OPERATION_NAME);

    byte[] bytearray = null;
    try {
        FileInputStream is = new FileInputStream(mFile);
        if (mFile != null)
            try {
                bytearray = streamToBytes(is);
            } finally {
                is.close();
            }
    } catch (Exception e) {
    }

    Request.addProperty("bytes", bytearray);

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
            SoapEnvelope.VER11);

    new MarshalBase64().register(envelope);
    envelope.dotNet = true;
    envelope.encodingStyle = "UTF-8";
    envelope.setOutputSoapObject(Request);

    HttpTransportSE androidHttpTransport = new HttpTransportSE(SOAP_ADDRESS);
    androidHttpTransport.debug = true;

    try {

        androidHttpTransport.call(SOAP_ACTION, envelope);

        SoapPrimitive resultString = (SoapPrimitive) envelope.getResponse();
        Log.d(TAG, "From webservice: " + resultString);

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


public static byte[] streamToBytes(InputStream is) {
    ByteArrayOutputStream os = new ByteArrayOutputStream(1024);
    byte[] buffer = new byte[1024];
    int len;
    try {
        while ((len = is.read(buffer)) >= 0) {
            os.write(buffer, 0, len);
        }
    } catch (java.io.IOException e) {
    }
    return os.toByteArray();
}


        new Thread(new Runnable() {
            public void run() {
                try {

                    String lStr = imagepath;
                    UploadImage(
                            imagepath,
                            lStr.substring(lStr.lastIndexOf("/")).replace(
                                    "/", ""));
                } catch (Exception e) {
                    e.printStackTrace();
                    Log.e(TAG, "Error..", e);
                }
            }
        }).start();

关于android - 在 android 中使用 Web 服务和 Ksoap2 获取图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26039667/

相关文章:

c# - View 中具有自定义模型属性的 MVC3 默认成员属性(使用 ModelView?)

css - 如何更改 asp.net DropDownList 的字体大小

java - 用户在 WebLogic 中无法通过身份验证

android - 我该如何着手制作这个布局?遇到这么多麻烦

android - 我不知道如何停止我的服务

asp.net - 获取排序列表中的最大键

web-services - Azure Web 服务与网页位于同一域中

c# - 在 .NET 中使用 RPC/编码的 SOAP Web 服务时出错

Android memalloc

android - 蜂窝操作栏不显示(困惑)