Custom-Async-Http-Client in Android

Benutze ich https://github.com/loopj/android-async-http aber ich denke, dies kann angewendet werden, um eine Asynchrone Aufgabe (einheimische)

AsyncHttpClient client = new AsyncHttpClient();
client.get("http://www.google.com", new AsyncHttpResponseHandler() {

    @Override
    public void onStart() {
        //called before request is started
       //Some debugging code here
    }

    @Override
    public void onSuccess(int statusCode, Header[] headers, byte[] response) {
        //called when response HTTP status is "200 OK"
        //here is the interesting part
    }

    @Override
    public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
        //called when response HTTP status is "4XX" (eg. 401, 403, 404)
         //Some debugging code here, show retry dialog, feedback etc. 
    }

    @Override
    public void onRetry(int retryNo) {
         //Some debugging code here-------

    }
});

Ich benutze es eine Menge in viele separate Klassen. Die onStart, onFailure und onRetry sind überall die gleichen, nur kopieren und einfügen, nur die onSuccess ist anders.

Ich will meinen code so sauber wie möglich und wiederverwenden, was ich schon geschrieben hab, also meine Frage ist, wie Mach ich das Brauch, in einem separaten "Datei", und einfach wiederverwenden. Ich brauche nur die "OnSuccess" - Funktion. Danke

---------------------------------------

LÖSUNG für GET & POST (Dank furkan3ayraktar)

1. Datei RequestListener

package com.classicharmony.krakenmessages.utils.AsyncHttp;
import org.apache.http.Header;
public interface RequestListener {
    public void onSuccess(int statusCode, Header[] headers, byte[] response);
}

2. Datei RequestHandler

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.util.Log;


import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;

import org.apache.http.Header;
import org.apache.http.entity.StringEntity;

import java.io.UnsupportedEncodingException;

public class RequestHandler {

    private static RequestHandler instance;

    private AsyncHttpClient client;
    private static final boolean SHOW_DEBUG_ALERT_DIALOG = true;

    private RequestHandler() {
        client = new AsyncHttpClient();

    }

    public static RequestHandler getInstance() {
        if (instance == null) {
            instance = new RequestHandler();
        }
        return instance;
    }


    public void make_get_Request(final Context context, final String url, final RequestListener listener) {
        client.get(url, new AsyncHttpResponseHandler() {

            @Override
            public void onStart() {
                Log.v("▒▒▒▒▒▒▒ GET ", url);
            }

            @Override
            public void onSuccess(int statusCode, Header[] headers, byte[] response) {
                listener.onSuccess(statusCode, headers, response);
            }

            @Override
            public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
                Log.e("▒▒▒▒▒▒▒ GET FAILED ", url);
                Log.e("▒▒▒▒▒▒▒ GET FAILED ", e.getLocalizedMessage());

                if (DUtils.isDebuggable(context) && SHOW_DEBUG_ALERT_DIALOG) {
                    AlertDialog.Builder builder = new AlertDialog.Builder(context);
                    builder.setTitle("▒▒▒▒▒ ERROR ▒▒▒▒▒");
                    String error_msg;
                    if (errorResponse != null) {
                        try {
                            error_msg = String.valueOf(new String(errorResponse, "UTF-8"));
                        } catch (UnsupportedEncodingException e1) {
                            error_msg = e.getLocalizedMessage();
                        }
                    } else {
                        error_msg = e.getLocalizedMessage();
                    }

                    builder.setMessage(context.getClass().getSimpleName() + " -> " + error_msg)
                            .setCancelable(true)
                            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int id) {
                                    dialog.dismiss();
                                }
                            });
                    AlertDialog alert = builder.create();
                    alert.show();
                }
            }

            @Override
            public void onRetry(int retryNo) {
                Log.e("▒▒▒▒▒▒▒ RETRYING ", "....." + String.valueOf(retryNo));

            }
        });
    }

    public void make_post_Request(final Context context, final StringEntity entity, final String url, final RequestListener listener) {
        client.post(context, url, entity, "application/json", new AsyncHttpResponseHandler() {

            @Override
            public void onStart() {
                Log.v("▒▒▒▒▒▒▒ POST ", url);
            }

            @Override
            public void onSuccess(int statusCode, Header[] headers, byte[] response) {
                listener.onSuccess(statusCode, headers, response);
            }

            @Override
            public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
                Log.e("▒▒▒▒▒▒▒ POST FAILED ", url);
                Log.e("▒▒▒▒▒▒▒ POST FAILED ", context.getClass().getSimpleName() + " -> " + e.getLocalizedMessage());


                if (DUtils.isDebuggable(context) && SHOW_DEBUG_ALERT_DIALOG) {
                    AlertDialog.Builder builder = new AlertDialog.Builder(context);
                    builder.setTitle("▒▒▒▒▒ ERROR ▒▒▒▒▒");
                    String error_msg;
                    if (errorResponse != null) {
                        try {
                            error_msg = String.valueOf(new String(errorResponse, "UTF-8"));
                        } catch (UnsupportedEncodingException e1) {
                            error_msg = e.getLocalizedMessage();
                        }
                    } else {
                        error_msg = e.getLocalizedMessage();
                    }

                    builder.setMessage(context.getClass().getSimpleName() + " -> " + error_msg)
                            .setCancelable(true)
                            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int id) {
                                    dialog.dismiss();
                                }
                            });
                    AlertDialog alert = builder.create();
                    alert.show();
                }

            }

            @Override
            public void onRetry(int retryNo) {
                Log.e("▒▒▒▒▒▒▒ RETRYING ", "....." + String.valueOf(retryNo));
            }
        });
    }

}

