signUpUrl, возвращающий nullpointerexception - PullRequest
0 голосов
/ 20 января 2020
SignupUrl signupUrl = androidManagementClient
                .signupUrls()
                .create()
                .setProjectId(CLOUD_PROJECT_ID)
                .setCallbackUrl(CALLBACKURL).execute();

вызывает приложение взломать sh из-за NPE

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.api.services.androidmanagement.v1.AndroidManagement$SignupUrls com.google.api.services.androidmanagement.v1.AndroidManagement.signupUrls()' on a null object reference

Кто-нибудь видел это раньше? Я выполнил все предварительные условия для разработки и в настоящее время собираюсь выйти из примера приложения, и этот фрагмент кода вылетает. В чем может быть причина?

https://developers.google.com/android/management/sample-app

Обновление согласно запросу:

Код

EnterpriseHelperClass - я бы Мне нравится делать это программно, хотя я знаю, что это легко можно выполнить с помощью руководства по быстрому запуску.

public class EnterpriseCreationHelper {
    private static final String CALLBACKURL =
            "https://play.google.com/work/adminsignup?enterpriseToken";
    private static final String TAG = "MainActivity";
    private static String CLOUD_PROJECT_ID = "******-43211";
    private static String SERVICE_ACCOUNT = "****@****-432111.iam.gserviceaccount.com";
    private static String CREDENTIALS_FILE =
            "/Users/****/appname/src/******.json";
    private static String POLICY_ID = "samplePolicy";
    private static AndroidManagement androidManagementClient;

    public EnterpriseCreationHelper(AndroidManagement androidManagementClient){
        EnterpriseCreationHelper.androidManagementClient = androidManagementClient;
    }

    public void run() throws IOException {

        //Where the enterprise creates
        String enterpriseName = createEnterprise();
        System.out.println("Enterprise name is: " + enterpriseName);

        //Where the enrollment token is created - to enroll the device
        String enrollment_token = createEnrollmentToken(enterpriseName, POLICY_ID);
        System.out.println("My enrollment token is: " + enrollment_token);

    }

    private String createEnterprise() throws IOException{

        //Initiates the Sign-up Process - returning null for some reason?
        System.out.println("Creating the sign up URL");

        SignupUrl signupUrl = androidManagementClient
                .signupUrls().create()
                .setProjectId(CLOUD_PROJECT_ID)
                .setCallbackUrl(CALLBACKURL).execute();


        Log.d(TAG, "createEnterprise: signupurl is " + signupUrl);

        System.out.println("To sign up for a new enterprise, open this URL in your browser: ");
        System.out.println(signupUrl.getUrl());
        System.out.println("After signup, you will see an error page in the browser.");
        System.out.println("Paste the enterpriseToken value from the error page URL here: ");
        String enterpriseToken = new BufferedReader(new InputStreamReader(System.in)).readLine();

        //Create the enterprise
        System.out.println("Creating the enterprise");
        return androidManagementClient.enterprises().create(new Enterprise())
                .setProjectId(CLOUD_PROJECT_ID).setSignupUrlName(signupUrl.getName())
                .setEnterpriseToken(enterpriseToken)
                .execute().getName();
    }

    private String createEnrollmentToken(String enterpriseName, String policyId) throws IOException{
        System.out.println("Creating an enrollment token");

        EnrollmentToken token = new EnrollmentToken().setPolicyName(policyId).setDuration("86400s");

        return androidManagementClient.enterprises().enrollmentTokens().create(enterpriseName, token)
                .execute().getValue();
    }

}

*** Обновление ****

Я могу двигаться вперед с аутентификация в клиенте. Здесь я пытаюсь выполнить POST-запрос, используя модернизацию, чтобы добавить sh учетную запись службы в область для аутентификации в клиенте API управления Android. Тем не менее, я заблокирован, так как с тех пор, как я последний раз использовал модификацию, это было давно, но метод enqueue не приходит из моего звонка через сетевой сервис. Пожалуйста, смотрите код ниже. Кто-нибудь сталкивался с проблемами, в которых очередь не показалась для них?

 Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("https://androidmanagement.googleapis.com/")
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    private NetworkService networkService = retrofit.create(NetworkService.class);

    Call<Post> credentialsPost = networkService.authenticate(serviceAccount);

//this next line should be the enqueue but it doesn't show up when I try to extract it from credentialsPost.

Ответы [ 2 ]

1 голос
/ 03 февраля 2020

Похоже, getAndroidManagementClient возвращает нулевой объект, в результате чего androidManagementClient устанавливается равным нулю. Убедитесь, что ваши учетные данные верны и этот метод успешно завершен.

1 голос
/ 26 января 2020

Ваше значение androidManagementClient равно нулю. Пожалуйста, поделитесь методом инициализации androidManagementClient, нам будет полезно ответить Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...