从片段接收​​ResultCallback

时间:2017-06-21 16:06:01

标签: android callback

我正在尝试使用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.如何在那里正确获取天气值?

0 个答案:

没有答案