Search in sources :

Example 1 with ApiException

use of ee.ajapaik.android.exception.ApiException in project ajapaik-android-app by Ajapaik.

the class WebOperation method performRequest.

public boolean performRequest(String baseURL, Map<String, String> extraParameters, BasicCookieStore cookieStore) {
    Log.d(TAG, "performRequest()");
    ConnectivityManager cm = (ConnectivityManager) m_context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo info = cm.getActiveNetworkInfo();
    boolean isPost = isPost();
    String url = m_url;
    URI uri;
    if (baseURL != null && !url.contains("://")) {
        if (url.startsWith("/") && baseURL.endsWith("/")) {
            url = baseURL + url.substring(1);
        } else {
            url = baseURL + url;
        }
    }
    if (m_client == null) {
        if (BuildConfig.DEBUG) {
            Log.d(TAG, "new m_client");
        }
        try {
            m_client = HttpClients.custom().setKeepAliveStrategy(new DefaultConnectionKeepAliveStrategy()).setDefaultCookieStore(cookieStore).build();
        } catch (Exception e) {
            Log.w(TAG, e.toString());
        }
    }
    if (BuildConfig.DEBUG) {
        Log.d(TAG, "m_client ready");
    }
    m_started = true;
    if (info == null || info.getState() == NetworkInfo.State.DISCONNECTED) {
        onFailure();
        if (BuildConfig.DEBUG) {
            Log.d(TAG, "No network connection");
        }
        return false;
    }
    try {
        uri = URI.create(url);
    } catch (Exception e) {
        Log.w(TAG, "Unable to parse URL (" + url + ")");
        onFailure();
        return false;
    }
    for (int i = 0; i < RETRY_COUNT && !m_cancelled; i++) {
        CloseableHttpResponse response = null;
        HttpUriRequestBase request;
        if (isPost) {
            HttpPost postRequest = new HttpPost(uri);
            request = postRequest;
            if (m_file != null || (extraParameters != null && extraParameters.size() > 0) || (m_parameters != null && m_parameters.size() > 0)) {
                List<NameValuePair> postData = new ArrayList<NameValuePair>(((extraParameters != null) ? extraParameters.size() : 0) + ((m_parameters != null) ? m_parameters.size() : 0));
                if (m_parameters != null) {
                    for (Map.Entry<String, String> entry : m_parameters.entrySet()) {
                        postData.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
                    }
                }
                if (extraParameters != null) {
                    for (Map.Entry<String, String> entry : extraParameters.entrySet()) {
                        postData.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
                    }
                }
                try {
                    StringBuilder strData = new StringBuilder();
                    String separator = "";
                    MultipartEntityBuilder builder = MultipartEntityBuilder.create();
                    builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
                    if (m_file != null) {
                        Log.d(TAG, "Adding file to post");
                        for (NameValuePair pair : postData) {
                            StringBody stringBody1 = new StringBody(pair.getValue(), ContentType.MULTIPART_FORM_DATA);
                            builder.addPart(pair.getName(), stringBody1);
                            strData.append(separator);
                            strData.append(pair.toString());
                            separator = "&";
                        }
                        FileBody fileBody = new FileBody(m_file, ContentType.DEFAULT_BINARY);
                        builder.addPart("original", fileBody);
                        HttpEntity entity = builder.build();
                        postRequest.setEntity(entity);
                    } else {
                        UrlEncodedFormEntity entity = new UrlEncodedFormEntity(postData);
                        postRequest.setEntity(entity);
                        for (NameValuePair pair : postData) {
                            strData.append(separator);
                            strData.append(pair.toString());
                            separator = "&";
                        }
                    }
                    if (BuildConfig.DEBUG) {
                        Log.d(TAG, strData.toString());
                    }
                } catch (Exception e) {
                    Log.d(TAG, "UTF8 is not supported");
                }
            }
        } else if ((extraParameters != null && extraParameters.size() > 0) || (m_parameters != null && m_parameters.size() > 0)) {
            Uri.Builder uriBuilder = Uri.parse(m_url).buildUpon();
            if (m_parameters != null) {
                for (Map.Entry<String, String> entry : m_parameters.entrySet()) {
                    uriBuilder.appendQueryParameter(entry.getKey(), entry.getValue());
                }
            }
            if (extraParameters != null) {
                for (Map.Entry<String, String> entry : extraParameters.entrySet()) {
                    uriBuilder.appendQueryParameter(entry.getKey(), entry.getValue());
                }
            }
            request = new HttpGet(URI.create(uriBuilder.build().toString()));
        } else {
            request = new HttpGet(uri);
        }
        request.setHeader("Accept-Encoding", CONTENT_ENCODING_GZIP);
        try {
            String encoding = null;
            HttpEntity entity;
            if (BuildConfig.DEBUG) {
                Log.e(TAG, "Retry count:" + i);
                Log.e(TAG, ((isPost) ? "POST: " : "GET: ") + request.toString());
                Log.e(TAG, "Cookies before: " + cookieStore.getCookies().toString());
            }
            response = m_client.execute(request);
            if ((entity = response.getEntity()) != null) {
                encoding = entity.getContentEncoding();
            }
            try {
                onResponse(response.getCode(), (encoding != null && CONTENT_ENCODING_GZIP.equals(encoding)) ? new GZIPInputStream(entity.getContent()) : entity.getContent());
                Log.e(TAG, "responseCode: " + response.getCode());
                Log.e(TAG, "Cookies after: " + cookieStore.getCookies().toString());
                List<Cookie> cookies = cookieStore.getCookies();
                String session_id = null;
                for (int n = 0; n < cookies.size(); n++) {
                    if (cookies.get(n).getName().equals("sessionid")) {
                        Log.d(TAG, "Cookie :" + cookies.get(n).getName() + "; value " + cookies.get(n).getValue());
                        session_id = cookies.get(n).getValue();
                    }
                }
                // If no session_id in response then kill login
                if (session_id == null) {
                    Log.e(TAG, "No session_id in response cookie");
                    m_settings.setSession(null);
                }
            } catch (ApiException e) {
                Crashlytics.log(e.toString());
                Crashlytics.setString("URL", url);
                if (m_parameters != null && !m_parameters.isEmpty()) {
                    Crashlytics.setString("params", new JSONObject(m_parameters).toString());
                }
                Crashlytics.logException(e);
            }
            response.close();
            return true;
        } catch (IOException e) {
            if (BuildConfig.DEBUG) {
                Log.w(TAG, "Network error", e);
            }
            Crashlytics.log(e.toString());
            Crashlytics.setString("URL", url);
            Crashlytics.logException(e);
            try {
                HttpEntity entity = response.getEntity();
                entity.getContent().close();
            } catch (Exception e1) {
            }
            request.abort();
            try {
                Thread.sleep(RETRY_INTERVAL);
            } catch (InterruptedException e1) {
            }
        }
    }
    return true;
}
Also used : HttpPost(org.apache.hc.client5.http.classic.methods.HttpPost) MultipartEntityBuilder(org.apache.hc.client5.http.entity.mime.MultipartEntityBuilder) HttpEntity(org.apache.hc.core5.http.HttpEntity) ConnectivityManager(android.net.ConnectivityManager) MultipartEntityBuilder(org.apache.hc.client5.http.entity.mime.MultipartEntityBuilder) HttpGet(org.apache.hc.client5.http.classic.methods.HttpGet) ArrayList(java.util.ArrayList) URI(java.net.URI) GZIPInputStream(java.util.zip.GZIPInputStream) DefaultConnectionKeepAliveStrategy(org.apache.hc.client5.http.impl.DefaultConnectionKeepAliveStrategy) BasicNameValuePair(org.apache.hc.core5.http.message.BasicNameValuePair) CloseableHttpResponse(org.apache.hc.client5.http.impl.classic.CloseableHttpResponse) Cookie(org.apache.hc.client5.http.cookie.Cookie) BasicNameValuePair(org.apache.hc.core5.http.message.BasicNameValuePair) NameValuePair(org.apache.hc.core5.http.NameValuePair) HttpUriRequestBase(org.apache.hc.client5.http.classic.methods.HttpUriRequestBase) FileBody(org.apache.hc.client5.http.entity.mime.FileBody) NetworkInfo(android.net.NetworkInfo) UrlEncodedFormEntity(org.apache.hc.client5.http.entity.UrlEncodedFormEntity) IOException(java.io.IOException) IOException(java.io.IOException) ApiException(ee.ajapaik.android.exception.ApiException) JSONObject(org.json.JSONObject) StringBody(org.apache.hc.client5.http.entity.mime.StringBody) Map(java.util.Map) ApiException(ee.ajapaik.android.exception.ApiException)