3. "utility", um das Dialogfeld oder nicht.

public static boolean isDebuggable(Context ctx) {
    boolean debuggable = false;
    X500Principal DEBUG_DN = new X500Principal("CN=Android Debug,O=Android,C=US");
    try {
        PackageInfo pinfo = ctx.getPackageManager().getPackageInfo(ctx.getPackageName(), PackageManager.GET_SIGNATURES);
        Signature signatures[] = pinfo.signatures;

        CertificateFactory cf = CertificateFactory.getInstance("X.509");

        for (int i = 0; i < signatures.length; i++) {
            ByteArrayInputStream stream = new ByteArrayInputStream(signatures[i].toByteArray());
            X509Certificate cert = (X509Certificate) cf.generateCertificate(stream);
            debuggable = cert.getSubjectX500Principal().equals(DEBUG_DN);
            if (debuggable)
                break;
        }
    } catch (PackageManager.NameNotFoundException e) {
        //debuggable variable will remain false
    } catch (CertificateException e) {
        //debuggable variable will remain false
    }
    return debuggable;
}

Beispiel wie man es nennen für die POST:

JSONObject jsonParams = new JSONObject();
        StringEntity entity;


        try {
            jsonParams.put("from_user_id", "dan");
            jsonParams.put("to_user_id", "vili");
            jsonParams.put("message", "hello world");
            entity = new StringEntity(jsonParams.toString());
        } catch (JSONException e) {
            e.printStackTrace();
            return;
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            return;
        }

        RequestHandler handler = RequestHandler.getInstance();
        handler.make_post_Request(getActivity(), entity, "http://your_server/api/etc", new RequestListener() {
            @Override
            public void onSuccess(int statusCode, Header[] headers, byte[] response) {
                try {
                    String server_response = String.valueOf(new String(response, "UTF-8"));
                    Log.v("Server response",server_response);
                } catch (UnsupportedEncodingException e1) {

                }
            }
        });
  • Vielen Dank... Es funktioniert wie ein Charme.. vielen Dank.. Durch die Art und Weise es bearbeitet wurde im Jahr 2014..das muss sein, altmodisch. Bitte sagen Sie mir, wenn Sie etwas jetzt oder gleich. Nochmals vielen Dank.
  • naja.. es gibt neuere Möglichkeiten... leichter.... aber wenn es funktioniert, dann verwenden Sie es. testen Sie es auf einigen Handys und Versionen, und wenn es bekommt den job getan es so belassen.
  • AYE.. Frage War halt.. Einfachste Weg, ich fand heraus, bis zu dem Datum.
InformationsquelleAutor OWADVL | 2014-10-21
Schreibe einen Kommentar