我正在编写一个Android应用程序,我使用Aysnctask来使用openWeatherAPI获取当前天气。我怎么能调用Aysnctask类。
这是我写的Aysnctask类:
private class getWeather extends AsyncTask<String[], Void, String[]>{
@Override
protected String[] doInBackground(String[]... params) {
// TODO Auto-generated method stub
try {
String Url1="http://api.openweathermap.org/data/2.5/weather?lat="+currentLatitude+"&lon="+currentLongitude;
s1=getJson(Url1);
if(s1!=null){
JSONObject jObj1 = new JSONObject(s1);
Tem= jObj1.getJSONObject("main").getDouble("temp");
pressure=jObj1.getJSONObject("main").getDouble("pressure");
humm=jObj1.getJSONObject("main").getDouble("humidity");
wind=jObj1.getJSONObject("wind").getDouble("speed");
desc=jObj1.getJSONObject("weather").getDouble("description");
double tem_c=Tem-273.15;
String t=Double.toString(tem_c);
results[0]=t;
results[1]=Double.toString(pressure);
results[2]=Double.toString(humm);
results[3]=Double.toString(wind);
results[4]=Double.toString(desc);
}
} catch (Exception e) {
// TODO: handle exception
}
return results;
}//do in background
@Override
protected void onPostExecute(String[] results) {
temp.setText(results[0]+"°C");
hum.setText(results[1]+ "%");
press.setText(results[2]+ " hPa");
windSpeed.setText(results[3]+ " mps");
condDescr.setText(results[4]);
}
}
当我按下按钮时,我想获得当前纬度和经度的天气,但我不知道如何执行该课程
答案 0 :(得分:0)
试试这个
getWeather gt= new getWeather();
gt.execute(new String{currentLatitude,currentLongitude});
答案 1 :(得分:0)
根据Android docs here,你有很多例子,你可以这样做:
new GetWeather().execute(currentLatitude,currentLongitude);
我个人会回避对它的引用,而是发送你需要的东西或使用听众。另外,请将您的课程资本化:)
您可以在doInBackGround
String latitutde= params[0];
String longitude = params[1];
您可以查看的文档示例如下:
new DownloadFilesTask().execute(url1, url2, url3);
正如您所看到的,传递了您需要的许多参数,它只能在您提到的第一个通用参数的数组中访问。在您的情况下,它是一个String
数组,因此您只发送Strings
。
答案 2 :(得分:0)
试试这个..
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
new getWeather(currentLatitude,currentLongitude).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, new String[]{null});
else
new getWeather(currentLatitude,currentLongitude).execute(new String[]{null});
并将构造函数添加到异步任务
String currentLatitude;
String currentLongitude;
// constructor
@SuppressWarnings("rawtypes")
public getWeather(String currentLatitude, String currentLongitude) {
this.currentLatitude = currentLatitude;
this.currentLongitude = currentLongitude;
}
编辑1:
您不能像这样String t=Double.toString(tem_c);
您需要解析如下代码。
String t = String.valueOf(tem_c);
results[0] = t;
results[1] = String.valueOf(pressure);
results[2] = String.valueOf(humm);
results[3] = String.valueOf(wind);
results[4] = String.valueOf(desc);