2012-04-25 47 views
2

我是新来的ksoap2,我试图让示例w3学校的例子工作。出于某种原因,它总是在这条线上失败。创建新的SoapObject爆炸android应用程序

SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME); 

我不知道是什么导致失败。 Android应用程序刚刚爆炸。我在Manifest中设置了互联网权限。我不确定发生了什么事。由于

import org.ksoap2.SoapEnvelope; 
import org.ksoap2.serialization.SoapObject; 
import org.ksoap2.serialization.SoapPrimitive; 
import org.ksoap2.serialization.SoapSerializationEnvelope; 
import org.ksoap2.transport.HttpTransportSE; 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.EditText; 
import android.widget.Toast; 
public class WebServiceTurorialActivity extends Activity implements OnClickListener{ 

private static final String SOAP_ACTION = "http://tempuri.org/CelsiusToFahrenheit"; 
private static final String METHOD_NAME = "CelsiusToFahrenheit"; 
private static final String NAMESPACE = "http://tempuri.org/"; 
private static final String URL = "http://www.w3schools.com/webservices/tempconvert.asmx"; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    (findViewById(R.id.button1)).setOnClickListener(this); 
} 


public void onClick(View v) { 
    int a; 
    int b; 
    try 
    { 
     // EditText ed1=(EditText)findViewById(R.id.editText1); 
     // EditText ed2=(EditText)findViewById(R.id.editText2); 
     // a = Integer.parseInt(ed1.getText().toString()); 
     // b = Integer.parseInt(ed2.getText().toString()); 

     SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME); 
     //Request.addProperty("a", a); 
     // Request.addProperty("b", b); 
     Request.addProperty("Celsius", "32"); 

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

     HttpTransportSE transport= new HttpTransportSE(URL); 

     transport.call(SOAP_ACTION, soapEnvelope); 
     SoapPrimitive resultString = (SoapPrimitive)soapEnvelope.getResponse(); 

     Toast.makeText(this,"200 " + resultString,Toast.LENGTH_SHORT).show(); 

    }catch(Exception ex) { 
     Toast.makeText(this,"FALSE",Toast.LENGTH_SHORT).show(); 
    } 
} 

}

+1

炸毁=你有错误?请提供logcat/stacktrace。 – zapl 2012-04-25 22:11:36

+0

确定这里是logcat的链接 – 2012-04-25 22:21:23

+0

http://www.sourcepod.com/fnbryw34-7289 – 2012-04-25 22:21:34

回答

1
  • 在您的构建路径清除所有的库(JAR文件)。
  • 在项目的主目录中创建一个文件夹并将其命名为“libs”(不是 “lib”)。
  • 现在,Eclipse ADT Plugin将添加您的jar文件来构建路径。
  • 快乐编码

如果你仍然得到同样的问题,请尝试这些类(对我的作品):

public class Main extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     String fahrenheit = CelsiusToFahrenheitWs.celsiusToFahrenheit("32"); 
     Toast.makeText(getApplicationContext(), fahrenheit, Toast.LENGTH_SHORT).show(); 
    } 
} 

而且

public class CelsiusToFahrenheitWs { 
    private static final String METHOD_NAME = "CelsiusToFahrenheit"; 
    private static final String NAMESPACE = "http://tempuri.org/"; 
    private static final String SOAP_ACTION = "http://tempuri.org/CelsiusToFahrenheit"; 
    private static final String URL = "http://www.w3schools.com/webservices/tempconvert.asmx"; 

    public static String celsiusToFahrenheit(String celsius) { 
     String fahrenheit = null; 

     SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
     request.addProperty("Celsius", celsius); 

     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); 
      SoapPrimitive response = (SoapPrimitive) envelope.getResponse(); 
      fahrenheit = response.toString(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      fahrenheit = null; 
     } 
     return fahrenheit; 
    } 
} 
+0

我试过你的代码,但程序仍然崩溃。我将jar文件放入libs文件夹,并且仍然得到相同的错误java.lang.NoClassDefFoundError:org.ksoap2.serialization.SoapObject。我尝试了一个不同的ksoap2 jar文件,但没有解决问题。我仍然在寻找解决方案。谢谢 – 2012-04-26 16:06:56

+0

有同样的问题,原因也是一个不完整的jar文件。它工作,如果我下载的版本的原始文件,你可以找到这个版本的细节。 – 2012-11-09 23:18:59

4

我有同样的问题。这对我的作品:

正如上一个回答说:

  • 在您的构建路径清除所有的库(JAR文件)。
  • 在项目的主目录中创建一个文件夹并将其命名为“libs”(而不是“lib”)。
  • 现在的Eclipse ADT插件会增加您的JAR文件到构建路径

不是真的适合我。我的方法:

  1. 在您的构建路径删除 “ksoap2,机器人组装-2.xx的-JAR-与-dependencies.jar”
  2. 单击OK(忽略显示错误)
  3. 在项目的主目录下创建一个文件夹“库”
  4. 复制JAR-文件到这个目录(!)
  5. 在您的构建路径该目录
3

对于同样具有该p大家一起添加JAR文件roblem ...我试图解决这个问题很多很多小时,但后来我发现我的错误是:我没有正确下载ksoap2库,所以只有一个jar文件是21 KB,但正确的jar文件大约是150KB。所以请确保您正确下载文件!