При запуске следующего кода из https://github.com/icoderman/wc-api-java на Android Studio / Android-устройстве я получаю следующую ошибку: No static field INSTANCE of type Lorg/apache/http/conn/ssl/AllowAllHostnameVerifier; in class Lorg/apache/http/conn/ssl/AllowAllHostnameVerifier; or its superclasses (declaration of 'org.apache.http.conn.ssl.AllowAllHostnameVerifier' appears in /system/framework/framework.jar:classes3.dex)
Я успешно запустил тот же код на IntelliJ IDEA.Я ознакомился с некоторыми предложениями и попытался реализовать OkHttp, но в итоге это затрагивает почти половину уже реализованного кода, и я до сих пор не знаком с большинством сетевых концепций
Вот где возникает ошибкаот;DefaultHttpClient.java class (CloseableHttpClient
):
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.entity.ContentType;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicNameValuePair;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class DefaultHttpClient implements HttpClient {
private static final String CONTENT_TYPE = "Content-Type";
private static final String APPLICATION_JSON = "application/json";
private CloseableHttpClient httpClient;
private ObjectMapper mapper;
public DefaultHttpClient() {
this.httpClient = HttpClientBuilder.create().build();
this.mapper = new ObjectMapper();
}
@Override
public Map get(String url) {
HttpGet httpGet = new HttpGet(url);
return getEntityAndReleaseConnection(httpGet, Map.class);
}
@Override
public List getAll(String url) {
HttpGet httpGet = new HttpGet(url);
return getEntityAndReleaseConnection(httpGet, List.class);
}
@Override
public Map post(String url, Map<String, String> params, Map<String, Object> object) {
List<NameValuePair> postParameters = getParametersAsList(params);
HttpPost httpPost;
try {
URIBuilder uriBuilder = new URIBuilder(url);
uriBuilder.addParameters(postParameters);
httpPost = new HttpPost(uriBuilder.build());
httpPost.setHeader(CONTENT_TYPE, APPLICATION_JSON);
return postEntity(object, httpPost);
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}
}
@Override
public Map put(String url, Map<String, String> params, Map<String, Object> object) {
List<NameValuePair> postParameters = getParametersAsList(params);
HttpPut httpPut;
try {
URIBuilder uriBuilder = new URIBuilder(url);
uriBuilder.addParameters(postParameters);
httpPut = new HttpPut(uriBuilder.build());
httpPut.setHeader(CONTENT_TYPE, APPLICATION_JSON);
return postEntity(object, httpPut);
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}
}
@Override
public Map delete(String url, Map<String, String> params) {
List<NameValuePair> postParameters = getParametersAsList(params);
HttpDelete httpDelete;
try {
URIBuilder uriBuilder = new URIBuilder(url);
uriBuilder.addParameters(postParameters);
httpDelete = new HttpDelete(uriBuilder.build());
return getEntityAndReleaseConnection(httpDelete, Map.class);
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}
}
private Map postEntity(Map<String, Object> objectForJson, HttpEntityEnclosingRequestBase httpPost) {
try {
HttpEntity entity = new ByteArrayEntity(this.mapper.writeValueAsBytes(objectForJson), ContentType.APPLICATION_JSON);
httpPost.setEntity(entity);
return getEntityAndReleaseConnection(httpPost, Map.class);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
private List<NameValuePair> getParametersAsList(Map<String, String> params) {
List<NameValuePair> postParameters = new ArrayList<>();
if (params != null && params.size() > 0) {
for (String key : params.keySet()) {
postParameters.add(new BasicNameValuePair(key, params.get(key)));
}
}
return postParameters;
}
private <T> T getEntityAndReleaseConnection(HttpRequestBase httpRequest, Class<T> objectClass) {
try {
HttpResponse httpResponse = httpClient.execute(httpRequest);
HttpEntity httpEntity = httpResponse.getEntity();
if (httpEntity == null) {
throw new RuntimeException("Error retrieving results from http request");
}
Object result = mapper.readValue(httpEntity.getContent(), Object.class);
if (objectClass.isInstance(result)) {
return objectClass.cast(result);
}
throw new RuntimeException("Can't parse retrieved object: " + result.toString());
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
httpRequest.releaseConnection();
}
} // getEntityAndReleaseConnection()
}
Вот файл Gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.example.vavu.metromenlyn"
minSdkVersion 26
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/notice.txt'
exclude 'META-INF/ASL2.0'
}
compileOptions {
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:design:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.android.support:support-vector-drawable:28.0.0'
implementation 'com.android.support:support-v4:28.0.0'
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'android.arch.lifecycle:extensions:1.1.1'
implementation 'com.android.support:cardview-v7:+'
implementation 'com.android.support:percent:28.0.0'
implementation 'com.github.florent37:arclayout:1.0.3'
// volley
implementation 'com.android.volley:volley:1.1.0'
// glide
implementation 'com.github.bumptech.glide:glide:4.4.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.4.0'
// Retrofit
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
// OkHttp
implementation 'com.squareup.okhttp3:okhttp:3.11.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.11.0'
// https://mvnrepository.com/artifact/org.apache.commons/commons-lang3
implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.8.1'
// https://mvnrepository.com/artifact/commons-codec/commons-codec
implementation group: 'commons-codec', name: 'commons-codec', version: '1.11'
// https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on
implementation group: 'org.bouncycastle', name: 'bcprov-jdk15on', version: '1.60'
// https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient
implementation group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.6'
// https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core
implementation group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.9.8'
// https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind
implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.9.8'
implementation 'com.android.support:multidex:1.0.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
Я просто хотел бы просто иметь возможность отправлять запросы в магазин Woocommerce на Android...