在我开始之前,我是否可以指出我已经花了最近5个小时在这里进行圈子。我已经尝试过似乎每个StackOverflow方法从API中提取看似简单的int。这似乎应该更容易,但事实并非如此。
我想要实现的是从此URL中提取JSON信息:
http://api.apixu.com/v1/current.json?key=ENTERKEYHERE&q=leeds
然后收集类别“temp_c”,它应该是“7.0”的行。以下是呼叫的外观示例:
{
"location": {
"name": "Leeds",
"region": "West Yorkshire",
"country": "United Kingdom",
"lat": 53.81,
"lon": -1.54,
"tz_id": "Europe/London",
"localtime_epoch": 1509670055,
"localtime": "2017-11-03 0:47"
},
"current": {
"last_updated_epoch": 1509669008,
"last_updated": "2017-11-03 00:30",
"temp_c": 7,
"temp_f": 44.6,
"is_day": 0,
"condition": {
"text": "Partly cloudy",
"icon": "//cdn.apixu.com/weather/64x64/night/116.png",
"code": 1003
},
"wind_mph": 4.3,
"wind_kph": 6.8,
"wind_degree": 150,
"wind_dir": "SSE",
"pressure_mb": 1015,
"pressure_in": 30.4,
"precip_mm": 0,
"precip_in": 0,
"humidity": 93,
"cloud": 75,
"feelslike_c": 5.8,
"feelslike_f": 42.4,
"vis_km": 10,
"vis_miles": 6
}
}
我已成功获取数据,以便在夜间的随机点中进入应用程序,但是根本无法提取特定数据。目前,我的应用程序根本不会拉它,我不知道我之前做了什么。
如果这是一个被认为是“重复”的问题,我真的很抱歉,但我可以向您保证,对于试图学习该语言的人来说,没有一个答案能够完全解释如何使用新的API(一些答案似乎不再适用于API 23 +)
我不是在寻找带有大量方法的详细应用程序,只是提取JSON数据和选择特定类别的简单方法。如果您能解释如何执行此操作,我将非常感激,因为我计划将来为其他来源调整代码。谢谢!
答案 0 :(得分:1)
您应该使用AsyncTask或AsyncTaskLoader,以便UI-Thread在加载期间不会延迟。搜索此术语或使用UI线程,但在加载期间它将滞后。无论如何,调用此函数,url是你的url:
public static String getResponse(URL url) throws IOException {
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
try {
InputStream in = urlConnection.getInputStream();
Scanner scanner = new Scanner(in);
scanner.useDelimiter("\\A");
boolean hasInput = scanner.hasNext();
if (hasInput) {
return scanner.next();
} else {
return null;
}
} finally {
urlConnection.disconnect();
}
可以通过调用
获取网址url = new URL(yourAddressAsAString)
上面的functoin应该返回一个字符串。将其转换为JSON对象
JSONObject obj = null;
try {
obj = new JSONObject(yourString);
} catch (Throwable t) { }
然后致电
String tempc = String.valueOf(obj.getJSONObject("current").getJSONObject("temp_c"))
获取有问题的对象。祝你好运!
答案 1 :(得分:0)
第一步将您的整个Json
作为字符串让我们说String
json_string
,这就是您必须做的事情(请阅读代码中的注释以获取更多信息):
String json_string="your json string here as a normal String json object";
try {
JSONObject jsonObjectRoot=new JSONObject(json_string);
JSONObject locationObject=jsonObjectRoot.getJSONObject("location");
String name=locationObject.getString("name"); //This will return leeds
String region=locationObject.getString("region"); //This will return West YorkShire!
}catch (JSONException json_except){
//You have an exception so check if your items really exist with those names!
json_except.printStackTrace();
}
所以从上面的例子中你需要知道的是:
new JSONObject(string);
outer_object.getJSONObject("string_name_of_inner_object");
并继续深入,直到获得对象为止。String string=json_object.getString("the_string_name_as_it_appears_in_the_object");
JSONArray jsonArray=your_json_object.getJSONArray("array_name_as_it_appears_in_json");
我希望这会对你有所帮助!