簡體   English   中英

將上下文從活動內的片段傳遞到另一個類

[英]Pass the context from a fragment inside an activity to another class

我有一個由Activity實例化的片段。 我遇到的問題是片段中有另一個類,該類將Activity上下文作為參數。

public class LocationQueries {
    Activity context;

    private static int REQUEST_CODE_RECOVER_PLAY_SERVICES = 200;

    public LocationQueries(Activity context) {
        this.context = context;
    }

    public boolean checkGooglePlayServices() {

        int checkGooglePlayServices = GooglePlayServicesUtil
                .isGooglePlayServicesAvailable(context);
        if (checkGooglePlayServices != ConnectionResult.SUCCESS) {
              /*
               * google play services is missing or update is required
               *  return code could be
               * SUCCESS,
               * SERVICE_MISSING, SERVICE_VERSION_UPDATE_REQUIRED,
               * SERVICE_DISABLED, SERVICE_INVALID.
               */
            GooglePlayServicesUtil.getErrorDialog(checkGooglePlayServices,
                    context, REQUEST_CODE_RECOVER_PLAY_SERVICES).show();

            return false;
        }

        return true;

    }
}

我像這樣在我的片段中實例化該類

private LocationQueries locationQueries = new LocationQueries(getActivity());

但是當我嘗試使用locationQueries.checkGooglePlayServices();

我得到Caused by: java.lang.NullPointerException: Attempt to invoke virtual method android.content.pm.PackageManager android.content.Context.getPackageManager() on a null object reference 看起來LocationQueries(getActivity())實際上沒有通過活動上下文。 我該如何解決?

編輯:如果我從活動-> LocationQueries(this);執行相同的操作,則一切正常LocationQueries(this);

似乎您在錯誤的位置啟動了LocationQueries 實際上,我認為這是:

private LocationQueries locationQueries = new LocationQueries(getActivity());

Fragment類中被稱為全局變量。
相反,應將變量保留為全局變量,但將其設置onCreate()onResume() ,如下所示:

private class Frag extends Fragment {

    private LocationQueries locationQueries;
    ...
    @Override
    public void onCreate(Bundle inState) {
        locationQueries = new LocationQueries(getActivity());
    }
}

您的片段似乎未附加到活動。

我懷疑您在調用onAttach(Activity activity)之前,或在您的Fragment上調用onDetach()之后,實例化了LocationQueries對象。

在這種情況下,調用getActivity()將返回null,這是您隨后傳遞給LocationQueries對象的結果,從而導致NPE。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM