Я пытаюсь получить данные Json внутри счетчика, но каждый раз не получаю - PullRequest
0 голосов
/ 13 октября 2019

Попытка извлечь отделы из данных JSON с помощью модернизации, но не удалось сделать это

Я пробовал несколько способов, но не смог загрузить данные из списка JSONданных

Вот мой ответ JSON:

[
    {
        "Name": "Cardiology & Medicine Department",
        "ServiceProviders": [],
        "TenantId": 0,
        "Tenant": null,
        "Id": 482,
        "Active": true,
        "UserId": null,
        "HasErrors": false,
        "ErrorCount": 0,
        "NoErrors": true
    },
    {
        "Name": "Cardiology Department",
        "ServiceProviders": [],
        "TenantId": 0,
        "Tenant": null,
        "Id": 467,
        "Active": true,
        "UserId": null,
        "HasErrors": false,
        "ErrorCount": 0,
        "NoErrors": true
    }
]

Вот мой ApiService:

public interface ApiService {

    @GET("/Configuration/GetDepartments")
    Call<List<OpdIpdDepartmentModel>>getAllOpdIpdDepartments();

}

Вот мой фрагмент кода активности:

открытый класс OpdIpdAnalysis extends AppCompatActivity {

ApiService service;
TokenManager tokenManager;

private MaterialBetterSpinner materialDesignSpinner;
Call<List<OpdIpdDepartmentModel>> callDepartment;
List<String> spinnerLists = new ArrayList<String>();
List<OpdIpdDepartmentModel> departmentLists;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_opd_ipd_analysis);

    tokenManager = TokenManager.getInstance(getSharedPreferences("prefs", MODE_PRIVATE));
    service = RetrofitBuilder.createServiceWithAuth(ApiService.class, tokenManager);

    //MaterialBetterSpinner code goes from here
    materialDesignSpinner = (MaterialBetterSpinner) findViewById(R.id.department_spinner);
    materialDesignSpinner.setHintTextColor(Color.parseColor("#00BE84"));
    materialDesignSpinner.setTextColor(Color.parseColor("#00BE84"));
    materialDesignSpinner.setHighlightColor(Color.parseColor("#00BE84"));
    materialDesignSpinner.setUnderlineColor(Color.parseColor("#00BE84"));


    callDepartment= service.getAllOpdIpdDepartments();
    callDepartment.enqueue(new Callback<List<OpdIpdDepartmentModel>>() {
        @Override
        public void onResponse(Call<List<OpdIpdDepartmentModel>> call, Response<List<OpdIpdDepartmentModel>> response) {
            departmentLists = response.body();

            if (departmentLists != null){
                for (int i = 0; i<departmentLists.size(); i++){
                    spinnerLists.add(departmentLists.get(i).getName());
                }
            }
            ArrayAdapter<String> departmentAdapter = new ArrayAdapter<>(OpdIpdAnalysis.this, android.R.layout.simple_dropdown_item_1line, spinnerLists);
            materialDesignSpinner.setAdapter(departmentAdapter);
        }

        @Override
        public void onFailure(Call<List<OpdIpdDepartmentModel>> call, Throwable t) {

        }
    });

}

}

Вот мое обновлениекласс экземпляра:

public class RetrofitBuilder {

    private static String base_url = SharedPreferenceUtils.getString("URLS", "");
    public static String BASE_URL = "https://"+base_url;

    public RetrofitBuilder() {
    }


    private final static OkHttpClient client = buildClient();
    private static Retrofit retrofit = buildRetrofit();

    private static OkHttpClient buildClient() {
        OkHttpClient.Builder builder = new OkHttpClient.Builder()
                .connectTimeout(5, TimeUnit.MINUTES)
                .readTimeout(5, TimeUnit.MINUTES)
                .writeTimeout(5, TimeUnit.MINUTES)
                .addInterceptor(new Interceptor() {
                    @NotNull
                    @Override
                    public Response intercept(@NotNull Chain chain) throws IOException {
                        Request request = chain.request();

                        Request.Builder builder = request.newBuilder()
                                .addHeader("Accept", "application/json")
                                .addHeader("Connection", "close");

                        request = builder.build();

                        return chain.proceed(request);
                    }
                });

        if (BuildConfig.DEBUG) {
            builder.addNetworkInterceptor(new StethoInterceptor());
        }

        return builder.build();
    }

    private static Retrofit buildRetrofit() {

        if (retrofit == null) {
            retrofit = new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .client(RetrofitBuilder.client)
                    .addConverterFactory(MoshiConverterFactory.create())
                    .build();
        }

        return retrofit;
    }

    public static <T> T createService(Class<T> service) {
        return retrofit.create(service);
    }

    public static <T> T createServiceWithAuth(Class<T> service, final TokenManager tokenManager) {

        OkHttpClient newClient = client.newBuilder().addInterceptor(new Interceptor() {
            @NotNull
            @Override
            public Response intercept(@NotNull Chain chain) throws IOException {

                Request request = chain.request();

                Request.Builder builder = request.newBuilder();

                if (tokenManager.getToken().getAccessToken() != null) {
                    builder.addHeader("Authorization", "bearer " + tokenManager.getToken().getAccessToken());
                }
                request = builder.build();
                return chain.proceed(request);
            }
        }).build();

        //.authenticator(CustomAuthenticator.getInstance(tokenManager)).build();

        Retrofit newRetrofit = retrofit.newBuilder().client(newClient).build();
        return newRetrofit.create(service);

    }

    public static Retrofit getRetrofit() {
        return retrofit;
    }
}

Теперь, где я ошибся?

Или я должен следовать другому подходу?

Если мне нужно, то что это?

Мое приложение каждый раз падает, И я получаю сообщение об ошибке:

java.lang.RuntimeException: невозможно запустить действие ComponentInfo {com.example.ritecare / com.example.ritecare.activities.OpdIpdAnalysis}: java.lang.NullPointerException: попытка вызвать метод интерфейса'retrofit2.Call com.example.ritecare.api.ApiService.getAllOpdIpdDepartments () 'для ссылки на нулевой объект

Теперь, как я могу решить эту проблему и установить имя отдела, как яожидая

...