gpt4 book ai didi

java - 在 Android 中使用 FlightAware API

转载 作者:行者123 更新时间:2023-12-01 06:10:53 24 4
gpt4 key购买 nike

概述:你好。我正在尝试使用 Android 中的 FlightAware api 获取航类数据(飞行路径等)。我不确定实现这一目标的最佳方法是什么。我应该提到的是,我确实有一个有效的用户名和 API key 。我正在使用 Android Studio。

为了更好地了解我正在寻找什么样的信息,您可以查看他们的 JavaScript example 。下面是一个 HTML 页面的图片(他们的 JavaScript 示例),该页面允许使用来自 FlightAware api 的数据在 map 上直观地表示飞行路径: https://i.gyazo.com/ab7bb4560e698ae00dc9ef9a52eca64c.jpg 。我有一种方法可以直观地表示我的应用程序中的数据;我只需要一种首先获取数据的方法(在 Android 中)。

问题:考虑到这一点,我如何在 Android 中查询航类信息,就像您在上面的示例中看到的那样?

不成功的尝试:如果您前往 FlightAware 站点的代码示例部分,您可以查看实现其 API 的许多建议方法。我很自然地向下滚动到 Java 部分,因为 Android 使用了相当大的一部分 Java。然后我尝试在 Android 中实现 NetBeans 示例。问题是,我不确定如何使用他们在 Android Studio 中提供的 WSDL(以前从未听说过 WSDL)链接。我发现它只是可以转换为Java 类的XML?我尝试使用 WSDL2Code(网站)将 WSDL 转换为我可以使用的 Java 类;这在一定程度上有效,但无法转换所有我需要的类(仍然缺少一些)。然后我尝试了 Android 插件 EasyWSDL 生成器(免费版),但它生成的 Java 类比 WSDL2Code 还要少。最后,我进入 NetBeans IDE 并从 WSDL 链接生成 Java 类,并且能够生成所有 Java 类。但是,它们似乎在 Android 中不起作用,因为通过 NetBeans 生成的 Java 类倾向于导入 javax.xml.bind.annotation ,而 Android 中似乎未包含该类。

下面是我从 NetBeans 复制过来的生成的 Java 类之一的示例:

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
/**
* <p>Java class for EnrouteRequest complex type.
*
* <p>The following schema fragment specifies the expected content contained within this class.
*
* <pre>
* &lt;complexType name="EnrouteRequest">
* &lt;complexContent>
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* &lt;sequence>
* &lt;element name="airport" type="{http://www.w3.org/2001/XMLSchema}string"/>
* &lt;element name="howMany" type="{http://www.w3.org/2001/XMLSchema}int"/>
* &lt;element name="filter" type="{http://www.w3.org/2001/XMLSchema}string"/>
* &lt;element name="offset" type="{http://www.w3.org/2001/XMLSchema}int"/>
* &lt;/sequence>
* &lt;/restriction>
* &lt;/complexContent>
* &lt;/complexType>
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "EnrouteRequest", propOrder = {
"airport",
"howMany",
"filter",
"offset"
})
public class EnrouteRequest {

@XmlElement(required = true)
protected String airport;
protected int howMany;
@XmlElement(required = true)
protected String filter;
protected int offset;

/**
* Gets the value of the airport property.
*
* @return
* possible object is
* {@link String }
*
*/
public String getAirport() {
return airport;
}

/**
* Sets the value of the airport property.
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setAirport(String value) {
this.airport = value;
}

任何帮助将不胜感激!

最佳答案

我似乎找到了使用 ksoap2 的有效解决方案:

1).将 ksoap2 库添加到您的 libs 文件夹中。你可以发现here
2)。创建一个新线程。
3)。在该线程内输入以下代码:

MarshalBase64 mbase = new MarshalBase64();
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("howMany", howMany);
request.addProperty("airport", airport);
request.addProperty("filter", "");
request.addProperty("offset", 0);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut = request;
envelope.encodingStyle = SoapSerializationEnvelope.ENC2003;
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
String n = "";
HttpTransportSE ht = new HttpTransportSE(URL, 60000);
ht.debug = true;
try {
mbase.register(envelope);
ht.call(SOAP_ACTION, envelope);
SoapObject response = (SoapObject) envelope.getResponse();
} catch (Exception e) {
e.printStackTrace();
}

说明:

  • NAMESPACE 是“http://flightxml.flightaware.com/soap/FlightXML2 ”。
  • METHOD_NAME 是您调用的方法的名称,在我的例子中为“EnrouteRequest”。
  • mbase 用于序列化字节数组。
  • request.addProperty 用于添加参数。就我而言,该特定方法有四个参数。
  • response 是您将要处理的返回对象。这是您调用的方法将根据给定参数返回的信息。

重要说明!
您必须在执行上述代码之前进行身份验证,否则您将无法访问 FlightAware API。您可以使用以下代码进行身份验证(将 User 替换为您的用户名,将 APIKEY 替换为您的 API key ):

Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("User",
"APIKEY".toCharArray());
}
});

关于java - 在 Android 中使用 FlightAware API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35052905/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com