我正在尝试使用Awareness.API获取天气信息。选中复选框后,我的代码将检索用户的天气。这是我的代码:
private GoogleApiClient mGoogleApiClient;
float temperature, temperatureFeelsLike;
int humidity;
@Override
public void onCreate(Bundle savedInstanceState) {
mGoogleApiClient = new GoogleApiClient.Builder(getActivity())
.addApi(Awareness.API).build();
mGoogleApiClient.connect();
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
chkOnLocation.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked){
if (ContextCompat.checkSelfPermission(getActivity(),android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(getActivity(),new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION},12345);
}
Awareness.SnapshotApi.getWeather(mGoogleApiClient)
.setResultCallback(new ResultCallback<WeatherResult>() {
@Override
public void onResult(@NonNull WeatherResult weatherResult) {
Weather weather = weatherResult.getWeather();
temperature = weather.getTemperature(Weather.CELSIUS);
temperatureFeelsLike = weather.getFeelsLikeTemperature(Weather.CELSIUS);
humidity = weather.getHumidity();
Log.v(FILE_NAME,"get temperature: " + temperature + ", " + temperatureFeelsLike + ", " + humidity);
}
});
}
}
}
}
现在上面的代码按预期正常运行,没有任何问题。但是现在因为我从许多地方调用了Weather api,所以我决定把代码放在另一个类中检索它,看起来像这样。
public class GetWeather {
private GoogleApiClient mGoogleApiClient;
private Activity mActivity;
ObjWeather myWeather;
public GetWeather(Activity activity){
mActivity = activity;
mGoogleApiClient = new GoogleApiClient.Builder(mActivity)
.addConnectionCallbacks(this)
.addApi(Awareness.API).build();
mGoogleApiClient.connect();
if (ContextCompat.checkSelfPermission(mActivity,android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(mActivity,new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION},12345);
}
}
@SuppressWarnings({"MissingPermission"})
public ObjWeather getMyWeather(){
Awareness.SnapshotApi.getWeather(mGoogleApiClient)
.setResultCallback(new ResultCallback<WeatherResult>() {
@Override
public void onResult(@NonNull WeatherResult weatherResult) {
Weather weather = weatherResult.getWeather();
myWeather.setTemperature(weather.getTemperature(Weather.CELSIUS));
myWeather.setTemperatureFeelsLike(weather.getFeelsLikeTemperature(Weather.CELSIUS));
myWeather.setHumidity(weather.getHumidity());
}
});
return myWeather;
}
}
以下是我从我的片段中调用上面代码的方法,该片段包含复选框;
GetWeather getWeather;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getWeather = new GetWeather(getActivity());
chkOnLocation.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked){
ObjWeather myWeather = getWeather.getMyWeather();
temperature = myWeather.getTemperature();
temperatureFeelsLike = myWeather.getTemperatureFeelsLike();
humidity = myWeather.getHumidity();
Log.v(FILE_NAME,"get temperature: " + temperature + ", " + temperatureFeelsLike + ", " + humidity);
}
}
});
}
在第二种方法中,我无法获得天气值;它将始终返回0.如何在那里正确获取天气值?