MCPcopy Index your code
hub / github.com/amitshekhariitbhu/Fast-Android-Networking

github.com/amitshekhariitbhu/Fast-Android-Networking @1.0.4 sqlite

repository ↗ · DeepWiki ↗ · release 1.0.4 ↗
1,321 symbols 7,364 edges 130 files 188 documented · 14%
README

Fast Android Networking Library

About Fast Android Networking Library

Fast Android Networking Library is a powerful library for doing any type of networking in Android applications which is made on top of OkHttp Networking Layer.

Fast Android Networking Library takes care of each and everything. So you don't have to do anything, just make request and listen for the response.

Why use Fast Android Networking ?

  • Recent removal of HttpClient in Android Marshmallow(Android M) made other networking libraries obsolete.
  • No other single library does each and everything like making request, downloading any type of file, uploading file, loading image from network in ImageView, etc. There are some libraries but they are outdated.
  • No other library provides simple interface for doing all types of things in networking like setting priority, cancelling, etc.
  • As it uses Okio , No more GC overhead in android applications. Okio is made to handle GC overhead while allocating memory. Okio does some clever things to save CPU and memory.
  • It uses OkHttp , more importantly it supports HTTP/2.

About me

Hi, I am Amit Shekhar, Co-Founder @ Outcome School • IIT 2010-14 • I have taught and mentored many developers, and their efforts landed them high-paying tech jobs, helped many tech companies in solving their unique problems, and created many open-source libraries being used by top companies. I am passionate about sharing knowledge through open-source, blogs, and videos.

You can connect with me on:

Outcome School Blog - High-quality content to learn Android concepts.

RxJava2 Support, check here.

Find this project useful ? :heart:

  • Support it by clicking the :star: button on the upper right of this page. :v:

For full details, visit the documentation on our web site :

Requirements

Fast Android Networking Library can be included in any Android application.

Fast Android Networking Library supports Android 2.3 (Gingerbread) and later.

Using Fast Android Networking Library in your application

Add this in your settings.gradle:

maven { url 'https://jitpack.io' }

If you are using settings.gradle.kts, add the following:

maven { setUrl("https://jitpack.io") }

Add this in your build.gradle

implementation 'com.github.amitshekhariitbhu.Fast-Android-Networking:android-networking:1.0.4'

If you are using build.gradle.kts, add the following:

implementation("com.github.amitshekhariitbhu.Fast-Android-Networking:android-networking:1.0.4")

Do not forget to add internet permission in manifest if already not present

<uses-permission android:name="android.permission.INTERNET" />

Then initialize it in onCreate() Method of application class :

AndroidNetworking.initialize(getApplicationContext());

Initializing it with some customization , as it uses OkHttp as networking layer, you can pass custom okHttpClient while initializing it.

// Adding an Network Interceptor for Debugging purpose :
OkHttpClient okHttpClient = new OkHttpClient() .newBuilder()
                        .addNetworkInterceptor(new StethoInterceptor())
                        .build();
AndroidNetworking.initialize(getApplicationContext(),okHttpClient);                        

Using the Fast Android Networking with Jackson Parser

Add this in your build.gradle

implementation 'com.github.amitshekhariitbhu.Fast-Android-Networking:jackson-android-networking:1.0.4'

If you are using build.gradle.kts, add the following:

implementation("com.github.amitshekhariitbhu.Fast-Android-Networking:jackson-android-networking:1.0.4")
// Then set the JacksonParserFactory like below
AndroidNetworking.setParserFactory(new JacksonParserFactory());

Making a GET Request

AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAllUsers/{pageNumber}")
                 .addPathParameter("pageNumber", "0")
                 .addQueryParameter("limit", "3")
                 .addHeaders("token", "1234")
                 .setTag("test")
                 .setPriority(Priority.LOW)
                 .build()
                 .getAsJSONArray(new JSONArrayRequestListener() {
                    @Override
                    public void onResponse(JSONArray response) {
                      // do anything with response
                    }
                    @Override
                    public void onError(ANError error) {
                      // handle error
                    }
                });                

Making a POST Request

AndroidNetworking.post("https://fierce-cove-29863.herokuapp.com/createAnUser")
                 .addBodyParameter("firstname", "Amit")
                 .addBodyParameter("lastname", "Shekhar")
                 .setTag("test")
                 .setPriority(Priority.MEDIUM)
                 .build()
                 .getAsJSONObject(new JSONObjectRequestListener() {
                    @Override
                    public void onResponse(JSONObject response) {
                      // do anything with response
                    }
                    @Override
                    public void onError(ANError error) {
                      // handle error
                    }
                });

