Я создал простой RequestQueue в одноэлементном классе на основе документации Google Android.
public class ApplicationSingleton {
private static ApplicationSingleton singleton;
private String api_token;
private RequestQueue requestQueue;
private ApplicationSingleton(Context context) {
requestQueue = new RequestQueue(new DiskBasedCache(context.getCacheDir()),
new BasicNetwork(new HurlStack()));
}
public static synchronized ApplicationSingleton getInstance(Context context) {
if (singleton == null) {
singleton = new ApplicationSingleton(context);
}
return singleton;
}
public String getApi_token() {
return api_token;
}
public void setApi_token(String api_token) {
this.api_token = api_token;
}
public RequestQueue getRequestQueue() {
return requestQueue;
}
}
Я проверяю, что мой одноэлементный класс всегда возвращает один и тот же экземпляр, используя Robolectric.
@RunWith(RobolectricTestRunner.class)
public class ApplicationSingletonTest {
@Test
public void SHOULD_RETURN_SAME_INSTANCE_OF_SINGLETON() {
ApplicationSingleton applicationVars = ApplicationSingleton.getInstance(
RuntimeEnvironment.application);
ApplicationSingleton applicationVars2 = ApplicationSingleton.getInstance(
RuntimeEnvironment.application);
assertNotNull(applicationVars);
assertNotNull(applicationVars2);
assertEquals(applicationVars, applicationVars2);
}
}
При каждом запуске этого теста он завершается с ошибкой java.lang.NoClassDefFoundError: org / apache / http / StatusLine.Я попытался добавить клиентскую зависимость http в мой gradle.build:
implementation group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.7'
, что позволяет успешно завершить тест, однако в моем build.gradle появляется сообщение о том, что httpclient определяет классы, конфликтующие с классамитеперь предоставляется Android. ".
Есть идеи, что происходит?