Android Open Source - visiting-card-android Async Http Request






From Project

Back to project page visiting-card-android.

License

The source code is released under:

GNU General Public License

If you think the Android project visiting-card-android listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
    Android Asynchronous Http Client/*  w  ww. j  a  v  a2  s  .c o m*/
    Copyright (c) 2011 James Smith <james@loopj.com>
    http://loopj.com

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

        http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
*/

package com.loopj.android.http;

import android.util.Log;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpRequestRetryHandler;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.impl.client.AbstractHttpClient;
import org.apache.http.protocol.HttpContext;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.UnknownHostException;

/**
 * Internal class, representing the HttpRequest, done in asynchronous manner
 */
public class AsyncHttpRequest implements Runnable {
    private final AbstractHttpClient client;
    private final HttpContext context;
    private final HttpUriRequest request;
    private final ResponseHandlerInterface responseHandler;
    private int executionCount;
    private boolean isCancelled = false;
    private boolean cancelIsNotified = false;
    private boolean isFinished = false;

    public AsyncHttpRequest(AbstractHttpClient client, HttpContext context, HttpUriRequest request, ResponseHandlerInterface responseHandler) {
        this.client = client;
        this.context = context;
        this.request = request;
        this.responseHandler = responseHandler;
    }

    @Override
    public void run() {
        if (isCancelled()) {
            return;
        }

        if (responseHandler != null) {
            responseHandler.sendStartMessage();
        }

        if (isCancelled()) {
            return;
        }

        try {
            makeRequestWithRetries();
        } catch (IOException e) {
            if (!isCancelled() && responseHandler != null) {
                responseHandler.sendFailureMessage(0, null, null, e);
            } else {
                Log.e("AsyncHttpRequest", "makeRequestWithRetries returned error, but handler is null", e);
            }
        }

        if (isCancelled()) {
            return;
        }

        if (responseHandler != null) {
            responseHandler.sendFinishMessage();
        }

        isFinished = true;
    }

    private void makeRequest() throws IOException {
        if (isCancelled()) {
            return;
        }
        // Fixes #115
        if (request.getURI().getScheme() == null) {
            // subclass of IOException so processed in the caller
            throw new MalformedURLException("No valid URI scheme was provided");
        }

        HttpResponse response = client.execute(request, context);

        if (!isCancelled() && responseHandler != null) {
            responseHandler.sendResponseMessage(response);
        }
    }

    private void makeRequestWithRetries() throws IOException {
        boolean retry = true;
        IOException cause = null;
        HttpRequestRetryHandler retryHandler = client.getHttpRequestRetryHandler();
        try {
            while (retry) {
                try {
                    makeRequest();
                    return;
                } catch (UnknownHostException e) {
                    // switching between WI-FI and mobile data networks can cause a retry which then results in an UnknownHostException
                    // while the WI-FI is initialising. The retry logic will be invoked here, if this is NOT the first retry
                    // (to assist in genuine cases of unknown host) which seems better than outright failure
                    cause = new IOException("UnknownHostException exception: " + e.getMessage());
                    retry = (executionCount > 0) && retryHandler.retryRequest(cause, ++executionCount, context);
                } catch (NullPointerException e) {
                    // there's a bug in HttpClient 4.0.x that on some occasions causes
                    // DefaultRequestExecutor to throw an NPE, see
                    // http://code.google.com/p/android/issues/detail?id=5255
                    cause = new IOException("NPE in HttpClient: " + e.getMessage());
                    retry = retryHandler.retryRequest(cause, ++executionCount, context);
                } catch (IOException e) {
                    if (isCancelled()) {
                        // Eating exception, as the request was cancelled
                        return;
                    }
                    cause = e;
                    retry = retryHandler.retryRequest(cause, ++executionCount, context);
                }
                if (retry && (responseHandler != null)) {
                    responseHandler.sendRetryMessage(executionCount);
                }
            }
        } catch (Exception e) {
            // catch anything else to ensure failure message is propagated
            Log.e("AsyncHttpRequest", "Unhandled exception origin cause", e);
            cause = new IOException("Unhandled exception: " + e.getMessage());
        }

        // cleaned up to throw IOException
        throw (cause);
    }

    public boolean isCancelled() {
        if (isCancelled) {
            sendCancelNotification();
        }
        return isCancelled;
    }

    private synchronized void sendCancelNotification() {
        if (!isFinished && isCancelled && !cancelIsNotified) {
            cancelIsNotified = true;
            if (responseHandler != null)
                responseHandler.sendCancelMessage();
        }
    }

    public boolean isDone() {
        return isCancelled() || isFinished;
    }

    public boolean cancel(boolean mayInterruptIfRunning) {
        isCancelled = true;
        request.abort();
        return isCancelled();
    }
}




Java Source Code List