Example 2 with ApiException

use of ee.ajapaik.android.exception.ApiException in project ajapaik-android-app by Ajapaik.

the class WebAction method onResponse.

@Override
protected void onResponse(int statusCode, InputStream stream) throws ApiException {
    boolean isParsableObject = false;
    if ((statusCode == HTTP_STATUS_OK || statusCode == HTTP_STATUS_FORBIDDEN || statusCode == HTTP_STATUS_INTERNAL_SERVER_ERROR) && stream != null) {
        JsonElement element = new JsonParser().parse(new JsonReader(new InputStreamReader(stream, StandardCharsets.UTF_8)));
        if (element.isJsonObject()) {
            JsonObject attributes = element.getAsJsonObject();
            JsonPrimitive error = attributes.getAsJsonPrimitive(KEY_ERROR);
            if (error != null) {
                if (error.isNumber()) {
                    m_status = Status.parse(error.getAsInt());
                } else if (error.isString()) {
                    m_status = Status.parse(error.getAsString());
                } else {
                    m_status = Status.UNKNOWN;
                }
            } else {
                m_status = Status.NONE;
            }
            if (m_status != Status.NONE) {
                throw new ApiException(element);
            }
            isParsableObject = isParsableObject(attributes);
            if (isParsableObject) {
                m_object = parseObject(attributes);
            }
        }
    } else {
        m_status = Status.CONNECTION;
        if (stream != null) {
            try {
                stream.close();
            } catch (IOException e) {
                Log.w(TAG, "", e);
            }
        }
    }
    if (m_status == Status.NONE && m_object == null && m_creator != null && isParsableObject) {
        m_status = Status.INVALID_DATA;
    }
}
Also used : InputStreamReader(java.io.InputStreamReader) JsonPrimitive(com.google.gson.JsonPrimitive) JsonElement(com.google.gson.JsonElement) JsonReader(com.google.gson.stream.JsonReader) JsonObject(com.google.gson.JsonObject) IOException(java.io.IOException) JsonParser(com.google.gson.JsonParser) ApiException(ee.ajapaik.android.exception.ApiException)

Aggregations

ApiException (ee.ajapaik.android.exception.ApiException)2 IOException (java.io.IOException)2 ConnectivityManager (android.net.ConnectivityManager)1 NetworkInfo (android.net.NetworkInfo)1 JsonElement (com.google.gson.JsonElement)1 JsonObject (com.google.gson.JsonObject)1 JsonParser (com.google.gson.JsonParser)1 JsonPrimitive (com.google.gson.JsonPrimitive)1 JsonReader (com.google.gson.stream.JsonReader)1 InputStreamReader (java.io.InputStreamReader)1 URI (java.net.URI)1 ArrayList (java.util.ArrayList)1 Map (java.util.Map)1 GZIPInputStream (java.util.zip.GZIPInputStream)1 HttpGet (org.apache.hc.client5.http.classic.methods.HttpGet)1 HttpPost (org.apache.hc.client5.http.classic.methods.HttpPost)1 HttpUriRequestBase (org.apache.hc.client5.http.classic.methods.HttpUriRequestBase)1 Cookie (org.apache.hc.client5.http.cookie.Cookie)1 UrlEncodedFormEntity (org.apache.hc.client5.http.entity.UrlEncodedFormEntity)1 FileBody (org.apache.hc.client5.http.entity.mime.FileBody)1