You can also post java object, json, file, etc in POST request like this.

User user = new User();
user.firstname = "Amit";
user.lastname = "Shekhar";

AndroidNetworking.post("https://fierce-cove-29863.herokuapp.com/createUser")
                 .addBodyParameter(user) // posting java object
                 .setTag("test")
                 .setPriority(Priority.MEDIUM)
                 .build()
                 .getAsJSONArray(new JSONArrayRequestListener() {
                    @Override
                    public void onResponse(JSONArray response) {
                      // do anything with response
                    }
                    @Override
                    public void onError(ANError error) {
                      // handle error
                    }
                });


JSONObject jsonObject = new JSONObject();
try {
    jsonObject.put("firstname", "Amit");
    jsonObject.put("lastname", "Shekhar");
} catch (JSONException e) {
  e.printStackTrace();
}

AndroidNetworking.post("https://fierce-cove-29863.herokuapp.com/createUser")
                 .addJSONObjectBody(jsonObject) // posting json
                 .setTag("test")
                 .setPriority(Priority.MEDIUM)
                 .build()
                 .getAsJSONArray(new JSONArrayRequestListener() {
                    @Override
                    public void onResponse(JSONArray response) {
                      // do anything with response
                    }
                    @Override
                    public void onError(ANError error) {
                      // handle error
                    }
                });

AndroidNetworking.post("https://fierce-cove-29863.herokuapp.com/postFile")
                 .addFileBody(file) // posting any type of file
                 .setTag("test")
                 .setPriority(Priority.MEDIUM)
                 .build()
                 .getAsJSONObject(new JSONObjectRequestListener() {
                    @Override
                    public void onResponse(JSONObject response) {
                      // do anything with response
                    }
                    @Override
                    public void onError(ANError error) {
                      // handle error
                    }
                });               

Using it with your own JAVA Object - JSON Parser

/*--------------Example One -> Getting the userList----------------*/
AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAllUsers/{pageNumber}")
                .addPathParameter("pageNumber", "0")
                .addQueryParameter("limit", "3")
                .setTag(this)
                .setPriority(Priority.LOW)
                .build()
                .getAsObjectList(User.class, new ParsedRequestListener<List<User>>() {
                    @Override
                    public void onResponse(List<User> users) {
                      // do anything with response
                      Log.d(TAG, "userList size : " + users.size());
                      for (User user : users) {
                        Log.d(TAG, "id : " + user.id);
                        Log.d(TAG, "firstname : " + user.firstname);
                        Log.d(TAG, "lastname : " + user.lastname);
                      }
                    }
                    @Override
                    public void onError(ANError anError) {
                     // handle error
                    }
                });
/*--------------Example Two -> Getting an user----------------*/
AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAnUserDetail/{userId}")
                .addPathParameter("userId", "1")
                .setTag(this)
                .setPriority(Priority.LOW)
                .build()
                .getAsObject(User.class, new ParsedRequestListener<User>() {
                     @Override
                     public void onResponse(User user) {
                        // do anything with response
                        Log.d(TAG, "id : " + user.id);
                        Log.d(TAG, "firstname : " + user.firstname);
                        Log.d(TAG, "lastname : " + user.lastname);
                     }
                     @Override
                     public void onError(ANError anError) {
                        // handle error
                     }
                 }); 
/*-- Note : YourObject.class, getAsObject and getAsObjectList are important here --*/              

Downloading a file from server

AndroidNetworking.download(url,dirPath,fileName)
                 .setTag("downloadTest")
                 .setPriority(Priority.MEDIUM)
                 .build()
                 .setDownloadProgressListener(new DownloadProgressListener() {
                    @Override
                    public void onProgress(long bytesDownloaded, long totalBytes) {
                      // do anything with progress  
                    }
                 })
                 .startDownload(new DownloadListener() {
                    @Override
                    public void onDownloadComplete() {
                      // do anything after completion
                    }
                    @Override
                    public void onError(ANError error) {
                      // handle error    
                    }
                });                 

Uploading a file to server