android.UnusedStub.java
com.loopj.android.http.AsyncHttpClient.java
com.loopj.android.http.AsyncHttpRequest.java
com.loopj.android.http.AsyncHttpResponseHandler.java
com.loopj.android.http.Base64DataException.java
com.loopj.android.http.Base64OutputStream.java
com.loopj.android.http.Base64.java
com.loopj.android.http.BaseJsonHttpResponseHandler.java
com.loopj.android.http.BinaryHttpResponseHandler.java
com.loopj.android.http.DataAsyncHttpResponseHandler.java
com.loopj.android.http.FileAsyncHttpResponseHandler.java
com.loopj.android.http.JsonHttpResponseHandler.java
com.loopj.android.http.JsonStreamerEntity.java
com.loopj.android.http.MyRedirectHandler.java
com.loopj.android.http.MySSLSocketFactory.java
com.loopj.android.http.PersistentCookieStore.java
com.loopj.android.http.PreemtiveAuthorizationHttpRequestInterceptor.java
com.loopj.android.http.RangeFileAsyncHttpResponseHandler.java
com.loopj.android.http.RequestHandle.java
com.loopj.android.http.RequestParams.java
com.loopj.android.http.ResponseHandlerInterface.java
com.loopj.android.http.RetryHandler.java
com.loopj.android.http.SaxAsyncHttpResponseHandler.java
com.loopj.android.http.SerializableCookie.java
com.loopj.android.http.SimpleMultipartEntity.java
com.loopj.android.http.SyncHttpClient.java
com.loopj.android.http.TextHttpResponseHandler.java
com.loopj.android.http.package-info.java
com.matrix.asynchttplibrary.AsyncH.java
com.matrix.asynchttplibrary.annotation.AsyncHAnnotation.java
com.matrix.asynchttplibrary.annotation.AsyncHIgnoreParam.java
com.matrix.asynchttplibrary.logger.ALogger.java
com.matrix.asynchttplibrary.model.CallProperties.java
com.matrix.asynchttplibrary.parser.AsyncParser.java
com.matrix.asynchttplibrary.request.AsyncRequestHeader.java
com.matrix.asynchttplibrary.request.AsyncRequestParam.java
com.matrix.asynchttplibrary.response.AsyncResponseBody.java
com.matrix.asynchttplibrary.security.CustomSSLSocketFactory.java
com.matrix.asynchttplibrary.util.AsyncUtil.java
com.matrix.visitingcard.AllVCFragment.java
com.matrix.visitingcard.CreateVCActivity.java
com.matrix.visitingcard.ListMyVCFragment.java
com.matrix.visitingcard.ListMyVCRActivity.java
com.matrix.visitingcard.ListOfVCTFragment.java
com.matrix.visitingcard.ResideActivity.java
com.matrix.visitingcard.SelectVCActivity.java
com.matrix.visitingcard.ShareVCDialogFragment.java
com.matrix.visitingcard.SignUpFormActivity.java
com.matrix.visitingcard.SplashScreenActivity.java
com.matrix.visitingcard.VCRCreateDialogFragment.java
com.matrix.visitingcard.ViewVC.java
com.matrix.visitingcard.adapter.SupportArrayAdapter.java
com.matrix.visitingcard.adapter.VCAdapter.java
com.matrix.visitingcard.adapter.VCRAdapter.java
com.matrix.visitingcard.adapter.VCTAdapter.java
com.matrix.visitingcard.constant.Constants.java
com.matrix.visitingcard.gcm.GcmBroadcastReceiver.java
com.matrix.visitingcard.gcm.GcmIntentService.java
com.matrix.visitingcard.http.AsyncHttp.java
com.matrix.visitingcard.http.ProgressJSONResponseCallBack.java
com.matrix.visitingcard.http.ProgressJsonHttpResponseHandler.java
com.matrix.visitingcard.http.UIReloadCallBack.java
com.matrix.visitingcard.http.parser.Parser.java
com.matrix.visitingcard.http.request.AcceptVCRResquest.java
com.matrix.visitingcard.http.request.ShareVCResquest.java
com.matrix.visitingcard.http.request.SocialLoginRequest.java
com.matrix.visitingcard.http.response.FriendsVC.java
com.matrix.visitingcard.http.response.MyVC.java
com.matrix.visitingcard.http.response.VCR.java
com.matrix.visitingcard.http.response.VCTResponse.java
com.matrix.visitingcard.http.response.VC.java
com.matrix.visitingcard.logger.VLogger.java
com.matrix.visitingcard.user.User.java
com.matrix.visitingcard.util.CustomImageDownaloder.java
com.matrix.visitingcard.util.FileUtil.java
com.matrix.visitingcard.util.SharedPrefs.java
com.matrix.visitingcard.util.Util.java
com.matrix.visitingcard.util.VisitingCardApp.java
com.special.ResideMenu.ResideMenuItem.java
com.special.ResideMenu.ResideMenu.java
com.special.ResideMenu.TouchDisableView.java