尝试使用翻新从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扩展了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()' 空对象引用
现在如何解决此问题并按期望设置部门名称?