AndroidNetworking.upload(url)
                 .addMultipartFile("image",file)    
                 .addMultipartParameter("key","value")
                 .setTag("uploadTest")
                 .setPriority(Priority.HIGH)
                 .build()
                 .setUploadProgressListener(new UploadProgressListener() {
                    @Override
                    public void onProgress(long bytesUploaded, long totalBytes) {
                      // do anything with progress 
                    }
                 })
                 .getAsJSONObject(new JSONObjectRequestListener() {
                    @Override
                    public void onResponse(JSONObject response) {
                      // do anything with response                
                    }
                    @Override
                    public void onError(ANError error) {
                      // handle error 
                    }
                 }); 

Getting Response and completion in an another thread executor

(Note : Error and Progress will always be returned in main thread of application) ```java AndroidNetworking.upload(url) .addMultipartFile("image",file)
.addMultipartParameter("key","value")
.setTag("uploadTest") .setPriority(Priority.HIGH) .build() .setExecutor(Executors.newSingleThreadExecutor()) // setting an executor to get response or completion on that executor thread .setUploadProgressListener(new UploadProgressListener() { @Override public void onProgress(long bytesUploaded, long totalBytes) { // do anything with progress } }) .getAsJSONObject(new JSONObjectRequestListener() { @Override public void onResponse(JSONObject response) { // below code will be executed in the executor provided // do anything with response
} @Override public void onError(ANError error) { // handle error

Extension points exported contracts — how you extend this code

RequestBuilder (Interface)
Created by amitshekhar on 26/03/16. [8 implementers]
android-networking/src/main/java/com/androidnetworking/common/RequestBuilder.java
BitmapRequestListener (Interface)
Created by amitshekhar on 23/05/16. [16 implementers]
android-networking/src/main/java/com/androidnetworking/interfaces/BitmapRequestListener.java
OkHttpResponseAndStringRequestListener (Interface)
Created by amitshekhar on 23/05/16. [16 implementers]
android-networking/src/main/java/com/androidnetworking/interfaces/OkHttpResponseAndStringRequestListener.java
AnalyticsListener (Interface)
Created by amitshekhar on 31/05/16. [7 implementers]
android-networking/src/main/java/com/androidnetworking/interfaces/AnalyticsListener.java
OkHttpResponseListener (Interface)
Created by amitshekhar on 22/08/16. [16 implementers]
android-networking/src/main/java/com/androidnetworking/interfaces/OkHttpResponseListener.java

Core symbols most depended-on inside this repo

get
called by 292
android-networking/src/main/java/com/androidnetworking/cache/LruCache.java
toString
called by 269
android-networking/src/main/java/com/androidnetworking/cache/LruCache.java
get
called by 263
rx2-android-networking/src/main/java/com/rx2androidnetworking/Rx2AndroidNetworking.java
build
called by 227
android-networking/src/main/java/com/androidnetworking/common/ANRequest.java
addBodyParameter
called by 156
android-networking/src/main/java/com/androidnetworking/common/ANRequest.java
getErrorDetail
called by 153
android-networking/src/main/java/com/androidnetworking/error/ANError.java
getErrorCode
called by 153
android-networking/src/main/java/com/androidnetworking/error/ANError.java
getErrorBody
called by 120
android-networking/src/main/java/com/androidnetworking/error/ANError.java

Shape

Method 1,143
Class 149
Interface 25
Enum 4

Languages

Java100%

Modules by API surface

android-networking/src/main/java/com/androidnetworking/common/ANRequest.java174 symbols
rx2-android-networking/src/main/java/com/rx2androidnetworking/Rx2ANRequest.java66 symbols
rx-android-networking/src/main/java/com/rxandroidnetworking/RxANRequest.java50 symbols
android-networking/src/main/java/com/androidnetworking/internal/ANImageLoader.java38 symbols
app/src/main/java/com/networking/OkHttpResponseTestActivity.java31 symbols
app/src/main/java/com/networking/ApiTestActivity.java31 symbols
android-networking/src/main/java/com/androidnetworking/AndroidNetworking.java29 symbols
rx2sampleapp/src/main/java/com/rx2sampleapp/Rx2OperatorExampleActivity.java27 symbols
rxsampleapp/src/main/java/com/rxsampleapp/RxOperatorExampleActivity.java24 symbols
rx-android-networking/src/main/java/com/rxandroidnetworking/RxInternalNetworking.java23 symbols
app/src/main/java/com/networking/fragments/ImageGridFragment.java21 symbols
android-networking/src/main/java/com/androidnetworking/cache/LruCache.java21 symbols

For agents

$ claude mcp add Fast-Android-Networking \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact