- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试制作一个 Android 应用程序,它根据您输入的邮政编码获取天气信息,并且还以 EST 和 GMT 格式显示时间。我正在使用网络服务 (WSDL) 并编写了访问它的代码,代码如下:
public void sendMessage(View view)
{
SOAP_ACTION = "http://ws.cdyne.com/WeatherWS/GetCityWeatherByZIP";
NAMESPACE = "http://ws.cdyne.com/WeatherWS/";
METHOD_NAME = "GetCityWeatherByZIP";
URL = "http://wsf.cdyne.com/WeatherWS/Weather.asmx?wsdl";
txtZIP = (EditText) findViewById(R.id.zipcode);
temp = (TextView) findViewById(R.id.displayTemp);
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
PropertyInfo property = new PropertyInfo();
{
property.name = "zipcode";
property.setNamespace(NAMESPACE);
property.type = PropertyInfo.STRING_CLASS;
property.setValue(txtZIP.getText().toString());
}
request.addProperty(property);
//request.addProperty("zipcode", txtZIP.getText().toString());
Toast.makeText(getApplicationContext(), "btnZIP pressed", Toast.LENGTH_LONG).show();
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10);
envelope.setOutputSoapObject(request);
envelope.implicitTypes = true;
envelope.dotNet = true;
HttpTransportSE androidHTTP = new HttpTransportSE(URL, 600);
try {
Toast.makeText(getApplicationContext(), "In try statement", Toast.LENGTH_LONG).show();
androidHTTP.call(SOAP_ACTION, envelope);
// SoapPrimitive resp = (SoapPrimitive) envelope.getResponse();
SoapObject result = (SoapObject) envelope.bodyIn;
if(result != null)
{
Toast.makeText(getApplicationContext(), "In IF statement", Toast.LENGTH_LONG).show();
//temp.append("in IF statement, result not null");
} else {
Toast.makeText(getApplicationContext(), "In ELSE statement", Toast.LENGTH_LONG).show();
//temp.append("in IF statement, result IS null");
}
} catch (HttpResponseException e) {
Toast.makeText(getApplicationContext(), "No Response", Toast.LENGTH_LONG).show();
e.printStackTrace();
} catch (XmlPullParserException e){
Toast.makeText(getApplicationContext(), "XML Pull exe", Toast.LENGTH_LONG).show();
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
现在,我的问题是使用 androidHTTP.call(SOAP_ACTION, envelope);
方法时,什么也没有发生。我有 Toast 方法来显示正在执行的内容,我得到的最远是进入 try block ,但从未进入 if 语句。
我已经尝试四处寻找可能的原因和解决方案,但我似乎找不到针对这个特定问题的任何信息。我已将服务器的超时时间延长到 600,甚至将 implicitType 设置为 true,但没有任何效果。我知道我为此方法使用了 SoapEnvelope.VER10,但我还有其他两种方法,我使用了 VER11 和 VER12,并且没有任何变化。如果有人对可能发生的事情有任何想法,我将非常感谢您的帮助。此外,AndroidManifest.xml 具有访问互联网所需的使用许可行。
最佳答案
!!!!工作确认!!!
主要
public class MainActivity extends Activity{
public static String rslt,thread;
SoapMiddleMan c;
EditText txtZIP;
TextView weather;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtZIP = (EditText)findViewById(R.id.zipCode);
weather = (TextView)findViewById(R.id.weather);
}
public void sendMessage(View view)
{
try{
// condition for keeping the main thread asleep
thread = "START";
// create a new webservice caller thread
c = new SoapMiddleMan();
// join the new thread, start it and then select what webservice you want to access
c.join();c.setZip(txtZIP.getText().toString()); c.start();
// keep this thread asleep while the service thread is running
while(thread=="START")
{
try
{
Thread.sleep(10);
}
catch(Exception e)
{
rslt="Failed2";
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
weather.setText(rslt);
}
}
中间人
public class SoapMiddleMan extends Thread {
private String zip;
private SoapSenderClass cs;
public void run(){
try{
cs=new SoapSenderClass();
String resp=cs.getWeather(zip);
MainActivity.rslt=resp; //public string in calling activity
System.out.println("reached 2 \n");
}catch(Exception ex)
{
MainActivity.rslt=ex.toString();
}
MainActivity.thread = "done";
}
public void setZip(String searchZip)
{
zip = searchZip;
}
}
来电者
public class SoapSenderClass{
String SOAP_ACTION = "http://ws.cdyne.com/WeatherWS/GetCityWeatherByZIP";
String NAMESPACE = "http://ws.cdyne.com/WeatherWS/";
String METHOD_NAME = "GetCityWeatherByZIP";
String URL = "http://wsf.cdyne.com/WeatherWS/Weather.asmx?wsdl";
public String getWeather(String zipcode)
{
try{
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
PropertyInfo property = new PropertyInfo();
property.setName("ZIP");
property.setType(String.class);
property.setValue(zipcode);
request.addProperty(property);
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION, envelope);
SoapObject response = (SoapObject)envelope.getResponse();
String resultValue = response.toString();
return resultValue;
}
catch (Exception e) {
e.printStackTrace();
return "Failed to get ID";
}
}
}
我已经简化了您的调用方代码,并将 addproperty 的名称更改为 ZIP,这看起来像是在 WSDL 中调用的输入。删除了属性调用的括号,删除了据我所知不需要的命名空间。
关于java - HttpTransportSE .call() 方法没有任何 Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30822380/
我使用 http://code.google.com/p/ksoap2-android/图书馆,我想知道HttpTransportSE 的默认超时时间是多少?当用 启动它时 HttpTransport
我正在从我的 Android 应用程序调用网络服务。我在整个应用程序中对该服务进行了许多不同的调用,除了一个之外,每个调用都在不到一秒的时间内返回数据。我的一个调用最多可能需要一分钟才能返回数据,
我正在尝试通过适用于 Android 的 Ksoap2 访问 Android 中的 webservice。 SoapObject 创建成功,bodyOut 的 S.O.P 输出所需的字符串。但是,当我
我正在尝试制作一个 Android 应用程序,它根据您输入的邮政编码获取天气信息,并且还以 EST 和 GMT 格式显示时间。我正在使用网络服务 (WSDL) 并编写了访问它的代码,代码如下: pub
我从 this link 下载了 ksoap2 : 将下载的 .jar 文件导入 Eclipse 中的 Android 项目后,我只在第一行导入 (HttpTransportSE) 时遇到导入错误。我
我目前正在开发使用 ksoap2 网络服务的应用程序。我正在使用“ksoap2-android-assembly-2.6.0-jar-with-dependencies.jar” 这是我的问题。 ap
在将返回字符串(字符串形式的 xml 数据)的 transport.responseDump 转换为 ksoap 对象时,我不知道如何进一步进行。可能是一些代码 fragment 可以帮助我描述我的问
晚上好,我花了很长时间尝试使用一个simpes WS,已经研究并尝试了不同的方法来解决这个错误但失败了,尝试了不同版本的kSOAP,2.5.2,2.6.0,3.0.0, 3.3,0。 ..Gostar
我正在尝试在 Android 手机上将 Https 连接到 Wcf 服务。我通过 KSoap 在 Android 上阅读了很多关于 Https 的教程。现在我可以通过证书检查了。但是我无法连接到 ht
我正在尝试使用 ksoap 从我的 Android 应用程序使用网络服务,我下载了 ksoap2-android-assembly-2.3-jar-with-dependencies.jar。 我将这
我是一名优秀的程序员,十分优秀!