【问题标题】:Android ClassDefFoundError while trying to send byte array using ksoap尝试使用 ksoap 发送字节数组时出现 Android ClassDefFoundError
【发布时间】:2017-09-05 03:24:48
【问题描述】:

我正在开发一个 android 应用程序,其中我将图像转换为字节数组并使用 ksoap2 发送它。当我尝试它时,我遇到了一个异常并且应用程序崩溃了。我在下面给出我的代码和堆栈跟踪..如果有人可以帮助我..请帮助。

日志

java.lang.NoClassDefFoundError: org.kobjects.base64.Base64
在 org.ksoap2.serialization.MarshalBase64.writeInstance(MarshalBase64.java:39) 在 org.ksoap2.serialization.SoapSerializationEnvelope.writeElement(SoapSerializationEnvelope.java:653) 在 org.ksoap2.serialization.SoapSerializationEnvelope.writeProperty(SoapSerializationEnvelope.java:645) 在 org.ksoap2.serialization.SoapSerializationEnvelope.writeObjectBody(SoapSerializationEnvelope.java:614) 在 org.ksoap2.serialization.SoapSerializationEnvelope.writeObjectBody(SoapSerializationEnvelope.java:598) 在 org.ksoap2.serialization.SoapSerializationEnvelope.writeElement(SoapSerializationEnvelope.java:655) 在 org.ksoap2.serialization.SoapSerializationEnvelope.writeBody(SoapSerializationEnvelope.java:579) 在 org.ksoap2.SoapEnvelope.write(SoapEnvelope.java:192)
在 org.ksoap2.transport.Transport.createRequestData(Transport.java:82) 在 org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:79) 在 com.example.manappuram.punching_maceinn.MainActivity.GetConfirm(MainActivity.java:420) 在 com.example.manappuram.punching_maceinn.MainActivity$10.onPictureTaken(MainActivity.java:797) 在 android.hardware.Camera$EventHandler.handleMessage(Camera.java:823) 在 android.os.Handler.dispatchMessage(Handler.java:99)
在 android.os.Looper.loop(Looper.java:137)
在 android.app.ActivityThread.main(ActivityThread.java:4921)
在 java.lang.reflect.Method.invokeNative(Native Method)
在 java.lang.reflect.Method.invoke(Method.java:511)
在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
在 dalvik.system.NativeStart.main(Native Method)

主活动

public void GetConfirm() {
        String SOAP_ACTION = "http://tempuri.org/cccc";
        String METHOD_NAME = "ccccc";
        String NAMESPACE = "http://tempuri.org/";
        String URL = "http://zxxxx.xx.xx.xx/my_services/ccc.asmx";

        try {

            //Code added by Jocheved on 31/03/2017
            String photoPath = Environment.getExternalStorageDirectory()+"/JCG Camera/img.jpg";

File imagefile = new File(photoPath);
            FileInputStream fis = null;
            try {
                fis = new FileInputStream(imagefile);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }

                Bitmap bm = BitmapFactory.decodeStream(fis);
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                bm.compress(Bitmap.CompressFormat.JPEG, 50, baos);
                byte[] b = baos.toByteArray();
                String encImage = Base64.encodeToString(b, Base64.DEFAULT);

SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);
            pi1 = new PropertyInfo();
            pi1.setName("xcode");
            int x = Integer.parseInt(empId.getText().toString().trim());
            pi1.setValue(x);
            pi1.setType(Integer.class);
            Request.addProperty(pi1);

            pi2 = new PropertyInfo();
            pi2.setName("in_time");
            pi2.setValue(shiftTime.getText().toString().trim());
            pi2.setType(String.class);
            Request.addProperty(pi2);

            pi3 = new PropertyInfo();
            pi3.setName("em_id");
            pi3.setValue(3531);
            pi3.setType(Integer.class);
            Request.addProperty(pi3);

            pi4 = new PropertyInfo();
            pi4.setName("photo_rel");
            System.out.println("image convertion string is " + img);
            pi4.setValue(b);            
            Request.addProperty(pi4);

            pi5 = new PropertyInfo();
            pi5.setName("ipd");
            pi5.setValue("10.29.245.85~DT-3501-56070");
            pi5.setType(String.class);
            Request.addProperty(pi5);


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

            HttpTransportSE transport = new HttpTransportSE(URL);
            transport.debug = true;
            transport.call(SOAP_ACTION, soapEnvelope);
            System.out.println("Cannot serialize 1");
            try{
                SoapObject result=(SoapObject)soapEnvelope.getResponse();
                Toast.makeText(MainActivity.this, "Successs", Toast.LENGTH_LONG).show();
                if(result!= null){
                    System.out.println("Resp in confirm click is " + result.toString());
                    Toast.makeText(MainActivity.this, "Successs", Toast.LENGTH_LONG).show();

build.gradle

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')    
    compile 'com.android.support:appcompat-v7:22.0.0'    
    compile files('libs/ksoap2-android-2.5.2.jar')
    compile files('libs/org-apache-commons-codec.jar')

}

【问题讨论】:

  • 你不需要 2 个compile files(...),因为compile fileTree(...) 会这样做。
  • 那么我需要如何改变它..

标签: android arrays base64 ksoap


【解决方案1】:

您似乎没有正确添加 ksoup 库。这就是 gradle 无法找到它的原因。

你能看看这个link

已编辑:

不要从 lib 添加库。尝试将下面的行复制并粘贴到 build.gradle 文件中。

compile 'com.google.code.ksoap2-android:ksoap2-android:3.6.0'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 2019-07-12
    相关资源
    最近更新 更多