master 508e7c5b4338 cached
203 files
1.0 MB
225.9k tokens
1262 symbols
1 requests
Download .txt
Showing preview only (1,130K chars total). Download the full file or copy to clipboard to get everything.
Repository: amitshekhariitbhu/AndroidNetworking
Branch: master
Commit: 508e7c5b4338
Files: 203
Total size: 1.0 MB

Directory structure:
gitextract_9srekgqo/

├── .gitignore
├── .travis.yml
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── android-networking/
│   ├── .gitignore
│   ├── build.gradle
│   ├── proguard-rules.pro
│   └── src/
│       ├── androidTest/
│       │   ├── AndroidManifest.xml
│       │   └── java/
│       │       └── com/
│       │           └── androidnetworking/
│       │               ├── GetJSONApiTest.java
│       │               ├── GetObjectApiTest.java
│       │               ├── GetStringApiTest.java
│       │               ├── MultipartJSONApiTest.java
│       │               ├── MultipartObjectApiTest.java
│       │               ├── MultipartStringApiTest.java
│       │               ├── PostJSONApiTest.java
│       │               ├── PostObjectApiTest.java
│       │               ├── PostStringApiTest.java
│       │               └── model/
│       │                   └── User.java
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── androidnetworking/
│       │   │           ├── AndroidNetworking.java
│       │   │           ├── cache/
│       │   │           │   ├── LruBitmapCache.java
│       │   │           │   └── LruCache.java
│       │   │           ├── common/
│       │   │           │   ├── ANConstants.java
│       │   │           │   ├── ANRequest.java
│       │   │           │   ├── ANResponse.java
│       │   │           │   ├── ConnectionClassManager.java
│       │   │           │   ├── ConnectionQuality.java
│       │   │           │   ├── Method.java
│       │   │           │   ├── Priority.java
│       │   │           │   ├── RequestBuilder.java
│       │   │           │   ├── RequestType.java
│       │   │           │   └── ResponseType.java
│       │   │           ├── core/
│       │   │           │   ├── ANExecutor.java
│       │   │           │   ├── Core.java
│       │   │           │   ├── DefaultExecutorSupplier.java
│       │   │           │   ├── ExecutorSupplier.java
│       │   │           │   ├── MainThreadExecutor.java
│       │   │           │   └── PriorityThreadFactory.java
│       │   │           ├── error/
│       │   │           │   └── ANError.java
│       │   │           ├── gsonparserfactory/
│       │   │           │   ├── GsonParserFactory.java
│       │   │           │   ├── GsonRequestBodyParser.java
│       │   │           │   └── GsonResponseBodyParser.java
│       │   │           ├── interceptors/
│       │   │           │   ├── GzipRequestInterceptor.java
│       │   │           │   └── HttpLoggingInterceptor.java
│       │   │           ├── interfaces/
│       │   │           │   ├── AnalyticsListener.java
│       │   │           │   ├── BitmapRequestListener.java
│       │   │           │   ├── ConnectionQualityChangeListener.java
│       │   │           │   ├── DownloadListener.java
│       │   │           │   ├── DownloadProgressListener.java
│       │   │           │   ├── JSONArrayRequestListener.java
│       │   │           │   ├── JSONObjectRequestListener.java
│       │   │           │   ├── OkHttpResponseAndBitmapRequestListener.java
│       │   │           │   ├── OkHttpResponseAndJSONArrayRequestListener.java
│       │   │           │   ├── OkHttpResponseAndJSONObjectRequestListener.java
│       │   │           │   ├── OkHttpResponseAndParsedRequestListener.java
│       │   │           │   ├── OkHttpResponseAndStringRequestListener.java
│       │   │           │   ├── OkHttpResponseListener.java
│       │   │           │   ├── ParsedRequestListener.java
│       │   │           │   ├── Parser.java
│       │   │           │   ├── StringRequestListener.java
│       │   │           │   └── UploadProgressListener.java
│       │   │           ├── internal/
│       │   │           │   ├── ANImageLoader.java
│       │   │           │   ├── ANRequestQueue.java
│       │   │           │   ├── DownloadProgressHandler.java
│       │   │           │   ├── InternalNetworking.java
│       │   │           │   ├── InternalRunnable.java
│       │   │           │   ├── RequestProgressBody.java
│       │   │           │   ├── ResponseProgressBody.java
│       │   │           │   ├── SynchronousCall.java
│       │   │           │   └── UploadProgressHandler.java
│       │   │           ├── model/
│       │   │           │   ├── MultipartFileBody.java
│       │   │           │   ├── MultipartStringBody.java
│       │   │           │   └── Progress.java
│       │   │           ├── utils/
│       │   │           │   ├── ParseUtil.java
│       │   │           │   ├── SourceCloseUtil.java
│       │   │           │   └── Utils.java
│       │   │           └── widget/
│       │   │               └── ANImageView.java
│       │   └── res/
│       │       └── values/
│       │           └── strings.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── androidnetworking/
│                       └── ExampleUnitTest.java
├── app/
│   ├── .gitignore
│   ├── build.gradle
│   ├── proguard-rules.pro
│   └── src/
│       ├── androidTest/
│       │   └── java/
│       │       └── com/
│       │           └── androidnetworking/
│       │               └── ApplicationTest.java
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── networking/
│       │   │           ├── ApiEndPoint.java
│       │   │           ├── ApiTestActivity.java
│       │   │           ├── ImageGridActivity.java
│       │   │           ├── MainActivity.java
│       │   │           ├── MyApplication.java
│       │   │           ├── OkHttpResponseTestActivity.java
│       │   │           ├── WebSocketActivity.java
│       │   │           ├── fragments/
│       │   │           │   └── ImageGridFragment.java
│       │   │           ├── model/
│       │   │           │   └── User.java
│       │   │           ├── provider/
│       │   │           │   └── Images.java
│       │   │           └── utils/
│       │   │               └── Utils.java
│       │   └── res/
│       │       ├── drawable/
│       │       │   └── photogrid_list_selector.xml
│       │       ├── layout/
│       │       │   ├── activity_api_test.xml
│       │       │   ├── activity_main.xml
│       │       │   ├── activity_web_socket.xml
│       │       │   └── image_grid_fragment.xml
│       │       ├── values/
│       │       │   ├── colors.xml
│       │       │   ├── dimens.xml
│       │       │   ├── strings.xml
│       │       │   └── styles.xml
│       │       └── values-w820dp/
│       │           └── dimens.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── androidnetworking/
│                       └── ExampleUnitTest.java
├── build.gradle
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── jackson-android-networking/
│   ├── .gitignore
│   ├── build.gradle
│   ├── proguard-rules.pro
│   └── src/
│       ├── androidTest/
│       │   ├── AndroidManifest.xml
│       │   └── java/
│       │       └── com/
│       │           └── jacksonandroidnetworking/
│       │               ├── JacksonGetObjectApiTest.java
│       │               ├── JacksonPostObjectApiTest.java
│       │               └── model/
│       │                   └── User.java
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── jacksonandroidnetworking/
│       │   │           ├── JacksonParserFactory.java
│       │   │           ├── JacksonRequestBodyParser.java
│       │   │           └── JacksonResponseBodyParser.java
│       │   └── res/
│       │       └── values/
│       │           └── strings.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── jacksonandroidnetworking/
│                       └── ExampleUnitTest.java
├── rx-android-networking/
│   ├── .gitignore
│   ├── build.gradle
│   ├── proguard-rules.pro
│   └── src/
│       ├── androidTest/
│       │   └── java/
│       │       └── com/
│       │           └── rxandroidnetworking/
│       │               └── ApplicationTest.java
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── rxandroidnetworking/
│       │   │           ├── RxANRequest.java
│       │   │           ├── RxAndroidNetworking.java
│       │   │           └── RxInternalNetworking.java
│       │   └── res/
│       │       └── values/
│       │           └── strings.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── rxandroidnetworking/
│                       └── ExampleUnitTest.java
├── rx2-android-networking/
│   ├── .gitignore
│   ├── build.gradle
│   ├── proguard-rules.pro
│   └── src/
│       ├── androidTest/
│       │   ├── AndroidManifest.xml
│       │   └── java/
│       │       └── com/
│       │           └── rx2androidnetworking/
│       │               ├── Rx2GetJSONApiTest.java
│       │               ├── Rx2GetObjectApiTest.java
│       │               ├── Rx2GetStringApiTest.java
│       │               ├── Rx2MultipartJSONApiTest.java
│       │               ├── Rx2MultipartObjectApiTest.java
│       │               ├── Rx2MultipartStringApiTest.java
│       │               ├── Rx2PostJSONApiTest.java
│       │               ├── Rx2PostObjectApiTest.java
│       │               ├── Rx2PostStringApiTest.java
│       │               └── model/
│       │                   └── User.java
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── rx2androidnetworking/
│       │   │           ├── Rx2ANRequest.java
│       │   │           ├── Rx2AndroidNetworking.java
│       │   │           └── Rx2InternalNetworking.java
│       │   └── res/
│       │       └── values/
│       │           └── strings.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── rx2androidnetworking/
│                       └── ExampleUnitTest.java
├── rx2sampleapp/
│   ├── .gitignore
│   ├── build.gradle
│   ├── proguard-rules.pro
│   └── src/
│       ├── androidTest/
│       │   └── java/
│       │       └── com/
│       │           └── rx2sampleapp/
│       │               └── ExampleInstrumentedTest.java
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── rx2sampleapp/
│       │   │           ├── ApiEndPoint.java
│       │   │           ├── Rx2ApiTestActivity.java
│       │   │           ├── Rx2MyApplication.java
│       │   │           ├── Rx2OperatorExampleActivity.java
│       │   │           ├── SubscriptionActivity.java
│       │   │           ├── model/
│       │   │           │   ├── ApiUser.java
│       │   │           │   ├── User.java
│       │   │           │   └── UserDetail.java
│       │   │           └── utils/
│       │   │               └── Utils.java
│       │   └── res/
│       │       ├── layout/
│       │       │   ├── activity_rx_api_test.xml
│       │       │   ├── activity_rx_operator_example.xml
│       │       │   └── activity_subscription.xml
│       │       ├── values/
│       │       │   ├── colors.xml
│       │       │   ├── dimens.xml
│       │       │   ├── strings.xml
│       │       │   └── styles.xml
│       │       └── values-w820dp/
│       │           └── dimens.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── rx2sampleapp/
│                       └── ExampleUnitTest.java
├── rxsampleapp/
│   ├── .gitignore
│   ├── build.gradle
│   ├── proguard-rules.pro
│   └── src/
│       ├── androidTest/
│       │   └── java/
│       │       └── com/
│       │           └── rxsampleapp/
│       │               └── ApplicationTest.java
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── rxsampleapp/
│       │   │           ├── ApiEndPoint.java
│       │   │           ├── RxApiTestActivity.java
│       │   │           ├── RxMyApplication.java
│       │   │           ├── RxOperatorExampleActivity.java
│       │   │           ├── SubscriptionActivity.java
│       │   │           ├── model/
│       │   │           │   ├── ApiUser.java
│       │   │           │   ├── User.java
│       │   │           │   └── UserDetail.java
│       │   │           └── utils/
│       │   │               └── Utils.java
│       │   └── res/
│       │       ├── layout/
│       │       │   ├── activity_rx_api_test.xml
│       │       │   ├── activity_rx_operator_example.xml
│       │       │   └── activity_subscription.xml
│       │       └── values/
│       │           ├── colors.xml
│       │           ├── dimens.xml
│       │           ├── strings.xml
│       │           └── styles.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── rxsampleapp/
│                       └── ExampleUnitTest.java
└── settings.gradle

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
*.iml
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures
/.idea


================================================
FILE: .travis.yml
================================================
language: android

env:
  global:
    - ADB_INSTALL_TIMEOUT=30
# Using the new Container-Based Infrastructure
    - sudo: false
# Turning off caching to avoid caching Issues
    - cache: false
# Initiating clean Gradle output
    - TERM=dumb
# Giving even more memory to Gradle JVM
    - GRADLE_OPTS="-Xmx2048m -XX:MaxPermSize=1024m"

android:
  components:
    - tools
    - platform-tools
    - build-tools-27.0.3
    - android-27
    - android-24
    - android-23
    - android-22
    - extra-google-google_play_services
    - extra-google-m2repository
    - extra-android-m2repository
    - sys-img-armeabi-v7a-android-22    

# Emulator Management: Create, Start and Wait
before_script:
  - echo no | android create avd --force -n test -t android-22 --abi armeabi-v7a -c 32M
  - emulator -avd test -no-audio -no-window &
  - android-wait-for-emulator
  - sleep 180
  - adb devices
  - adb shell input keyevent 82 &
  
script:
  - ./gradlew connectedAndroidTest


================================================
FILE: CHANGELOG.md
================================================
Change Log
==========

Version 1.0.2 *(2018-07-10)*
----------------------------

 * New: Add support for multiple file upload with same key
 * New: Add support for multi contentType in multipart
 * Bump OkHttp Version to 3.10.0
 * Bump other dependencies


Version 1.0.1 *(2017-12-20)*
----------------------------

 * New: Add support for `Single`, `Completable`, `Flowable`, `Maybe` Observable
 * New: Add support for OPTIONS request
 * Bump OkHttp Version to 3.9.1
 * Bump other dependencies
 * New: Add support for specifying request method dynamically
 * New: Add API to check isRequestRunning
 * Fix: Add more than one values for one key in header and query
 * Merge pull requests


Version 1.0.0 *(2017-03-19)*
----------------------------

 * Fix: Progress bug for large files download
 * Merge pull requests
 * New: Add new API
 * Bump OkHttp Version to 3.6.0
 * New: Add config options for BitmapDecode
 * New: Add Consumer Proguard


Version 0.4.0 *(2017-02-01)*
----------------------------

 * New: RxJava2 Support [link](https://amitshekhariitbhu.github.io/Fast-Android-Networking/rxjava2_support.html)
 * New: Add Java Object directly in any request [link](https://amitshekhariitbhu.github.io/Fast-Android-Networking/post_request.html)
 * New: Java Object is supported for query parameter, headers also
 * Update OkHttp to 3.5.0
 * Fix: Allow all Map implementations
 * New: Add better logging of request
 * New: Get parsed error body [link](https://amitshekhariitbhu.github.io/Fast-Android-Networking/error_code_handling.html)
 * Merged pull requests


Version 0.3.0 *(2016-11-07)*
----------------------------

 * Fix: Few minor bug fixes
 * Remove unwanted tags from manifest file


Version 0.2.0 *(2016-09-16)*
----------------------------

* New: Jackson Parser Support 
* New: Making Synchronous Request - [Check Here](https://amitshekhariitbhu.github.io/Fast-Android-Networking/synchronous_request.html)
* New: setContentType("application/json; charset=utf-8") in POST and Multipart request.
* New: Getting OkHttpResponse in Response to access headers - [Check Here](https://amitshekhariitbhu.github.io/Fast-Android-Networking/getting_okhttpresponse.html)
* Bug fixes : As always we are squashing bugs.
* New: Few other features which are request by the fans of Fast Android Networking.


Version 0.1.0 *(2016-07-31)*
----------------------------

 * New: RxJava Support For Fast-Android-Networking
 * New: Now RxJava can be used with Fast-Android-Networking
 * New: Operators like `flatMap`, `filter`, `map`, `zip`, etc can be used easily with Fast-Android-Networking.
 * New: Chaining of Requests can be done.
 * New: Requests can be bind with Activity-Lifecycle.
 * New: Java Object Parsing Support


Version 0.0.1 *(2016-06-03)*
----------------------------

Initial release.

================================================
FILE: CONTRIBUTING.md
================================================
# Contributing

1. Fork it!
2. Checkout the development branch: `git checkout development`
3. Create your feature branch: `git checkout -b my-new-feature`
4. Add your changes to the index: `git add .`
5. Commit your changes: `git commit -m 'Add some feature'`
6. Push to the branch: `git push origin my-new-feature`
7. Submit a pull request against the `development` branch


================================================
FILE: LICENSE
================================================

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   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.

================================================
FILE: README.md
================================================
<img src=https://raw.githubusercontent.com/amitshekhariitbhu/Fast-Android-Networking/master/assets/androidnetworking.png >

# 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](http://square.github.io/okhttp/).

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](https://github.com/square/okio) , No more GC overhead in android applications.
  [Okio](https://github.com/square/okio) is made to handle GC overhead while allocating memory.
  [Okio](https://github.com/square/okio) does some clever things to save CPU and memory.
* It uses [OkHttp](http://square.github.io/okhttp/) , more importantly it supports HTTP/2.  

## About me

Hi, I am Amit Shekhar, Founder @ [Outcome School](https://outcomeschool.com) • 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.

### Follow Amit Shekhar

- [X/Twitter](https://twitter.com/amitiitbhu)
- [LinkedIn](https://www.linkedin.com/in/amit-shekhar-iitbhu)
- [GitHub](https://github.com/amitshekhariitbhu)

### Follow Outcome School

- [YouTube](https://youtube.com/@OutcomeSchool)
- [X/Twitter](https://x.com/outcome_school)
- [LinkedIn](https://www.linkedin.com/company/outcomeschool)
- [GitHub](http://github.com/OutcomeSchool)

## I teach at Outcome School

- [AI and Machine Learning](https://outcomeschool.com/program/ai-and-machine-learning)
- [Android](https://outcomeschool.com/program/android)

Join Outcome School and get a high-paying tech job: [Outcome School](https://outcomeschool.com)

## [Outcome School Blog](https://outcomeschool.com/blog) - High-quality content to learn Android concepts.

### RxJava2 Support, [check here](https://amitshekhariitbhu.github.io/Fast-Android-Networking/rxjava2_support.html).

### 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 :

<a href="https://amitshekhariitbhu.github.io/Fast-Android-Networking" target="_blank"><img src="https://raw.githubusercontent.com/amitshekhariitbhu/Fast-Android-Networking/master/assets/get_started.png" width="150" height="42"/></a>

## 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`:
```groovy
maven { url 'https://jitpack.io' }
```

If you are using `settings.gradle.kts`, add the following:
```kotlin
maven { setUrl("https://jitpack.io") }
```

Add this in your `build.gradle`
```groovy
implementation 'com.github.amitshekhariitbhu.Fast-Android-Networking:android-networking:1.0.4'
```

If you are using `build.gradle.kts`, add the following:
```kotlin
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
```xml
<uses-permission android:name="android.permission.INTERNET" />
```
Then initialize it in onCreate() Method of application class :
```java
AndroidNetworking.initialize(getApplicationContext());
```
Initializing it with some customization , as it uses [OkHttp](http://square.github.io/okhttp/) as networking layer, you can pass custom okHttpClient while initializing it.
```java
// 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`
```groovy
implementation 'com.github.amitshekhariitbhu.Fast-Android-Networking:jackson-android-networking:1.0.4'
```

If you are using `build.gradle.kts`, add the following:
```kotlin
implementation("com.github.amitshekhariitbhu.Fast-Android-Networking:jackson-android-networking:1.0.4")
```

```java
// Then set the JacksonParserFactory like below
AndroidNetworking.setParserFactory(new JacksonParserFactory());
```

Using the Fast Android Networking with RxJava2

Add this in your `build.gradle`
```groovy
implementation 'com.github.amitshekhariitbhu.Fast-Android-Networking:rx2-android-networking:1.0.4'
```

If you are using `build.gradle.kts`, add the following:
```kotlin
implementation("com.github.amitshekhariitbhu.Fast-Android-Networking:rx2-android-networking:1.0.4")
```

Using the Fast Android Networking with RxJava

Add this in your `build.gradle`
```groovy
implementation 'com.github.amitshekhariitbhu.Fast-Android-Networking:rx-android-networking:1.0.4'
```

If you are using `build.gradle.kts`, add the following:
```kotlin
implementation("com.github.amitshekhariitbhu.Fast-Android-Networking:rx-android-networking:1.0.4")
```

### Making a GET Request
```java
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
```java
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.
```java
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
```java
/*--------------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
```java
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
```java
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 
                    }
                 }); 
```
### Setting a Percentage Threshold For Not Cancelling the request if it has completed the given threshold
```java
AndroidNetworking.download(url,dirPath,fileName)
                 .setTag("downloadTest")
                 .setPriority(Priority.MEDIUM)
                 .setPercentageThresholdForCancelling(50) // even if at the time of cancelling it will not cancel if 50% 
                 .build()                                 // downloading is done.But can be cancalled with forceCancel.
                 .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    
                    }
                });   
```
### Cancelling a request.
Any request with a given tag can be cancelled. Just do like this.
```java
AndroidNetworking.cancel("tag"); // All the requests with the given tag will be cancelled.
AndroidNetworking.forceCancel("tag");  // All the requests with the given tag will be cancelled , even if any percent threshold is
                                       // set , it will be cancelled forcefully. 
AndroidNetworking.cancelAll(); // All the requests will be cancelled.  
AndroidNetworking.forceCancelAll(); // All the requests will be cancelled , even if any percent threshold is
                               // set , it will be cancelled forcefully.                           
```
### Loading image from network into ImageView
```xml
      <com.androidnetworking.widget.ANImageView
          android:id="@+id/imageView"
          android:layout_width="100dp"
          android:layout_height="100dp"
          android:layout_gravity="center" />
          
      imageView.setDefaultImageResId(R.drawable.default);
      imageView.setErrorImageResId(R.drawable.error);
      imageView.setImageUrl(imageUrl);          
```
### Getting Bitmap from url with some specified parameters
```java
AndroidNetworking.get(imageUrl)
                 .setTag("imageRequestTag")
                 .setPriority(Priority.MEDIUM)
                 .setBitmapMaxHeight(100)
                 .setBitmapMaxWidth(100)
                 .setBitmapConfig(Bitmap.Config.ARGB_8888)
                 .build()
                 .getAsBitmap(new BitmapRequestListener() {
                    @Override
                    public void onResponse(Bitmap bitmap) {
                    // do anything with bitmap
                    }
                    @Override
                    public void onError(ANError error) {
                      // handle error
                    }
                });
```
### Error Code Handling
```java
public void onError(ANError error) {
   if (error.getErrorCode() != 0) {
        // received error from server
        // error.getErrorCode() - the error code from server
        // error.getErrorBody() - the error body from server
        // error.getErrorDetail() - just an error detail
        Log.d(TAG, "onError errorCode : " + error.getErrorCode());
        Log.d(TAG, "onError errorBody : " + error.getErrorBody());
        Log.d(TAG, "onError errorDetail : " + error.getErrorDetail());
        // get parsed error object (If ApiError is your class)
        ApiError apiError = error.getErrorAsObject(ApiError.class);
   } else {
        // error.getErrorDetail() : connectionError, parseError, requestCancelledError
        Log.d(TAG, "onError errorDetail : " + error.getErrorDetail());
   }
}
```
### Remove Bitmap from cache or clear cache
```java
AndroidNetworking.evictBitmap(key); // remove a bitmap with key from LruCache
AndroidNetworking.evictAllBitmap(); // clear LruCache
```
### Prefetch a request (so that it can return from cache when required at instant)
```java
AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAllUsers/{pageNumber}")
                .addPathParameter("pageNumber", "0")
                .addQueryParameter("limit", "30")
                .setTag(this)
                .setPriority(Priority.LOW)
                .build()
                .prefetch();
```
### Customizing OkHttpClient for a particular request
```java
OkHttpClient okHttpClient = new OkHttpClient().newBuilder()
                .addInterceptor(new GzipRequestInterceptor())
                .build();
                
AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAllUsers/{pageNumber}")
                 .addPathParameter("pageNumber", "0")
                 .addQueryParameter("limit", "3")
                 .addHeaders("token", "1234")
                 .setTag("test")
                 .setPriority(Priority.LOW)
                 .setOkHttpClient(okHttpClient) // passing a custom okHttpClient 
                 .build()
                 .getAsJSONArray(new JSONArrayRequestListener() {
                    @Override
                    public void onResponse(JSONArray response) {
                      // do anything with response
                    }
                    @Override
                    public void onError(ANError error) {
                    // handle error
                    }
                });
```
### Making a conditional request (Building a request)
```java
ANRequest.GetRequestBuilder getRequestBuilder = new ANRequest.GetRequestBuilder(ApiEndPoint.BASE_URL + ApiEndPoint.CHECK_FOR_HEADER);
               
if(isHeaderRequired){
 getRequestBuilder.addHeaders("token", "1234");
}

if(executorRequired){
 getRequestBuilder.setExecutor(Executors.newSingleThreadExecutor());
}
               
ANRequest anRequest = getRequestBuilder.build();       
                 
anRequest.getAsJSONObject(new JSONObjectRequestListener() {
    @Override
    public void onResponse(JSONObject response) {
      // do anything with response
    }
    @Override
    public void onError(ANError error) {
      // handle error
    }
});
```
### ConnectionClass Listener to get current network quality and bandwidth
```java
// Adding Listener
AndroidNetworking.setConnectionQualityChangeListener(new ConnectionQualityChangeListener() {
            @Override
            public void onChange(ConnectionQuality currentConnectionQuality, int currentBandwidth) {
              // do something on change in connectionQuality
            }
        });
        
// Removing Listener   
AndroidNetworking.removeConnectionQualityChangeListener();

// Getting current ConnectionQuality
ConnectionQuality connectionQuality = AndroidNetworking.getCurrentConnectionQuality();
if(connectionQuality == ConnectionQuality.EXCELLENT) {
  // do something
} else if (connectionQuality == ConnectionQuality.POOR) {
  // do something
} else if (connectionQuality == ConnectionQuality.UNKNOWN) {
  // do something
}
// Getting current bandwidth
int currentBandwidth = AndroidNetworking.getCurrentBandwidth(); // Note : if (currentBandwidth == 0) : means UNKNOWN
```
### Getting Analytics of a request by setting AnalyticsListener on that
```java
AndroidNetworking.download(url,dirPath,fileName)
                 .setTag("downloadTest")
                 .setPriority(Priority.MEDIUM)
                 .build()
                 .setAnalyticsListener(new AnalyticsListener() {
                      @Override
                      public void onReceived(long timeTakenInMillis, long bytesSent, long bytesReceived, boolean isFromCache) {
                          Log.d(TAG, " timeTakenInMillis : " + timeTakenInMillis);
                          Log.d(TAG, " bytesSent : " + bytesSent);
                          Log.d(TAG, " bytesReceived : " + bytesReceived);
                          Log.d(TAG, " isFromCache : " + isFromCache);
                      }
                  })
                 .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    
                    }
                });  
Note : If bytesSent or bytesReceived is -1 , it means it is unknown                
```
### Getting OkHttpResponse in Response
```java
AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAnUserDetail/{userId}")
                .addPathParameter("userId", "1")
                .setTag(this)
                .setPriority(Priority.LOW)
                .setUserAgent("getAnUser")
                .build()
                .getAsOkHttpResponseAndParsed(new TypeToken<User>() {
                }, new OkHttpResponseAndParsedRequestListener<User>() {
                    @Override
                    public void onResponse(Response okHttpResponse, User user) {
                      // do anything with okHttpResponse and user
                    }
                    @Override
                    public void onError(ANError anError) {
                      // handle error
                    }
                });
```
### Making Synchronous Request
```java                
ANRequest request = AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAllUsers/{pageNumber}")
                        .addPathParameter("pageNumber", "0")
                        .addQueryParameter("limit", "3")
                        .build();
ANResponse<List<User>> response = request.executeForObjectList(User.class);
if (response.isSuccess()) {
   List<User> users = responseTwo.getResult();
} else {
   //handle error
}                                        
```
### How caching works ?
* First of all the server must send cache-control in header so that is starts working.
* Response will be cached on the basis of cache-control max-age,max-stale.
* If internet is connected and the age is NOT expired it will return from cache.
* If internet is connected and the age is expired and if server returns 304(NOT MODIFIED) it will return from cache.
* If internet is NOT connected if you are using getResponseOnlyIfCached() - it will return from cache even it date is expired.
* If internet is NOT connected , if you are NOT using getResponseOnlyIfCached() - it will NOT return anything.
* If you are using getResponseOnlyFromNetwork() , it will only return response after validation from server.
* If cache-control is set, it will work according to the max-age,max-stale returned from server.
* If internet is NOT connected only way to get cache Response is by using getResponseOnlyIfCached().

### Enabling Logging
```java
AndroidNetworking.enableLogging(); // simply enable logging
AndroidNetworking.enableLogging(LEVEL.HEADERS); // enabling logging with level
```
### Enabling GZIP From Client to Server
```java
// Enabling GZIP for Request (Not needed if your server doesn't support GZIP Compression), anyway responses 
// from server are automatically unGzipped if required. So enable it only if you need your request to be 
// Gzipped before sending to server(Make sure your server support GZIP Compression).
OkHttpClient okHttpClient = new OkHttpClient().newBuilder()
                .addInterceptor(new GzipRequestInterceptor())
                .build();
AndroidNetworking.initialize(getApplicationContext(),okHttpClient);                
```
### IMPORTANT NOTE
* Use IMMEDIATE Priority with caution - use is at appropriate place only when
  1 or 2 (at max 2)IMMEDIATE request is required at instant.Otherwise use HIGH Priority.
* Known Bug : As present if you are using GZIP Interceptor from client to server, Upload progress
  is not working perfectly in Multipart.
  
  If you are using Proguard with Gradle build system (which is usually the case), you don't have to do anything. The appropriate Proguard rules will be automatically applied. If you still need the rules applied in `proguard-rules.pro`, it is as follows:
  ```
  -dontwarn okio.**
  ```

  
### Fast Android Networking Library supports

* Fast Android Networking Library supports all types of HTTP/HTTPS request like GET, POST, DELETE, HEAD, PUT, PATCH
* Fast Android Networking Library supports downloading any type of file
* Fast Android Networking Library supports uploading any type of file (supports multipart upload)
* Fast Android Networking Library supports cancelling a request
* Fast Android Networking Library supports setting priority to any request (LOW, MEDIUM, HIGH, IMMEDIATE)
* Fast Android Networking Library supports [RxJava](https://amitshekhariitbhu.github.io/Fast-Android-Networking/rxjava2_support.html)

As it uses [OkHttp](http://square.github.io/okhttp/) as a networking layer, it supports:

* Fast Android Networking Library supports HTTP/2 support allows all requests to the same host to share a socket
* Fast Android Networking Library uses connection pooling which reduces request latency (if HTTP/2 isn’t available)
* Transparent GZIP shrinks download sizes
* Fast Android Networking Library supports response caching which avoids the network completely for repeat requests

### Difference over other Networking Library
* In Fast Android Networking Library, OkHttpClient can be customized for every request easily — like timeout customization, etc. for each request.
* As Fast Android Networking Library uses [OkHttp](http://square.github.io/okhttp/) and [Okio](https://github.com/square/okio), it is faster.
* Single library for all type of networking.
* Supports RxJava, RxJava2 -> [Check here](https://amitshekhariitbhu.github.io/Fast-Android-Networking/rxjava2_support.html)
* Current bandwidth and connection quality can be obtained to decide logic of code.
* Executor can be passed to any request to get the response in another thread.
* Complete analytics of any request can be obtained.
* All types of customization are possible.
* Immediate Request really is immediate now.
* Prefetching of any request can be done so that it gives instant data when required from the cache.
* Proper request canceling.
* Prevents cancellation of a request if it’s completed more than a specific threshold percentage.
* A simple interface to make any type of request.
* Proper Response Caching — which leads to reduced bandwidth usage. 

### TODO
* Integration with other library
* And of course many many features and bug fixes

### CREDITS
* [Square](https://square.github.io/) - As both [OkHttp](http://square.github.io/okhttp/) and [Okio](https://github.com/square/okio)
  used by Fast Android Networking is developed by [Square](https://square.github.io/).
* [Volley](https://android.googlesource.com/platform/frameworks/volley/) - As Fast Android Networking uses ImageLoader that is developed by [Volley](https://android.googlesource.com/platform/frameworks/volley/).  
* [Prashant Gupta](https://github.com/PrashantGupta17) - For RxJava, RxJava2 Support - [RxJava Support](https://github.com/amitshekhariitbhu/Fast-Android-Networking/wiki/Using-Fast-Android-Networking-Library-With-RxJava)

### Contact - Let's become friend
- [Twitter](https://twitter.com/amitiitbhu)
- [Github](https://github.com/amitshekhariitbhu)
- [Medium](https://medium.com/@amitshekhar)
- [Facebook](https://www.facebook.com/amit.shekhar.iitbhu)

### License
```
   Copyright (C) 2024 Amit Shekhar

   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.
```

### Contributing to Fast Android Networking
All pull requests are welcome, make sure to follow the [contribution guidelines](CONTRIBUTING.md)
when you submit pull request.



================================================
FILE: android-networking/.gitignore
================================================
/build


================================================
FILE: android-networking/build.gradle
================================================
/*
 *    Copyright (C) 2016 Amit Shekhar
 *    Copyright (C) 2011 Android Open Source Project
 *
 *    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.
 */

apply plugin: 'com.android.library'

android {
    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion rootProject.ext.buildToolsVersion

    defaultConfig {
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode 1
        versionName "1.0"
        consumerProguardFiles 'proguard-rules.pro'
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    lintOptions {
        abortOnError false
    }
}

dependencies {
    api fileTree(dir: 'libs', include: ['*.jar'])
    testImplementation "junit:junit:$rootProject.ext.jUnitVersion"
    androidTestImplementation "com.squareup.okhttp3:mockwebserver:$rootProject.ext.mockWebServerVersion"
    api "com.squareup.okhttp3:okhttp:$rootProject.ext.okHttp3Version"
    api "com.google.code.gson:gson:$rootProject.ext.gsonVersion"
    implementation "com.android.support:appcompat-v7:$rootProject.ext.supportAppCompatVersion"
}


================================================
FILE: android-networking/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /Users/amitshekhar/Library/Android/sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}

# For OkHttp
-dontwarn okio.**


================================================
FILE: android-networking/src/androidTest/AndroidManifest.xml
================================================
<!--
  ~    Copyright (C) 2016 Amit Shekhar
  ~    Copyright (C) 2011 Android Open Source Project
  ~
  ~    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.
  -->

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.androidnetworking">

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

</manifest>


================================================
FILE: android-networking/src/androidTest/java/com/androidnetworking/GetJSONApiTest.java
================================================
/*
 *
 *  *    Copyright (C) 2016 Amit Shekhar
 *  *    Copyright (C) 2011 Android Open Source Project
 *  *
 *  *    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.androidnetworking;

import android.app.Application;
import android.test.ApplicationTestCase;

import com.androidnetworking.common.ANConstants;
import com.androidnetworking.common.ANRequest;
import com.androidnetworking.common.ANResponse;
import com.androidnetworking.error.ANError;
import com.androidnetworking.interfaces.JSONArrayRequestListener;
import com.androidnetworking.interfaces.JSONObjectRequestListener;
import com.androidnetworking.interfaces.OkHttpResponseAndJSONArrayRequestListener;
import com.androidnetworking.interfaces.OkHttpResponseAndJSONObjectRequestListener;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.junit.Rule;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicReference;

import okhttp3.Response;
import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.MockWebServer;

import static java.util.concurrent.TimeUnit.SECONDS;

/**
 * Created by amitshekhar on 03/04/17.
 */

public class GetJSONApiTest extends ApplicationTestCase<Application> {

    @Rule
    public final MockWebServer server = new MockWebServer();

    public GetJSONApiTest() {
        super(Application.class);
    }

    @Override
    public void setUp() throws Exception {
        super.setUp();
        createApplication();
    }

    public void testJSONObjectGetRequest() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));

        final AtomicReference<String> firstNameRef = new AtomicReference<>();
        final AtomicReference<String> lastNameRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.get(server.url("/").toString())
                .build()
                .getAsJSONObject(new JSONObjectRequestListener() {
                    @Override
                    public void onResponse(JSONObject response) {
                        try {
                            firstNameRef.set(response.getString("firstName"));
                            lastNameRef.set(response.getString("lastName"));
                            latch.countDown();
                        } catch (JSONException e) {
                            assertTrue(false);
                        }
                    }

                    @Override
                    public void onError(ANError anError) {
                        assertTrue(false);
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals("Amit", firstNameRef.get());
        assertEquals("Shekhar", lastNameRef.get());
    }

    public void testJSONObjectGetRequest404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        final AtomicReference<String> errorDetailRef = new AtomicReference<>();
        final AtomicReference<String> errorBodyRef = new AtomicReference<>();
        final AtomicReference<Integer> errorCodeRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.get(server.url("/").toString())
                .build()
                .getAsJSONObject(new JSONObjectRequestListener() {
                    @Override
                    public void onResponse(JSONObject response) {
                        assertTrue(false);
                    }

                    @Override
                    public void onError(ANError anError) {
                        errorBodyRef.set(anError.getErrorBody());
                        errorDetailRef.set(anError.getErrorDetail());
                        errorCodeRef.set(anError.getErrorCode());
                        latch.countDown();
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());

        assertEquals("data", errorBodyRef.get());

        assertEquals(404, errorCodeRef.get().intValue());

    }

    public void testJSONArrayGetRequest() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));

        final AtomicReference<String> firstNameRef = new AtomicReference<>();
        final AtomicReference<String> lastNameRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.get(server.url("/").toString())
                .build()
                .getAsJSONArray(new JSONArrayRequestListener() {
                    @Override
                    public void onResponse(JSONArray response) {
                        try {
                            JSONObject jsonObject = response.getJSONObject(0);
                            firstNameRef.set(jsonObject.getString("firstName"));
                            lastNameRef.set(jsonObject.getString("lastName"));
                            latch.countDown();
                        } catch (JSONException e) {
                            assertTrue(false);
                        }
                    }

                    @Override
                    public void onError(ANError anError) {
                        assertTrue(false);
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals("Amit", firstNameRef.get());
        assertEquals("Shekhar", lastNameRef.get());
    }

    public void testJSONArrayGetRequest404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        final AtomicReference<String> errorDetailRef = new AtomicReference<>();
        final AtomicReference<String> errorBodyRef = new AtomicReference<>();
        final AtomicReference<Integer> errorCodeRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.get(server.url("/").toString())
                .build()
                .getAsJSONArray(new JSONArrayRequestListener() {
                    @Override
                    public void onResponse(JSONArray response) {
                        assertTrue(false);
                    }

                    @Override
                    public void onError(ANError anError) {
                        errorBodyRef.set(anError.getErrorBody());
                        errorDetailRef.set(anError.getErrorDetail());
                        errorCodeRef.set(anError.getErrorCode());
                        latch.countDown();
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());

        assertEquals("data", errorBodyRef.get());

        assertEquals(404, errorCodeRef.get().intValue());

    }

    @SuppressWarnings("unchecked")
    public void testSynchronousJSONObjectGetRequest() throws InterruptedException, JSONException {

        server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));

        ANRequest request = AndroidNetworking.get(server.url("/").toString()).build();

        ANResponse<JSONObject> response = request.executeForJSONObject();

        assertEquals("Amit", response.getResult().getString("firstName"));

        assertEquals("Shekhar", response.getResult().getString("lastName"));
    }

    @SuppressWarnings("unchecked")
    public void testSynchronousJSONObjectGetRequest404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        ANRequest request = AndroidNetworking.get(server.url("/").toString()).build();

        ANResponse<JSONObject> response = request.executeForJSONObject();

        ANError error = response.getError();

        assertEquals("data", error.getErrorBody());

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, error.getErrorDetail());

        assertEquals(404, error.getErrorCode());

    }

    @SuppressWarnings("unchecked")
    public void testSynchronousJSONArrayGetRequest() throws InterruptedException, JSONException {

        server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));

        ANRequest request = AndroidNetworking.get(server.url("/").toString()).build();

        ANResponse<JSONArray> response = request.executeForJSONArray();

        JSONObject jsonObject = response.getResult().getJSONObject(0);

        assertEquals("Amit", jsonObject.getString("firstName"));

        assertEquals("Shekhar", jsonObject.getString("lastName"));

    }

    @SuppressWarnings("unchecked")
    public void testSynchronousJSONArrayGetRequest404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        ANRequest request = AndroidNetworking.get(server.url("/").toString()).build();

        ANResponse<JSONObject> response = request.executeForJSONArray();

        ANError error = response.getError();

        assertEquals("data", error.getErrorBody());

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, error.getErrorDetail());

        assertEquals(404, error.getErrorCode());

    }

    public void testResponseBodyAndJSONObjectGet() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));

        final AtomicReference<String> firstNameRef = new AtomicReference<>();
        final AtomicReference<String> lastNameRef = new AtomicReference<>();
        final AtomicReference<Boolean> responseBodySuccess = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.get(server.url("/").toString())
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndJSONObject(new OkHttpResponseAndJSONObjectRequestListener() {
                    @Override
                    public void onResponse(Response okHttpResponse, JSONObject response) {
                        try {
                            firstNameRef.set(response.getString("firstName"));
                            lastNameRef.set(response.getString("lastName"));
                            responseBodySuccess.set(okHttpResponse.isSuccessful());
                            latch.countDown();
                        } catch (JSONException e) {
                            assertTrue(false);
                        }
                    }

                    @Override
                    public void onError(ANError anError) {
                        assertTrue(false);
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertTrue(responseBodySuccess.get());
        assertEquals("Amit", firstNameRef.get());
        assertEquals("Shekhar", lastNameRef.get());
    }

    public void testResponseBodyAndJSONObjectGet404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        final AtomicReference<String> errorBodyRef = new AtomicReference<>();
        final AtomicReference<Integer> errorCodeRef = new AtomicReference<>();
        final AtomicReference<String> errorDetailRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.get(server.url("/").toString())
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndJSONObject(new OkHttpResponseAndJSONObjectRequestListener() {
                    @Override
                    public void onResponse(Response okHttpResponse, JSONObject response) {
                        assertTrue(false);
                    }

                    @Override
                    public void onError(ANError anError) {
                        errorBodyRef.set(anError.getErrorBody());
                        errorDetailRef.set(anError.getErrorDetail());
                        errorCodeRef.set(anError.getErrorCode());
                        latch.countDown();
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());

        assertEquals("data", errorBodyRef.get());

        assertEquals(404, errorCodeRef.get().intValue());
    }

    public void testResponseBodyAndJSONArrayGet() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));

        final AtomicReference<String> firstNameRef = new AtomicReference<>();
        final AtomicReference<String> lastNameRef = new AtomicReference<>();
        final AtomicReference<Boolean> responseBodySuccess = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.get(server.url("/").toString())
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndJSONArray(new OkHttpResponseAndJSONArrayRequestListener() {
                    @Override
                    public void onResponse(Response okHttpResponse, JSONArray response) {
                        try {
                            JSONObject jsonObject = response.getJSONObject(0);
                            firstNameRef.set(jsonObject.getString("firstName"));
                            lastNameRef.set(jsonObject.getString("lastName"));
                            responseBodySuccess.set(okHttpResponse.isSuccessful());
                            latch.countDown();
                        } catch (JSONException e) {
                            assertTrue(false);
                        }
                    }

                    @Override
                    public void onError(ANError anError) {
                        assertTrue(false);
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertTrue(responseBodySuccess.get());
        assertEquals("Amit", firstNameRef.get());
        assertEquals("Shekhar", lastNameRef.get());
    }

    public void testResponseBodyAndJSONArrayGet404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        final AtomicReference<String> errorBodyRef = new AtomicReference<>();
        final AtomicReference<Integer> errorCodeRef = new AtomicReference<>();
        final AtomicReference<String> errorDetailRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.get(server.url("/").toString())
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndJSONArray(new OkHttpResponseAndJSONArrayRequestListener() {
                    @Override
                    public void onResponse(Response okHttpResponse, JSONArray response) {
                        assertTrue(false);
                    }

                    @Override
                    public void onError(ANError anError) {
                        errorBodyRef.set(anError.getErrorBody());
                        errorDetailRef.set(anError.getErrorDetail());
                        errorCodeRef.set(anError.getErrorCode());
                        latch.countDown();
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());

        assertEquals("data", errorBodyRef.get());

        assertEquals(404, errorCodeRef.get().intValue());
    }

    public void testHeaderGetRequest() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));

        final AtomicReference<String> firstNameRef = new AtomicReference<>();
        final AtomicReference<String> lastNameRef = new AtomicReference<>();
        final AtomicReference<String> headerRef = new AtomicReference<>();
        final AtomicReference<Boolean> responseBodySuccess = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.get(server.url("/").toString())
                .addHeaders("headerKey", "headerValue")
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndJSONObject(new OkHttpResponseAndJSONObjectRequestListener() {
                    @Override
                    public void onResponse(Response okHttpResponse, JSONObject response) {
                        try {
                            firstNameRef.set(response.getString("firstName"));
                            lastNameRef.set(response.getString("lastName"));
                            responseBodySuccess.set(okHttpResponse.isSuccessful());
                            headerRef.set(okHttpResponse.request().header("headerKey"));
                            latch.countDown();
                        } catch (JSONException e) {
                            assertTrue(false);
                        }
                    }

                    @Override
                    public void onError(ANError anError) {
                        assertTrue(false);
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertTrue(responseBodySuccess.get());
        assertEquals("Amit", firstNameRef.get());
        assertEquals("Shekhar", lastNameRef.get());
        assertEquals("headerValue", headerRef.get());
    }

}

================================================
FILE: android-networking/src/androidTest/java/com/androidnetworking/GetObjectApiTest.java
================================================
/*
 *
 *  *    Copyright (C) 2016 Amit Shekhar
 *  *    Copyright (C) 2011 Android Open Source Project
 *  *
 *  *    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.androidnetworking;

import android.app.Application;
import android.test.ApplicationTestCase;

import com.androidnetworking.common.ANConstants;
import com.androidnetworking.common.ANRequest;
import com.androidnetworking.common.ANResponse;
import com.androidnetworking.error.ANError;
import com.androidnetworking.interfaces.OkHttpResponseAndParsedRequestListener;
import com.androidnetworking.interfaces.ParsedRequestListener;
import com.androidnetworking.model.User;

import org.json.JSONException;
import org.junit.Rule;

import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicReference;

import okhttp3.Response;
import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.MockWebServer;

import static java.util.concurrent.TimeUnit.SECONDS;

/**
 * Created by amitshekhar on 10/04/17.
 */

public class GetObjectApiTest extends ApplicationTestCase<Application> {

    @Rule
    public final MockWebServer server = new MockWebServer();

    public GetObjectApiTest() {
        super(Application.class);
    }

    @Override
    public void setUp() throws Exception {
        super.setUp();
        createApplication();
    }

    public void testObjectGetRequest() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));

        final AtomicReference<String> firstNameRef = new AtomicReference<>();
        final AtomicReference<String> lastNameRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.get(server.url("/").toString())
                .build()
                .getAsObject(User.class, new ParsedRequestListener<User>() {
                    @Override
                    public void onResponse(User user) {
                        firstNameRef.set(user.firstName);
                        lastNameRef.set(user.lastName);
                        latch.countDown();
                    }

                    @Override
                    public void onError(ANError anError) {
                        assertTrue(false);
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals("Amit", firstNameRef.get());
        assertEquals("Shekhar", lastNameRef.get());
    }

    public void testObjectGetRequest404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        final AtomicReference<String> errorDetailRef = new AtomicReference<>();
        final AtomicReference<String> errorBodyRef = new AtomicReference<>();
        final AtomicReference<Integer> errorCodeRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.get(server.url("/").toString())
                .build()
                .getAsObject(User.class, new ParsedRequestListener<User>() {
                    @Override
                    public void onResponse(User user) {
                        assertTrue(false);
                    }

                    @Override
                    public void onError(ANError anError) {
                        errorBodyRef.set(anError.getErrorBody());
                        errorDetailRef.set(anError.getErrorDetail());
                        errorCodeRef.set(anError.getErrorCode());
                        latch.countDown();
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());

        assertEquals("data", errorBodyRef.get());

        assertEquals(404, errorCodeRef.get().intValue());

    }

    public void testObjectListGetRequest() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));

        final AtomicReference<String> firstNameRef = new AtomicReference<>();
        final AtomicReference<String> lastNameRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.get(server.url("/").toString())
                .build()
                .getAsObjectList(User.class, new ParsedRequestListener<List<User>>() {
                    @Override
                    public void onResponse(List<User> userList) {
                        firstNameRef.set(userList.get(0).firstName);
                        lastNameRef.set(userList.get(0).lastName);
                        latch.countDown();
                    }

                    @Override
                    public void onError(ANError anError) {
                        assertTrue(false);
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals("Amit", firstNameRef.get());
        assertEquals("Shekhar", lastNameRef.get());
    }

    public void testObjectListGetRequest404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        final AtomicReference<String> errorDetailRef = new AtomicReference<>();
        final AtomicReference<String> errorBodyRef = new AtomicReference<>();
        final AtomicReference<Integer> errorCodeRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.get(server.url("/").toString())
                .build()
                .getAsObjectList(User.class, new ParsedRequestListener<List<User>>() {
                    @Override
                    public void onResponse(List<User> userList) {
                        assertTrue(false);
                    }

                    @Override
                    public void onError(ANError anError) {
                        errorBodyRef.set(anError.getErrorBody());
                        errorDetailRef.set(anError.getErrorDetail());
                        errorCodeRef.set(anError.getErrorCode());
                        latch.countDown();
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());

        assertEquals("data", errorBodyRef.get());

        assertEquals(404, errorCodeRef.get().intValue());

    }

    @SuppressWarnings("unchecked")
    public void testSynchronousObjectGetRequest() throws InterruptedException, JSONException {

        server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));

        ANRequest request = AndroidNetworking.get(server.url("/").toString()).build();

        ANResponse<User> response = request.executeForObject(User.class);

        assertEquals("Amit", response.getResult().firstName);

        assertEquals("Shekhar", response.getResult().lastName);
    }

    @SuppressWarnings("unchecked")
    public void testSynchronousObjectGetRequest404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        ANRequest request = AndroidNetworking.get(server.url("/").toString()).build();

        ANResponse<User> response = request.executeForObject(User.class);

        ANError error = response.getError();

        assertEquals("data", error.getErrorBody());

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, error.getErrorDetail());

        assertEquals(404, error.getErrorCode());

    }

    @SuppressWarnings("unchecked")
    public void testSynchronousObjectListGetRequest() throws InterruptedException, JSONException {

        server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));

        ANRequest request = AndroidNetworking.get(server.url("/").toString()).build();

        ANResponse<List<User>> response = request.executeForObjectList(User.class);

        User user = response.getResult().get(0);

        assertEquals("Amit", user.firstName);

        assertEquals("Shekhar", user.lastName);

    }

    @SuppressWarnings("unchecked")
    public void testSynchronousObjectListGetRequest404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        ANRequest request = AndroidNetworking.get(server.url("/").toString()).build();

        ANResponse<List<User>> response = request.executeForObjectList(User.class);

        ANError error = response.getError();

        assertEquals("data", error.getErrorBody());

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, error.getErrorDetail());

        assertEquals(404, error.getErrorCode());

    }

    public void testResponseBodyAndObjectGet() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));

        final AtomicReference<String> firstNameRef = new AtomicReference<>();
        final AtomicReference<String> lastNameRef = new AtomicReference<>();
        final AtomicReference<Boolean> responseBodySuccess = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.get(server.url("/").toString())
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndObject(User.class,
                        new OkHttpResponseAndParsedRequestListener<User>() {
                            @Override
                            public void onResponse(Response okHttpResponse, User user) {
                                firstNameRef.set(user.firstName);
                                lastNameRef.set(user.lastName);
                                responseBodySuccess.set(okHttpResponse.isSuccessful());
                                latch.countDown();
                            }

                            @Override
                            public void onError(ANError anError) {
                                assertTrue(false);
                            }
                        });

        assertTrue(latch.await(2, SECONDS));

        assertTrue(responseBodySuccess.get());
        assertEquals("Amit", firstNameRef.get());
        assertEquals("Shekhar", lastNameRef.get());
    }

    public void testResponseBodyAndObjectGet404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        final AtomicReference<String> errorBodyRef = new AtomicReference<>();
        final AtomicReference<Integer> errorCodeRef = new AtomicReference<>();
        final AtomicReference<String> errorDetailRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.get(server.url("/").toString())
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndObject(User.class,
                        new OkHttpResponseAndParsedRequestListener<User>() {
                            @Override
                            public void onResponse(Response okHttpResponse, User user) {
                                assertTrue(false);
                            }

                            @Override
                            public void onError(ANError anError) {
                                errorBodyRef.set(anError.getErrorBody());
                                errorDetailRef.set(anError.getErrorDetail());
                                errorCodeRef.set(anError.getErrorCode());
                                latch.countDown();
                            }
                        });

        assertTrue(latch.await(2, SECONDS));

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());

        assertEquals("data", errorBodyRef.get());

        assertEquals(404, errorCodeRef.get().intValue());
    }

    public void testResponseBodyAndObjectListGet() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));

        final AtomicReference<String> firstNameRef = new AtomicReference<>();
        final AtomicReference<String> lastNameRef = new AtomicReference<>();
        final AtomicReference<Boolean> responseBodySuccess = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.get(server.url("/").toString())
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndObjectList(User.class,
                        new OkHttpResponseAndParsedRequestListener<List<User>>() {
                            @Override
                            public void onResponse(Response okHttpResponse, List<User> userList) {
                                firstNameRef.set(userList.get(0).firstName);
                                lastNameRef.set(userList.get(0).lastName);
                                responseBodySuccess.set(okHttpResponse.isSuccessful());
                                latch.countDown();
                            }

                            @Override
                            public void onError(ANError anError) {
                                assertTrue(false);
                            }
                        });

        assertTrue(latch.await(2, SECONDS));

        assertTrue(responseBodySuccess.get());
        assertEquals("Amit", firstNameRef.get());
        assertEquals("Shekhar", lastNameRef.get());
    }

    public void testResponseBodyAndObjectListGet404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        final AtomicReference<String> errorBodyRef = new AtomicReference<>();
        final AtomicReference<Integer> errorCodeRef = new AtomicReference<>();
        final AtomicReference<String> errorDetailRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.get(server.url("/").toString())
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndObjectList(User.class,
                        new OkHttpResponseAndParsedRequestListener<List<User>>() {
                            @Override
                            public void onResponse(Response okHttpResponse, List<User> userList) {
                                assertTrue(false);
                            }

                            @Override
                            public void onError(ANError anError) {
                                errorBodyRef.set(anError.getErrorBody());
                                errorDetailRef.set(anError.getErrorDetail());
                                errorCodeRef.set(anError.getErrorCode());
                                latch.countDown();
                            }
                        });

        assertTrue(latch.await(2, SECONDS));

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());

        assertEquals("data", errorBodyRef.get());

        assertEquals(404, errorCodeRef.get().intValue());
    }

    public void testHeaderGetRequest() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));

        final AtomicReference<String> firstNameRef = new AtomicReference<>();
        final AtomicReference<String> lastNameRef = new AtomicReference<>();
        final AtomicReference<String> headerRef = new AtomicReference<>();
        final AtomicReference<Boolean> responseBodySuccess = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.get(server.url("/").toString())
                .addHeaders("headerKey", "headerValue")
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndObject(User.class,
                        new OkHttpResponseAndParsedRequestListener<User>() {
                            @Override
                            public void onResponse(Response okHttpResponse, User user) {
                                firstNameRef.set(user.firstName);
                                lastNameRef.set(user.lastName);
                                responseBodySuccess.set(okHttpResponse.isSuccessful());
                                headerRef.set(okHttpResponse.request().header("headerKey"));
                                latch.countDown();
                            }

                            @Override
                            public void onError(ANError anError) {
                                assertTrue(false);
                            }
                        });

        assertTrue(latch.await(2, SECONDS));

        assertTrue(responseBodySuccess.get());
        assertEquals("Amit", firstNameRef.get());
        assertEquals("Shekhar", lastNameRef.get());
        assertEquals("headerValue", headerRef.get());
    }

}


================================================
FILE: android-networking/src/androidTest/java/com/androidnetworking/GetStringApiTest.java
================================================
/*
 *    Copyright (C) 2016 Amit Shekhar
 *    Copyright (C) 2011 Android Open Source Project
 *
 *    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.androidnetworking;

import android.app.Application;
import android.test.ApplicationTestCase;

import com.androidnetworking.common.ANConstants;
import com.androidnetworking.common.ANRequest;
import com.androidnetworking.common.ANResponse;
import com.androidnetworking.error.ANError;
import com.androidnetworking.interfaces.OkHttpResponseAndStringRequestListener;
import com.androidnetworking.interfaces.OkHttpResponseListener;
import com.androidnetworking.interfaces.StringRequestListener;

import org.junit.Rule;

import java.io.IOException;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicReference;

import okhttp3.Response;
import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.MockWebServer;

import static java.util.concurrent.TimeUnit.SECONDS;

public class GetStringApiTest extends ApplicationTestCase<Application> {

    @Rule
    public final MockWebServer server = new MockWebServer();

    public GetStringApiTest() {
        super(Application.class);
    }

    @Override
    public void setUp() throws Exception {
        super.setUp();
        createApplication();
    }

    public void testStringGetRequest() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("data"));

        final AtomicReference<String> responseRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.get(server.url("/").toString())
                .build()
                .getAsString(new StringRequestListener() {
                    @Override
                    public void onResponse(String response) {
                        responseRef.set(response);
                        latch.countDown();
                    }

                    @Override
                    public void onError(ANError anError) {
                        assertTrue(false);
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals("data", responseRef.get());
    }

    public void testStringGetRequest404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        final AtomicReference<String> errorDetailRef = new AtomicReference<>();
        final AtomicReference<String> errorBodyRef = new AtomicReference<>();
        final AtomicReference<Integer> errorCodeRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.get(server.url("/").toString())
                .build()
                .getAsString(new StringRequestListener() {
                    @Override
                    public void onResponse(String response) {
                        assertTrue(false);
                    }

                    @Override
                    public void onError(ANError anError) {
                        errorBodyRef.set(anError.getErrorBody());
                        errorDetailRef.set(anError.getErrorDetail());
                        errorCodeRef.set(anError.getErrorCode());
                        latch.countDown();
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());

        assertEquals("data", errorBodyRef.get());

        assertEquals(404, errorCodeRef.get().intValue());

    }

    @SuppressWarnings("unchecked")
    public void testSynchronousStringGetRequest() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("data"));

        ANRequest request = AndroidNetworking.get(server.url("/").toString()).build();

        ANResponse<String> response = request.executeForString();

        assertEquals("data", response.getResult());
    }

    @SuppressWarnings("unchecked")
    public void testSynchronousStringGetRequest404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        ANRequest request = AndroidNetworking.get(server.url("/").toString()).build();

        ANResponse<String> response = request.executeForString();

        ANError error = response.getError();

        assertEquals("data", error.getErrorBody());

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, error.getErrorDetail());

        assertEquals(404, error.getErrorCode());
    }

    public void testResponseBodyGet() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("data"));

        final AtomicReference<String> responseRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.get(server.url("/").toString())
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponse(new OkHttpResponseListener() {
                    @Override
                    public void onResponse(Response response) {
                        try {
                            responseRef.set(response.body().string());
                            latch.countDown();
                        } catch (IOException e) {
                            assertTrue(false);
                        }
                    }

                    @Override
                    public void onError(ANError anError) {
                        assertTrue(false);
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals("data", responseRef.get());
    }

    public void testResponseBodyGet404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        final AtomicReference<String> errorBodyRef = new AtomicReference<>();
        final AtomicReference<Integer> errorCodeRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.get(server.url("/").toString())
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponse(new OkHttpResponseListener() {
                    @Override
                    public void onResponse(Response response) {
                        try {
                            errorBodyRef.set(response.body().string());
                            errorCodeRef.set(response.code());
                            latch.countDown();
                        } catch (IOException e) {
                            assertTrue(false);
                        }
                    }

                    @Override
                    public void onError(ANError anError) {
                        assertTrue(false);
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals("data", errorBodyRef.get());

        assertEquals(404, errorCodeRef.get().intValue());
    }

    @SuppressWarnings("unchecked")
    public void testSyncResponseBodyGet() throws InterruptedException, IOException {

        server.enqueue(new MockResponse().setBody("data"));

        ANRequest request = AndroidNetworking.get(server.url("/").toString()).build();

        ANResponse<Response> response = request.executeForOkHttpResponse();

        assertEquals("data", response.getResult().body().string());

    }

    @SuppressWarnings("unchecked")
    public void testSyncResponseBodyGet404() throws InterruptedException, IOException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        ANRequest request = AndroidNetworking.get(server.url("/").toString()).build();

        ANResponse<Response> response = request.executeForOkHttpResponse();

        assertEquals("data", response.getResult().body().string());

        assertEquals(404, response.getResult().code());
    }

    public void testResponseBodyAndStringGet() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("data"));

        final AtomicReference<Boolean> responseBodySuccess = new AtomicReference<>();
        final AtomicReference<String> responseStringRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.get(server.url("/").toString())
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndString(new OkHttpResponseAndStringRequestListener() {
                    @Override
                    public void onResponse(Response okHttpResponse, String response) {
                        responseBodySuccess.set(okHttpResponse.isSuccessful());
                        responseStringRef.set(response);
                        latch.countDown();
                    }

                    @Override
                    public void onError(ANError anError) {
                        assertTrue(false);
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertTrue(responseBodySuccess.get());
        assertEquals("data", responseStringRef.get());
    }

    public void testResponseBodyAndStringGet404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        final AtomicReference<String> errorBodyRef = new AtomicReference<>();
        final AtomicReference<Integer> errorCodeRef = new AtomicReference<>();
        final AtomicReference<String> errorDetailRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.get(server.url("/").toString())
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndString(new OkHttpResponseAndStringRequestListener() {
                    @Override
                    public void onResponse(Response okHttpResponse, String response) {
                        assertTrue(false);
                    }

                    @Override
                    public void onError(ANError anError) {
                        errorBodyRef.set(anError.getErrorBody());
                        errorDetailRef.set(anError.getErrorDetail());
                        errorCodeRef.set(anError.getErrorCode());
                        latch.countDown();
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());

        assertEquals("data", errorBodyRef.get());

        assertEquals(404, errorCodeRef.get().intValue());
    }

    public void testHeaderGetRequest() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("data"));

        final AtomicReference<String> responseRef = new AtomicReference<>();
        final AtomicReference<String> headerRef = new AtomicReference<>();
        final AtomicReference<Boolean> responseBodySuccess = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.get(server.url("/").toString())
                .addHeaders("headerKey", "headerValue")
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndString(new OkHttpResponseAndStringRequestListener() {
                    @Override
                    public void onResponse(Response okHttpResponse, String response) {
                        responseRef.set(response);
                        responseBodySuccess.set(okHttpResponse.isSuccessful());
                        headerRef.set(okHttpResponse.request().header("headerKey"));
                        latch.countDown();
                    }

                    @Override
                    public void onError(ANError anError) {
                        assertTrue(false);
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertTrue(responseBodySuccess.get());
        assertEquals("data", responseRef.get());
        assertEquals("headerValue", headerRef.get());
    }
}

================================================
FILE: android-networking/src/androidTest/java/com/androidnetworking/MultipartJSONApiTest.java
================================================
/*
 *
 *  *    Copyright (C) 2016 Amit Shekhar
 *  *    Copyright (C) 2011 Android Open Source Project
 *  *
 *  *    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.androidnetworking;

import android.app.Application;
import android.test.ApplicationTestCase;

import com.androidnetworking.common.ANConstants;
import com.androidnetworking.common.ANRequest;
import com.androidnetworking.common.ANResponse;
import com.androidnetworking.error.ANError;
import com.androidnetworking.interfaces.JSONArrayRequestListener;
import com.androidnetworking.interfaces.JSONObjectRequestListener;
import com.androidnetworking.interfaces.OkHttpResponseAndJSONArrayRequestListener;
import com.androidnetworking.interfaces.OkHttpResponseAndJSONObjectRequestListener;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.junit.Rule;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicReference;

import okhttp3.Response;
import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.MockWebServer;

import static java.util.concurrent.TimeUnit.SECONDS;

/**
 * Created by amitshekhar on 09/04/17.
 */

public class MultipartJSONApiTest extends ApplicationTestCase<Application> {

    @Rule
    public final MockWebServer server = new MockWebServer();

    public MultipartJSONApiTest() {
        super(Application.class);
    }

    @Override
    public void setUp() throws Exception {
        super.setUp();
        createApplication();
    }

    public void testJSONObjectMultipartRequest() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));

        final AtomicReference<String> firstNameRef = new AtomicReference<>();
        final AtomicReference<String> lastNameRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .build()
                .getAsJSONObject(new JSONObjectRequestListener() {
                    @Override
                    public void onResponse(JSONObject response) {
                        try {
                            firstNameRef.set(response.getString("firstName"));
                            lastNameRef.set(response.getString("lastName"));
                            latch.countDown();
                        } catch (JSONException e) {
                            assertTrue(false);
                        }
                    }

                    @Override
                    public void onError(ANError anError) {
                        assertTrue(false);
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals("Amit", firstNameRef.get());
        assertEquals("Shekhar", lastNameRef.get());
    }

    public void testJSONObjectMultipartRequest404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        final AtomicReference<String> errorDetailRef = new AtomicReference<>();
        final AtomicReference<String> errorBodyRef = new AtomicReference<>();
        final AtomicReference<Integer> errorCodeRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .build()
                .getAsJSONObject(new JSONObjectRequestListener() {
                    @Override
                    public void onResponse(JSONObject response) {
                        assertTrue(false);
                    }

                    @Override
                    public void onError(ANError anError) {
                        errorBodyRef.set(anError.getErrorBody());
                        errorDetailRef.set(anError.getErrorDetail());
                        errorCodeRef.set(anError.getErrorCode());
                        latch.countDown();
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());

        assertEquals("data", errorBodyRef.get());

        assertEquals(404, errorCodeRef.get().intValue());

    }

    public void testJSONArrayMultipartRequest() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));

        final AtomicReference<String> firstNameRef = new AtomicReference<>();
        final AtomicReference<String> lastNameRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .build()
                .getAsJSONArray(new JSONArrayRequestListener() {
                    @Override
                    public void onResponse(JSONArray response) {
                        try {
                            JSONObject jsonObject = response.getJSONObject(0);
                            firstNameRef.set(jsonObject.getString("firstName"));
                            lastNameRef.set(jsonObject.getString("lastName"));
                            latch.countDown();
                        } catch (JSONException e) {
                            assertTrue(false);
                        }
                    }

                    @Override
                    public void onError(ANError anError) {
                        assertTrue(false);
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals("Amit", firstNameRef.get());
        assertEquals("Shekhar", lastNameRef.get());
    }

    public void testJSONArrayMultipartRequest404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        final AtomicReference<String> errorDetailRef = new AtomicReference<>();
        final AtomicReference<String> errorBodyRef = new AtomicReference<>();
        final AtomicReference<Integer> errorCodeRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .build()
                .getAsJSONArray(new JSONArrayRequestListener() {
                    @Override
                    public void onResponse(JSONArray response) {
                        assertTrue(false);
                    }

                    @Override
                    public void onError(ANError anError) {
                        errorBodyRef.set(anError.getErrorBody());
                        errorDetailRef.set(anError.getErrorDetail());
                        errorCodeRef.set(anError.getErrorCode());
                        latch.countDown();
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());

        assertEquals("data", errorBodyRef.get());

        assertEquals(404, errorCodeRef.get().intValue());

    }

    @SuppressWarnings("unchecked")
    public void testSynchronousJSONObjectMultipartRequest() throws InterruptedException, JSONException {

        server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));

        ANRequest request = AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .build();

        ANResponse<JSONObject> response = request.executeForJSONObject();

        assertEquals("Amit", response.getResult().getString("firstName"));

        assertEquals("Shekhar", response.getResult().getString("lastName"));
    }

    @SuppressWarnings("unchecked")
    public void testSynchronousJSONObjectMultipartRequest404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        ANRequest request = AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .build();

        ANResponse<JSONObject> response = request.executeForJSONObject();

        ANError error = response.getError();

        assertEquals("data", error.getErrorBody());

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, error.getErrorDetail());

        assertEquals(404, error.getErrorCode());

    }

    @SuppressWarnings("unchecked")
    public void testSynchronousJSONArrayMultipartRequest() throws InterruptedException, JSONException {

        server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));

        ANRequest request = AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .build();

        ANResponse<JSONArray> response = request.executeForJSONArray();

        JSONObject jsonObject = response.getResult().getJSONObject(0);

        assertEquals("Amit", jsonObject.getString("firstName"));

        assertEquals("Shekhar", jsonObject.getString("lastName"));

    }

    @SuppressWarnings("unchecked")
    public void testSynchronousJSONArrayMultipartRequest404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        ANRequest request = AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .build();

        ANResponse<JSONObject> response = request.executeForJSONArray();

        ANError error = response.getError();

        assertEquals("data", error.getErrorBody());

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, error.getErrorDetail());

        assertEquals(404, error.getErrorCode());

    }

    public void testResponseBodyAndJSONObjectMultipart() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));

        final AtomicReference<String> firstNameRef = new AtomicReference<>();
        final AtomicReference<String> lastNameRef = new AtomicReference<>();
        final AtomicReference<Boolean> responseBodySuccess = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndJSONObject(new OkHttpResponseAndJSONObjectRequestListener() {
                    @Override
                    public void onResponse(Response okHttpResponse, JSONObject response) {
                        try {
                            firstNameRef.set(response.getString("firstName"));
                            lastNameRef.set(response.getString("lastName"));
                            responseBodySuccess.set(okHttpResponse.isSuccessful());
                            latch.countDown();
                        } catch (JSONException e) {
                            assertTrue(false);
                        }
                    }

                    @Override
                    public void onError(ANError anError) {
                        assertTrue(false);
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertTrue(responseBodySuccess.get());
        assertEquals("Amit", firstNameRef.get());
        assertEquals("Shekhar", lastNameRef.get());
    }

    public void testResponseBodyAndJSONObjectMultipart404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        final AtomicReference<String> errorBodyRef = new AtomicReference<>();
        final AtomicReference<Integer> errorCodeRef = new AtomicReference<>();
        final AtomicReference<String> errorDetailRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndJSONObject(new OkHttpResponseAndJSONObjectRequestListener() {
                    @Override
                    public void onResponse(Response okHttpResponse, JSONObject response) {
                        assertTrue(false);
                    }

                    @Override
                    public void onError(ANError anError) {
                        errorBodyRef.set(anError.getErrorBody());
                        errorDetailRef.set(anError.getErrorDetail());
                        errorCodeRef.set(anError.getErrorCode());
                        latch.countDown();
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());

        assertEquals("data", errorBodyRef.get());

        assertEquals(404, errorCodeRef.get().intValue());
    }

    public void testResponseBodyAndJSONArrayMultipart() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));

        final AtomicReference<String> firstNameRef = new AtomicReference<>();
        final AtomicReference<String> lastNameRef = new AtomicReference<>();
        final AtomicReference<Boolean> responseBodySuccess = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndJSONArray(new OkHttpResponseAndJSONArrayRequestListener() {
                    @Override
                    public void onResponse(Response okHttpResponse, JSONArray response) {
                        try {
                            JSONObject jsonObject = response.getJSONObject(0);
                            firstNameRef.set(jsonObject.getString("firstName"));
                            lastNameRef.set(jsonObject.getString("lastName"));
                            responseBodySuccess.set(okHttpResponse.isSuccessful());
                            latch.countDown();
                        } catch (JSONException e) {
                            assertTrue(false);
                        }
                    }

                    @Override
                    public void onError(ANError anError) {
                        assertTrue(false);
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertTrue(responseBodySuccess.get());
        assertEquals("Amit", firstNameRef.get());
        assertEquals("Shekhar", lastNameRef.get());
    }

    public void testResponseBodyAndJSONArrayMultipart404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        final AtomicReference<String> errorBodyRef = new AtomicReference<>();
        final AtomicReference<Integer> errorCodeRef = new AtomicReference<>();
        final AtomicReference<String> errorDetailRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndJSONArray(new OkHttpResponseAndJSONArrayRequestListener() {
                    @Override
                    public void onResponse(Response okHttpResponse, JSONArray response) {
                        assertTrue(false);
                    }

                    @Override
                    public void onError(ANError anError) {
                        errorBodyRef.set(anError.getErrorBody());
                        errorDetailRef.set(anError.getErrorDetail());
                        errorCodeRef.set(anError.getErrorCode());
                        latch.countDown();
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());

        assertEquals("data", errorBodyRef.get());

        assertEquals(404, errorCodeRef.get().intValue());
    }

    public void testHeaderMultipartRequest() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));

        final AtomicReference<String> firstNameRef = new AtomicReference<>();
        final AtomicReference<String> lastNameRef = new AtomicReference<>();
        final AtomicReference<String> headerRef = new AtomicReference<>();
        final AtomicReference<Boolean> responseBodySuccess = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.upload(server.url("/").toString())
                .addHeaders("headerKey", "headerValue")
                .addMultipartParameter("key", "value")
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndJSONObject(new OkHttpResponseAndJSONObjectRequestListener() {
                    @Override
                    public void onResponse(Response okHttpResponse, JSONObject response) {
                        try {
                            firstNameRef.set(response.getString("firstName"));
                            lastNameRef.set(response.getString("lastName"));
                            responseBodySuccess.set(okHttpResponse.isSuccessful());
                            headerRef.set(okHttpResponse.request().header("headerKey"));
                            latch.countDown();
                        } catch (JSONException e) {
                            assertTrue(false);
                        }
                    }

                    @Override
                    public void onError(ANError anError) {
                        assertTrue(false);
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertTrue(responseBodySuccess.get());
        assertEquals("Amit", firstNameRef.get());
        assertEquals("Shekhar", lastNameRef.get());
        assertEquals("headerValue", headerRef.get());
    }


}


================================================
FILE: android-networking/src/androidTest/java/com/androidnetworking/MultipartObjectApiTest.java
================================================
/*
 *
 *  *    Copyright (C) 2016 Amit Shekhar
 *  *    Copyright (C) 2011 Android Open Source Project
 *  *
 *  *    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.androidnetworking;

import android.app.Application;
import android.test.ApplicationTestCase;

import com.androidnetworking.common.ANConstants;
import com.androidnetworking.common.ANRequest;
import com.androidnetworking.common.ANResponse;
import com.androidnetworking.error.ANError;
import com.androidnetworking.interfaces.OkHttpResponseAndParsedRequestListener;
import com.androidnetworking.interfaces.ParsedRequestListener;
import com.androidnetworking.model.User;

import org.json.JSONException;
import org.junit.Rule;

import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicReference;

import okhttp3.Response;
import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.MockWebServer;

import static java.util.concurrent.TimeUnit.SECONDS;

/**
 * Created by amitshekhar on 12/04/17.
 */

public class MultipartObjectApiTest extends ApplicationTestCase<Application> {

    @Rule
    public final MockWebServer server = new MockWebServer();

    public MultipartObjectApiTest() {
        super(Application.class);
    }

    @Override
    public void setUp() throws Exception {
        super.setUp();
        createApplication();
    }

    public void testObjectMultipartRequest() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));

        final AtomicReference<String> firstNameRef = new AtomicReference<>();
        final AtomicReference<String> lastNameRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .build()
                .getAsObject(User.class, new ParsedRequestListener<User>() {
                    @Override
                    public void onResponse(User user) {
                        firstNameRef.set(user.firstName);
                        lastNameRef.set(user.lastName);
                        latch.countDown();
                    }

                    @Override
                    public void onError(ANError anError) {
                        assertTrue(false);
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals("Amit", firstNameRef.get());
        assertEquals("Shekhar", lastNameRef.get());
    }

    public void testObjectMultipartRequest404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        final AtomicReference<String> errorDetailRef = new AtomicReference<>();
        final AtomicReference<String> errorBodyRef = new AtomicReference<>();
        final AtomicReference<Integer> errorCodeRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .build()
                .getAsObject(User.class, new ParsedRequestListener<User>() {
                    @Override
                    public void onResponse(User user) {
                        assertTrue(false);
                    }

                    @Override
                    public void onError(ANError anError) {
                        errorBodyRef.set(anError.getErrorBody());
                        errorDetailRef.set(anError.getErrorDetail());
                        errorCodeRef.set(anError.getErrorCode());
                        latch.countDown();
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());

        assertEquals("data", errorBodyRef.get());

        assertEquals(404, errorCodeRef.get().intValue());

    }

    public void testObjectListMultipartRequest() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));

        final AtomicReference<String> firstNameRef = new AtomicReference<>();
        final AtomicReference<String> lastNameRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .build()
                .getAsObjectList(User.class, new ParsedRequestListener<List<User>>() {
                    @Override
                    public void onResponse(List<User> userList) {
                        firstNameRef.set(userList.get(0).firstName);
                        lastNameRef.set(userList.get(0).lastName);
                        latch.countDown();
                    }

                    @Override
                    public void onError(ANError anError) {
                        assertTrue(false);
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals("Amit", firstNameRef.get());
        assertEquals("Shekhar", lastNameRef.get());
    }

    public void testObjectListMultipartRequest404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        final AtomicReference<String> errorDetailRef = new AtomicReference<>();
        final AtomicReference<String> errorBodyRef = new AtomicReference<>();
        final AtomicReference<Integer> errorCodeRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .build()
                .getAsObjectList(User.class, new ParsedRequestListener<List<User>>() {
                    @Override
                    public void onResponse(List<User> userList) {
                        assertTrue(false);
                    }

                    @Override
                    public void onError(ANError anError) {
                        errorBodyRef.set(anError.getErrorBody());
                        errorDetailRef.set(anError.getErrorDetail());
                        errorCodeRef.set(anError.getErrorCode());
                        latch.countDown();
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());

        assertEquals("data", errorBodyRef.get());

        assertEquals(404, errorCodeRef.get().intValue());

    }

    @SuppressWarnings("unchecked")
    public void testSynchronousObjectMultipartRequest() throws InterruptedException, JSONException {

        server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));

        ANRequest request = AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .build();

        ANResponse<User> response = request.executeForObject(User.class);

        assertEquals("Amit", response.getResult().firstName);

        assertEquals("Shekhar", response.getResult().lastName);
    }

    @SuppressWarnings("unchecked")
    public void testSynchronousObjectMultipartRequest404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        ANRequest request = AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .build();

        ANResponse<User> response = request.executeForObject(User.class);

        ANError error = response.getError();

        assertEquals("data", error.getErrorBody());

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, error.getErrorDetail());

        assertEquals(404, error.getErrorCode());

    }

    @SuppressWarnings("unchecked")
    public void testSynchronousObjectListMultipartRequest() throws InterruptedException, JSONException {

        server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));

        ANRequest request = AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .build();

        ANResponse<List<User>> response = request.executeForObjectList(User.class);

        User user = response.getResult().get(0);

        assertEquals("Amit", user.firstName);

        assertEquals("Shekhar", user.lastName);

    }

    @SuppressWarnings("unchecked")
    public void testSynchronousObjectListMultipartRequest404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        ANRequest request = AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .build();

        ANResponse<List<User>> response = request.executeForObjectList(User.class);

        ANError error = response.getError();

        assertEquals("data", error.getErrorBody());

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, error.getErrorDetail());

        assertEquals(404, error.getErrorCode());

    }

    public void testResponseBodyAndObjectMultipart() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));

        final AtomicReference<String> firstNameRef = new AtomicReference<>();
        final AtomicReference<String> lastNameRef = new AtomicReference<>();
        final AtomicReference<Boolean> responseBodySuccess = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndObject(User.class,
                        new OkHttpResponseAndParsedRequestListener<User>() {
                            @Override
                            public void onResponse(Response okHttpResponse, User user) {
                                firstNameRef.set(user.firstName);
                                lastNameRef.set(user.lastName);
                                responseBodySuccess.set(okHttpResponse.isSuccessful());
                                latch.countDown();
                            }

                            @Override
                            public void onError(ANError anError) {
                                assertTrue(false);
                            }
                        });

        assertTrue(latch.await(2, SECONDS));

        assertTrue(responseBodySuccess.get());
        assertEquals("Amit", firstNameRef.get());
        assertEquals("Shekhar", lastNameRef.get());
    }

    public void testResponseBodyAndObjectMultipart404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        final AtomicReference<String> errorBodyRef = new AtomicReference<>();
        final AtomicReference<Integer> errorCodeRef = new AtomicReference<>();
        final AtomicReference<String> errorDetailRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndObject(User.class,
                        new OkHttpResponseAndParsedRequestListener<User>() {
                            @Override
                            public void onResponse(Response okHttpResponse, User user) {
                                assertTrue(false);
                            }

                            @Override
                            public void onError(ANError anError) {
                                errorBodyRef.set(anError.getErrorBody());
                                errorDetailRef.set(anError.getErrorDetail());
                                errorCodeRef.set(anError.getErrorCode());
                                latch.countDown();
                            }
                        });

        assertTrue(latch.await(2, SECONDS));

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());

        assertEquals("data", errorBodyRef.get());

        assertEquals(404, errorCodeRef.get().intValue());
    }

    public void testResponseBodyAndObjectListMultipart() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));

        final AtomicReference<String> firstNameRef = new AtomicReference<>();
        final AtomicReference<String> lastNameRef = new AtomicReference<>();
        final AtomicReference<Boolean> responseBodySuccess = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndObjectList(User.class,
                        new OkHttpResponseAndParsedRequestListener<List<User>>() {
                            @Override
                            public void onResponse(Response okHttpResponse, List<User> userList) {
                                firstNameRef.set(userList.get(0).firstName);
                                lastNameRef.set(userList.get(0).lastName);
                                responseBodySuccess.set(okHttpResponse.isSuccessful());
                                latch.countDown();
                            }

                            @Override
                            public void onError(ANError anError) {
                                assertTrue(false);
                            }
                        });

        assertTrue(latch.await(2, SECONDS));

        assertTrue(responseBodySuccess.get());
        assertEquals("Amit", firstNameRef.get());
        assertEquals("Shekhar", lastNameRef.get());
    }

    public void testResponseBodyAndObjectListMultipart404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        final AtomicReference<String> errorBodyRef = new AtomicReference<>();
        final AtomicReference<Integer> errorCodeRef = new AtomicReference<>();
        final AtomicReference<String> errorDetailRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndObjectList(User.class,
                        new OkHttpResponseAndParsedRequestListener<List<User>>() {
                            @Override
                            public void onResponse(Response okHttpResponse, List<User> userList) {
                                assertTrue(false);
                            }

                            @Override
                            public void onError(ANError anError) {
                                errorBodyRef.set(anError.getErrorBody());
                                errorDetailRef.set(anError.getErrorDetail());
                                errorCodeRef.set(anError.getErrorCode());
                                latch.countDown();
                            }
                        });

        assertTrue(latch.await(2, SECONDS));

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());

        assertEquals("data", errorBodyRef.get());

        assertEquals(404, errorCodeRef.get().intValue());
    }

    public void testHeaderMultipartRequest() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));

        final AtomicReference<String> firstNameRef = new AtomicReference<>();
        final AtomicReference<String> lastNameRef = new AtomicReference<>();
        final AtomicReference<String> headerRef = new AtomicReference<>();
        final AtomicReference<Boolean> responseBodySuccess = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.upload(server.url("/").toString())
                .addHeaders("headerKey", "headerValue")
                .addMultipartParameter("key", "value")
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndObject(User.class,
                        new OkHttpResponseAndParsedRequestListener<User>() {
                            @Override
                            public void onResponse(Response okHttpResponse, User user) {
                                firstNameRef.set(user.firstName);
                                lastNameRef.set(user.lastName);
                                responseBodySuccess.set(okHttpResponse.isSuccessful());
                                headerRef.set(okHttpResponse.request().header("headerKey"));
                                latch.countDown();
                            }

                            @Override
                            public void onError(ANError anError) {
                                assertTrue(false);
                            }
                        });

        assertTrue(latch.await(2, SECONDS));

        assertTrue(responseBodySuccess.get());
        assertEquals("Amit", firstNameRef.get());
        assertEquals("Shekhar", lastNameRef.get());
        assertEquals("headerValue", headerRef.get());
    }

}


================================================
FILE: android-networking/src/androidTest/java/com/androidnetworking/MultipartStringApiTest.java
================================================
/*
 *
 *  *    Copyright (C) 2016 Amit Shekhar
 *  *    Copyright (C) 2011 Android Open Source Project
 *  *
 *  *    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.androidnetworking;

import android.app.Application;
import android.test.ApplicationTestCase;

import com.androidnetworking.common.ANConstants;
import com.androidnetworking.common.ANRequest;
import com.androidnetworking.common.ANResponse;
import com.androidnetworking.error.ANError;
import com.androidnetworking.interfaces.OkHttpResponseAndParsedRequestListener;
import com.androidnetworking.interfaces.OkHttpResponseAndStringRequestListener;
import com.androidnetworking.interfaces.OkHttpResponseListener;
import com.androidnetworking.interfaces.StringRequestListener;
import com.androidnetworking.model.User;

import org.junit.Rule;

import java.io.IOException;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicReference;

import okhttp3.Response;
import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.MockWebServer;

import static java.util.concurrent.TimeUnit.SECONDS;

/**
 * Created by amitshekhar on 27/03/17.
 */

public class MultipartStringApiTest extends ApplicationTestCase<Application> {

    @Rule
    public final MockWebServer server = new MockWebServer();

    public MultipartStringApiTest() {
        super(Application.class);
    }

    @Override
    public void setUp() throws Exception {
        super.setUp();
        createApplication();
    }

    public void testStringMultipartRequest() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("data"));

        final AtomicReference<String> responseRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .build()
                .getAsString(new StringRequestListener() {
                    @Override
                    public void onResponse(String response) {
                        responseRef.set(response);
                        latch.countDown();
                    }

                    @Override
                    public void onError(ANError anError) {
                        assertTrue(false);
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals("data", responseRef.get());
    }

    public void testStringMultipartRequest404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        final AtomicReference<String> errorDetailRef = new AtomicReference<>();
        final AtomicReference<String> errorBodyRef = new AtomicReference<>();
        final AtomicReference<Integer> errorCodeRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .build()
                .getAsString(new StringRequestListener() {
                    @Override
                    public void onResponse(String response) {
                        assertTrue(false);
                    }

                    @Override
                    public void onError(ANError anError) {
                        errorBodyRef.set(anError.getErrorBody());
                        errorDetailRef.set(anError.getErrorDetail());
                        errorCodeRef.set(anError.getErrorCode());
                        latch.countDown();
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());

        assertEquals("data", errorBodyRef.get());

        assertEquals(404, errorCodeRef.get().intValue());
    }

    @SuppressWarnings("unchecked")
    public void testSynchronousStringMultipartRequest() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("data"));

        ANRequest request = AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .build();

        ANResponse<String> response = request.executeForString();

        assertEquals("data", response.getResult());
    }

    @SuppressWarnings("unchecked")
    public void testSynchronousMultipartRequest404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        ANRequest request = AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .build();

        ANResponse<String> response = request.executeForString();

        ANError error = response.getError();

        assertEquals("data", error.getErrorBody());

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, error.getErrorDetail());

        assertEquals(404, error.getErrorCode());
    }

    public void testResponseBodyMultipart() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("data"));

        final AtomicReference<String> responseRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponse(new OkHttpResponseListener() {
                    @Override
                    public void onResponse(Response response) {
                        try {
                            responseRef.set(response.body().string());
                            latch.countDown();
                        } catch (IOException e) {
                            assertTrue(false);
                        }
                    }

                    @Override
                    public void onError(ANError anError) {
                        assertTrue(false);
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals("data", responseRef.get());
    }

    public void testResponseBodyMultipart404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        final AtomicReference<String> errorBodyRef = new AtomicReference<>();
        final AtomicReference<Integer> errorCodeRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponse(new OkHttpResponseListener() {
                    @Override
                    public void onResponse(Response response) {
                        try {
                            errorBodyRef.set(response.body().string());
                            errorCodeRef.set(response.code());
                            latch.countDown();
                        } catch (IOException e) {
                            assertTrue(false);
                        }
                    }

                    @Override
                    public void onError(ANError anError) {
                        assertTrue(false);
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals("data", errorBodyRef.get());

        assertEquals(404, errorCodeRef.get().intValue());
    }

    @SuppressWarnings("unchecked")
    public void testSyncResponseBodyMultipart() throws InterruptedException, IOException {

        server.enqueue(new MockResponse().setBody("data"));

        ANRequest request = AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .build();

        ANResponse<Response> response = request.executeForOkHttpResponse();

        assertEquals("data", response.getResult().body().string());

    }

    @SuppressWarnings("unchecked")
    public void testSyncResponseBodyMultipart404() throws InterruptedException, IOException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        ANRequest request = AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .build();

        ANResponse<Response> response = request.executeForOkHttpResponse();

        assertEquals("data", response.getResult().body().string());

        assertEquals(404, response.getResult().code());
    }

    public void testResponseBodyAndStringMultipart() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("data"));

        final AtomicReference<Boolean> responseBodySuccess = new AtomicReference<>();
        final AtomicReference<String> responseStringRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndString(new OkHttpResponseAndStringRequestListener() {
                    @Override
                    public void onResponse(Response okHttpResponse, String response) {
                        responseBodySuccess.set(okHttpResponse.isSuccessful());
                        responseStringRef.set(response);
                        latch.countDown();
                    }

                    @Override
                    public void onError(ANError anError) {
                        assertTrue(false);
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertTrue(responseBodySuccess.get());
        assertEquals("data", responseStringRef.get());
    }

    public void testResponseBodyAndStringMultipart404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        final AtomicReference<String> errorBodyRef = new AtomicReference<>();
        final AtomicReference<Integer> errorCodeRef = new AtomicReference<>();
        final AtomicReference<String> errorDetailRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.upload(server.url("/").toString())
                .addMultipartParameter("key", "value")
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndString(new OkHttpResponseAndStringRequestListener() {
                    @Override
                    public void onResponse(Response okHttpResponse, String response) {
                        assertTrue(false);
                    }

                    @Override
                    public void onError(ANError anError) {
                        errorBodyRef.set(anError.getErrorBody());
                        errorDetailRef.set(anError.getErrorDetail());
                        errorCodeRef.set(anError.getErrorCode());
                        latch.countDown();
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());

        assertEquals("data", errorBodyRef.get());

        assertEquals(404, errorCodeRef.get().intValue());
    }

    public void testHeaderMultipartRequest() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("data"));

        final AtomicReference<String> responseRef = new AtomicReference<>();
        final AtomicReference<String> headerRef = new AtomicReference<>();
        final AtomicReference<Boolean> responseBodySuccess = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.upload(server.url("/").toString())
                .addHeaders("headerKey", "headerValue")
                .addMultipartParameter("key", "value")
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndString(new OkHttpResponseAndStringRequestListener() {
                    @Override
                    public void onResponse(Response okHttpResponse, String response) {
                        responseRef.set(response);
                        responseBodySuccess.set(okHttpResponse.isSuccessful());
                        headerRef.set(okHttpResponse.request().header("headerKey"));
                        latch.countDown();
                    }

                    @Override
                    public void onError(ANError anError) {
                        assertTrue(false);
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertTrue(responseBodySuccess.get());
        assertEquals("data", responseRef.get());
        assertEquals("headerValue", headerRef.get());
    }

}

================================================
FILE: android-networking/src/androidTest/java/com/androidnetworking/PostJSONApiTest.java
================================================
/*
 *
 *  *    Copyright (C) 2016 Amit Shekhar
 *  *    Copyright (C) 2011 Android Open Source Project
 *  *
 *  *    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.androidnetworking;

import android.app.Application;
import android.test.ApplicationTestCase;

import com.androidnetworking.common.ANConstants;
import com.androidnetworking.common.ANRequest;
import com.androidnetworking.common.ANResponse;
import com.androidnetworking.error.ANError;
import com.androidnetworking.interfaces.JSONArrayRequestListener;
import com.androidnetworking.interfaces.JSONObjectRequestListener;
import com.androidnetworking.interfaces.OkHttpResponseAndJSONArrayRequestListener;
import com.androidnetworking.interfaces.OkHttpResponseAndJSONObjectRequestListener;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.junit.Rule;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicReference;

import okhttp3.Response;
import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.MockWebServer;

import static java.util.concurrent.TimeUnit.SECONDS;

/**
 * Created by amitshekhar on 06/04/17.
 */

public class PostJSONApiTest extends ApplicationTestCase<Application> {

    @Rule
    public final MockWebServer server = new MockWebServer();

    public PostJSONApiTest() {
        super(Application.class);
    }

    @Override
    public void setUp() throws Exception {
        super.setUp();
        createApplication();
    }

    public void testJSONObjectPostRequest() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));

        final AtomicReference<String> firstNameRef = new AtomicReference<>();
        final AtomicReference<String> lastNameRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.post(server.url("/").toString())
                .addBodyParameter("fistName", "Amit")
                .addBodyParameter("lastName", "Shekhar")
                .build()
                .getAsJSONObject(new JSONObjectRequestListener() {
                    @Override
                    public void onResponse(JSONObject response) {
                        try {
                            firstNameRef.set(response.getString("firstName"));
                            lastNameRef.set(response.getString("lastName"));
                            latch.countDown();
                        } catch (JSONException e) {
                            assertTrue(false);
                        }
                    }

                    @Override
                    public void onError(ANError anError) {
                        assertTrue(false);
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals("Amit", firstNameRef.get());
        assertEquals("Shekhar", lastNameRef.get());
    }

    public void testJSONObjectPostRequest404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        final AtomicReference<String> errorDetailRef = new AtomicReference<>();
        final AtomicReference<String> errorBodyRef = new AtomicReference<>();
        final AtomicReference<Integer> errorCodeRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.post(server.url("/").toString())
                .addBodyParameter("fistName", "Amit")
                .addBodyParameter("lastName", "Shekhar")
                .build()
                .getAsJSONObject(new JSONObjectRequestListener() {
                    @Override
                    public void onResponse(JSONObject response) {
                        assertTrue(false);
                    }

                    @Override
                    public void onError(ANError anError) {
                        errorBodyRef.set(anError.getErrorBody());
                        errorDetailRef.set(anError.getErrorDetail());
                        errorCodeRef.set(anError.getErrorCode());
                        latch.countDown();
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());

        assertEquals("data", errorBodyRef.get());

        assertEquals(404, errorCodeRef.get().intValue());

    }

    public void testJSONArrayPostRequest() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));

        final AtomicReference<String> firstNameRef = new AtomicReference<>();
        final AtomicReference<String> lastNameRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.post(server.url("/").toString())
                .addBodyParameter("fistName", "Amit")
                .addBodyParameter("lastName", "Shekhar")
                .build()
                .getAsJSONArray(new JSONArrayRequestListener() {
                    @Override
                    public void onResponse(JSONArray response) {
                        try {
                            JSONObject jsonObject = response.getJSONObject(0);
                            firstNameRef.set(jsonObject.getString("firstName"));
                            lastNameRef.set(jsonObject.getString("lastName"));
                            latch.countDown();
                        } catch (JSONException e) {
                            assertTrue(false);
                        }
                    }

                    @Override
                    public void onError(ANError anError) {
                        assertTrue(false);
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals("Amit", firstNameRef.get());
        assertEquals("Shekhar", lastNameRef.get());
    }

    public void testJSONArrayPostRequest404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        final AtomicReference<String> errorDetailRef = new AtomicReference<>();
        final AtomicReference<String> errorBodyRef = new AtomicReference<>();
        final AtomicReference<Integer> errorCodeRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.post(server.url("/").toString())
                .addBodyParameter("fistName", "Amit")
                .addBodyParameter("lastName", "Shekhar")
                .build()
                .getAsJSONArray(new JSONArrayRequestListener() {
                    @Override
                    public void onResponse(JSONArray response) {
                        assertTrue(false);
                    }

                    @Override
                    public void onError(ANError anError) {
                        errorBodyRef.set(anError.getErrorBody());
                        errorDetailRef.set(anError.getErrorDetail());
                        errorCodeRef.set(anError.getErrorCode());
                        latch.countDown();
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());

        assertEquals("data", errorBodyRef.get());

        assertEquals(404, errorCodeRef.get().intValue());

    }

    @SuppressWarnings("unchecked")
    public void testSynchronousJSONObjectPostRequest() throws InterruptedException, JSONException {

        server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));

        ANRequest request = AndroidNetworking.post(server.url("/").toString())
                .addBodyParameter("fistName", "Amit")
                .addBodyParameter("lastName", "Shekhar")
                .build();

        ANResponse<JSONObject> response = request.executeForJSONObject();

        assertEquals("Amit", response.getResult().getString("firstName"));

        assertEquals("Shekhar", response.getResult().getString("lastName"));
    }

    @SuppressWarnings("unchecked")
    public void testSynchronousJSONObjectPostRequest404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        ANRequest request = AndroidNetworking.post(server.url("/").toString())
                .addBodyParameter("fistName", "Amit")
                .addBodyParameter("lastName", "Shekhar")
                .build();

        ANResponse<JSONObject> response = request.executeForJSONObject();

        ANError error = response.getError();

        assertEquals("data", error.getErrorBody());

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, error.getErrorDetail());

        assertEquals(404, error.getErrorCode());

    }

    @SuppressWarnings("unchecked")
    public void testSynchronousJSONArrayPostRequest() throws InterruptedException, JSONException {

        server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));

        ANRequest request = AndroidNetworking.post(server.url("/").toString())
                .addBodyParameter("fistName", "Amit")
                .addBodyParameter("lastName", "Shekhar")
                .build();

        ANResponse<JSONArray> response = request.executeForJSONArray();

        JSONObject jsonObject = response.getResult().getJSONObject(0);

        assertEquals("Amit", jsonObject.getString("firstName"));

        assertEquals("Shekhar", jsonObject.getString("lastName"));

    }

    @SuppressWarnings("unchecked")
    public void testSynchronousJSONArrayPostRequest404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        ANRequest request = AndroidNetworking.post(server.url("/").toString())
                .addBodyParameter("fistName", "Amit")
                .addBodyParameter("lastName", "Shekhar")
                .build();

        ANResponse<JSONObject> response = request.executeForJSONArray();

        ANError error = response.getError();

        assertEquals("data", error.getErrorBody());

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, error.getErrorDetail());

        assertEquals(404, error.getErrorCode());

    }

    public void testResponseBodyAndJSONObjectPost() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));

        final AtomicReference<String> firstNameRef = new AtomicReference<>();
        final AtomicReference<String> lastNameRef = new AtomicReference<>();
        final AtomicReference<Boolean> responseBodySuccess = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.post(server.url("/").toString())
                .addBodyParameter("fistName", "Amit")
                .addBodyParameter("lastName", "Shekhar")
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndJSONObject(new OkHttpResponseAndJSONObjectRequestListener() {
                    @Override
                    public void onResponse(Response okHttpResponse, JSONObject response) {
                        try {
                            firstNameRef.set(response.getString("firstName"));
                            lastNameRef.set(response.getString("lastName"));
                            responseBodySuccess.set(okHttpResponse.isSuccessful());
                            latch.countDown();
                        } catch (JSONException e) {
                            assertTrue(false);
                        }
                    }

                    @Override
                    public void onError(ANError anError) {
                        assertTrue(false);
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertTrue(responseBodySuccess.get());
        assertEquals("Amit", firstNameRef.get());
        assertEquals("Shekhar", lastNameRef.get());
    }

    public void testResponseBodyAndJSONObjectPost404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        final AtomicReference<String> errorBodyRef = new AtomicReference<>();
        final AtomicReference<Integer> errorCodeRef = new AtomicReference<>();
        final AtomicReference<String> errorDetailRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.post(server.url("/").toString())
                .addBodyParameter("fistName", "Amit")
                .addBodyParameter("lastName", "Shekhar")
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndJSONObject(new OkHttpResponseAndJSONObjectRequestListener() {
                    @Override
                    public void onResponse(Response okHttpResponse, JSONObject response) {
                        assertTrue(false);
                    }

                    @Override
                    public void onError(ANError anError) {
                        errorBodyRef.set(anError.getErrorBody());
                        errorDetailRef.set(anError.getErrorDetail());
                        errorCodeRef.set(anError.getErrorCode());
                        latch.countDown();
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());

        assertEquals("data", errorBodyRef.get());

        assertEquals(404, errorCodeRef.get().intValue());
    }

    public void testResponseBodyAndJSONArrayPost() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));

        final AtomicReference<String> firstNameRef = new AtomicReference<>();
        final AtomicReference<String> lastNameRef = new AtomicReference<>();
        final AtomicReference<Boolean> responseBodySuccess = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.post(server.url("/").toString())
                .addBodyParameter("fistName", "Amit")
                .addBodyParameter("lastName", "Shekhar")
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndJSONArray(new OkHttpResponseAndJSONArrayRequestListener() {
                    @Override
                    public void onResponse(Response okHttpResponse, JSONArray response) {
                        try {
                            JSONObject jsonObject = response.getJSONObject(0);
                            firstNameRef.set(jsonObject.getString("firstName"));
                            lastNameRef.set(jsonObject.getString("lastName"));
                            responseBodySuccess.set(okHttpResponse.isSuccessful());
                            latch.countDown();
                        } catch (JSONException e) {
                            assertTrue(false);
                        }
                    }

                    @Override
                    public void onError(ANError anError) {
                        assertTrue(false);
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertTrue(responseBodySuccess.get());
        assertEquals("Amit", firstNameRef.get());
        assertEquals("Shekhar", lastNameRef.get());
    }

    public void testResponseBodyAndJSONArrayPost404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        final AtomicReference<String> errorBodyRef = new AtomicReference<>();
        final AtomicReference<Integer> errorCodeRef = new AtomicReference<>();
        final AtomicReference<String> errorDetailRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.post(server.url("/").toString())
                .addBodyParameter("fistName", "Amit")
                .addBodyParameter("lastName", "Shekhar")
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndJSONArray(new OkHttpResponseAndJSONArrayRequestListener() {
                    @Override
                    public void onResponse(Response okHttpResponse, JSONArray response) {
                        assertTrue(false);
                    }

                    @Override
                    public void onError(ANError anError) {
                        errorBodyRef.set(anError.getErrorBody());
                        errorDetailRef.set(anError.getErrorDetail());
                        errorCodeRef.set(anError.getErrorCode());
                        latch.countDown();
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());

        assertEquals("data", errorBodyRef.get());

        assertEquals(404, errorCodeRef.get().intValue());
    }

    public void testHeaderPostRequest() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));

        final AtomicReference<String> firstNameRef = new AtomicReference<>();
        final AtomicReference<String> lastNameRef = new AtomicReference<>();
        final AtomicReference<String> headerRef = new AtomicReference<>();
        final AtomicReference<Boolean> responseBodySuccess = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.post(server.url("/").toString())
                .addHeaders("headerKey", "headerValue")
                .addBodyParameter("fistName", "Amit")
                .addBodyParameter("lastName", "Shekhar")
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndJSONObject(new OkHttpResponseAndJSONObjectRequestListener() {
                    @Override
                    public void onResponse(Response okHttpResponse, JSONObject response) {
                        try {
                            firstNameRef.set(response.getString("firstName"));
                            lastNameRef.set(response.getString("lastName"));
                            responseBodySuccess.set(okHttpResponse.isSuccessful());
                            headerRef.set(okHttpResponse.request().header("headerKey"));
                            latch.countDown();
                        } catch (JSONException e) {
                            assertTrue(false);
                        }
                    }

                    @Override
                    public void onError(ANError anError) {
                        assertTrue(false);
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertTrue(responseBodySuccess.get());
        assertEquals("Amit", firstNameRef.get());
        assertEquals("Shekhar", lastNameRef.get());
        assertEquals("headerValue", headerRef.get());
    }

}


================================================
FILE: android-networking/src/androidTest/java/com/androidnetworking/PostObjectApiTest.java
================================================
/*
 *
 *  *    Copyright (C) 2016 Amit Shekhar
 *  *    Copyright (C) 2011 Android Open Source Project
 *  *
 *  *    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.androidnetworking;

import android.app.Application;
import android.test.ApplicationTestCase;

import com.androidnetworking.common.ANConstants;
import com.androidnetworking.common.ANRequest;
import com.androidnetworking.common.ANResponse;
import com.androidnetworking.error.ANError;
import com.androidnetworking.interfaces.OkHttpResponseAndParsedRequestListener;
import com.androidnetworking.interfaces.ParsedRequestListener;
import com.androidnetworking.model.User;

import org.json.JSONException;
import org.junit.Rule;

import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicReference;

import okhttp3.Response;
import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.MockWebServer;

import static java.util.concurrent.TimeUnit.SECONDS;

/**
 * Created by amitshekhar on 11/04/17.
 */

public class PostObjectApiTest extends ApplicationTestCase<Application> {

    @Rule
    public final MockWebServer server = new MockWebServer();

    public PostObjectApiTest() {
        super(Application.class);
    }

    @Override
    public void setUp() throws Exception {
        super.setUp();
        createApplication();
    }

    public void testObjectPostRequest() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));

        final AtomicReference<String> firstNameRef = new AtomicReference<>();
        final AtomicReference<String> lastNameRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.post(server.url("/").toString())
                .addBodyParameter("fistName", "Amit")
                .addBodyParameter("lastName", "Shekhar")
                .build()
                .getAsObject(User.class, new ParsedRequestListener<User>() {
                    @Override
                    public void onResponse(User user) {
                        firstNameRef.set(user.firstName);
                        lastNameRef.set(user.lastName);
                        latch.countDown();
                    }

                    @Override
                    public void onError(ANError anError) {
                        assertTrue(false);
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals("Amit", firstNameRef.get());
        assertEquals("Shekhar", lastNameRef.get());
    }

    public void testObjectPostRequest404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        final AtomicReference<String> errorDetailRef = new AtomicReference<>();
        final AtomicReference<String> errorBodyRef = new AtomicReference<>();
        final AtomicReference<Integer> errorCodeRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.post(server.url("/").toString())
                .addBodyParameter("fistName", "Amit")
                .addBodyParameter("lastName", "Shekhar")
                .build()
                .getAsObject(User.class, new ParsedRequestListener<User>() {
                    @Override
                    public void onResponse(User user) {
                        assertTrue(false);
                    }

                    @Override
                    public void onError(ANError anError) {
                        errorBodyRef.set(anError.getErrorBody());
                        errorDetailRef.set(anError.getErrorDetail());
                        errorCodeRef.set(anError.getErrorCode());
                        latch.countDown();
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());

        assertEquals("data", errorBodyRef.get());

        assertEquals(404, errorCodeRef.get().intValue());

    }

    public void testObjectListPostRequest() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));

        final AtomicReference<String> firstNameRef = new AtomicReference<>();
        final AtomicReference<String> lastNameRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.post(server.url("/").toString())
                .addBodyParameter("fistName", "Amit")
                .addBodyParameter("lastName", "Shekhar")
                .build()
                .getAsObjectList(User.class, new ParsedRequestListener<List<User>>() {
                    @Override
                    public void onResponse(List<User> userList) {
                        firstNameRef.set(userList.get(0).firstName);
                        lastNameRef.set(userList.get(0).lastName);
                        latch.countDown();
                    }

                    @Override
                    public void onError(ANError anError) {
                        assertTrue(false);
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals("Amit", firstNameRef.get());
        assertEquals("Shekhar", lastNameRef.get());
    }

    public void testObjectListPostRequest404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        final AtomicReference<String> errorDetailRef = new AtomicReference<>();
        final AtomicReference<String> errorBodyRef = new AtomicReference<>();
        final AtomicReference<Integer> errorCodeRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.post(server.url("/").toString())
                .addBodyParameter("fistName", "Amit")
                .addBodyParameter("lastName", "Shekhar")
                .build()
                .getAsObjectList(User.class, new ParsedRequestListener<List<User>>() {
                    @Override
                    public void onResponse(List<User> userList) {
                        assertTrue(false);
                    }

                    @Override
                    public void onError(ANError anError) {
                        errorBodyRef.set(anError.getErrorBody());
                        errorDetailRef.set(anError.getErrorDetail());
                        errorCodeRef.set(anError.getErrorCode());
                        latch.countDown();
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());

        assertEquals("data", errorBodyRef.get());

        assertEquals(404, errorCodeRef.get().intValue());

    }

    @SuppressWarnings("unchecked")
    public void testSynchronousObjectPostRequest() throws InterruptedException, JSONException {

        server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));

        ANRequest request = AndroidNetworking.post(server.url("/").toString())
                .addBodyParameter("fistName", "Amit")
                .addBodyParameter("lastName", "Shekhar")
                .build();

        ANResponse<User> response = request.executeForObject(User.class);

        assertEquals("Amit", response.getResult().firstName);

        assertEquals("Shekhar", response.getResult().lastName);
    }

    @SuppressWarnings("unchecked")
    public void testSynchronousObjectPostRequest404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        ANRequest request = AndroidNetworking.post(server.url("/").toString())
                .addBodyParameter("fistName", "Amit")
                .addBodyParameter("lastName", "Shekhar")
                .build();

        ANResponse<User> response = request.executeForObject(User.class);

        ANError error = response.getError();

        assertEquals("data", error.getErrorBody());

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, error.getErrorDetail());

        assertEquals(404, error.getErrorCode());

    }

    @SuppressWarnings("unchecked")
    public void testSynchronousObjectListPostRequest() throws InterruptedException, JSONException {

        server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));

        ANRequest request = AndroidNetworking.post(server.url("/").toString())
                .addBodyParameter("fistName", "Amit")
                .addBodyParameter("lastName", "Shekhar")
                .build();

        ANResponse<List<User>> response = request.executeForObjectList(User.class);

        User user = response.getResult().get(0);

        assertEquals("Amit", user.firstName);

        assertEquals("Shekhar", user.lastName);

    }

    @SuppressWarnings("unchecked")
    public void testSynchronousObjectListPostRequest404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        ANRequest request = AndroidNetworking.post(server.url("/").toString())
                .addBodyParameter("fistName", "Amit")
                .addBodyParameter("lastName", "Shekhar")
                .build();

        ANResponse<List<User>> response = request.executeForObjectList(User.class);

        ANError error = response.getError();

        assertEquals("data", error.getErrorBody());

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, error.getErrorDetail());

        assertEquals(404, error.getErrorCode());

    }

    public void testResponseBodyAndObjectPost() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));

        final AtomicReference<String> firstNameRef = new AtomicReference<>();
        final AtomicReference<String> lastNameRef = new AtomicReference<>();
        final AtomicReference<Boolean> responseBodySuccess = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.post(server.url("/").toString())
                .addBodyParameter("fistName", "Amit")
                .addBodyParameter("lastName", "Shekhar")
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndObject(User.class,
                        new OkHttpResponseAndParsedRequestListener<User>() {
                            @Override
                            public void onResponse(Response okHttpResponse, User user) {
                                firstNameRef.set(user.firstName);
                                lastNameRef.set(user.lastName);
                                responseBodySuccess.set(okHttpResponse.isSuccessful());
                                latch.countDown();
                            }

                            @Override
                            public void onError(ANError anError) {
                                assertTrue(false);
                            }
                        });

        assertTrue(latch.await(2, SECONDS));

        assertTrue(responseBodySuccess.get());
        assertEquals("Amit", firstNameRef.get());
        assertEquals("Shekhar", lastNameRef.get());
    }

    public void testResponseBodyAndObjectPost404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        final AtomicReference<String> errorBodyRef = new AtomicReference<>();
        final AtomicReference<Integer> errorCodeRef = new AtomicReference<>();
        final AtomicReference<String> errorDetailRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.post(server.url("/").toString())
                .addBodyParameter("fistName", "Amit")
                .addBodyParameter("lastName", "Shekhar")
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndObject(User.class,
                        new OkHttpResponseAndParsedRequestListener<User>() {
                            @Override
                            public void onResponse(Response okHttpResponse, User user) {
                                assertTrue(false);
                            }

                            @Override
                            public void onError(ANError anError) {
                                errorBodyRef.set(anError.getErrorBody());
                                errorDetailRef.set(anError.getErrorDetail());
                                errorCodeRef.set(anError.getErrorCode());
                                latch.countDown();
                            }
                        });

        assertTrue(latch.await(2, SECONDS));

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());

        assertEquals("data", errorBodyRef.get());

        assertEquals(404, errorCodeRef.get().intValue());
    }

    public void testResponseBodyAndObjectListPost() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));

        final AtomicReference<String> firstNameRef = new AtomicReference<>();
        final AtomicReference<String> lastNameRef = new AtomicReference<>();
        final AtomicReference<Boolean> responseBodySuccess = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.post(server.url("/").toString())
                .addBodyParameter("fistName", "Amit")
                .addBodyParameter("lastName", "Shekhar")
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndObjectList(User.class,
                        new OkHttpResponseAndParsedRequestListener<List<User>>() {
                            @Override
                            public void onResponse(Response okHttpResponse, List<User> userList) {
                                firstNameRef.set(userList.get(0).firstName);
                                lastNameRef.set(userList.get(0).lastName);
                                responseBodySuccess.set(okHttpResponse.isSuccessful());
                                latch.countDown();
                            }

                            @Override
                            public void onError(ANError anError) {
                                assertTrue(false);
                            }
                        });

        assertTrue(latch.await(2, SECONDS));

        assertTrue(responseBodySuccess.get());
        assertEquals("Amit", firstNameRef.get());
        assertEquals("Shekhar", lastNameRef.get());
    }

    public void testResponseBodyAndObjectListPost404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        final AtomicReference<String> errorBodyRef = new AtomicReference<>();
        final AtomicReference<Integer> errorCodeRef = new AtomicReference<>();
        final AtomicReference<String> errorDetailRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.post(server.url("/").toString())
                .addBodyParameter("fistName", "Amit")
                .addBodyParameter("lastName", "Shekhar")
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndObjectList(User.class,
                        new OkHttpResponseAndParsedRequestListener<List<User>>() {
                            @Override
                            public void onResponse(Response okHttpResponse, List<User> userList) {
                                assertTrue(false);
                            }

                            @Override
                            public void onError(ANError anError) {
                                errorBodyRef.set(anError.getErrorBody());
                                errorDetailRef.set(anError.getErrorDetail());
                                errorCodeRef.set(anError.getErrorCode());
                                latch.countDown();
                            }
                        });

        assertTrue(latch.await(2, SECONDS));

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());

        assertEquals("data", errorBodyRef.get());

        assertEquals(404, errorCodeRef.get().intValue());
    }

    public void testHeaderPostRequest() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));

        final AtomicReference<String> firstNameRef = new AtomicReference<>();
        final AtomicReference<String> lastNameRef = new AtomicReference<>();
        final AtomicReference<String> headerRef = new AtomicReference<>();
        final AtomicReference<Boolean> responseBodySuccess = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.post(server.url("/").toString())
                .addHeaders("headerKey", "headerValue")
                .addBodyParameter("fistName", "Amit")
                .addBodyParameter("lastName", "Shekhar")
                .setExecutor(Executors.newSingleThreadExecutor())
                .build()
                .getAsOkHttpResponseAndObject(User.class,
                        new OkHttpResponseAndParsedRequestListener<User>() {
                            @Override
                            public void onResponse(Response okHttpResponse, User user) {
                                firstNameRef.set(user.firstName);
                                lastNameRef.set(user.lastName);
                                responseBodySuccess.set(okHttpResponse.isSuccessful());
                                headerRef.set(okHttpResponse.request().header("headerKey"));
                                latch.countDown();
                            }

                            @Override
                            public void onError(ANError anError) {
                                assertTrue(false);
                            }
                        });

        assertTrue(latch.await(2, SECONDS));

        assertTrue(responseBodySuccess.get());
        assertEquals("Amit", firstNameRef.get());
        assertEquals("Shekhar", lastNameRef.get());
        assertEquals("headerValue", headerRef.get());
    }

}


================================================
FILE: android-networking/src/androidTest/java/com/androidnetworking/PostStringApiTest.java
================================================
/*
 *
 *  *    Copyright (C) 2016 Amit Shekhar
 *  *    Copyright (C) 2011 Android Open Source Project
 *  *
 *  *    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.androidnetworking;

import android.app.Application;
import android.test.ApplicationTestCase;

import com.androidnetworking.common.ANConstants;
import com.androidnetworking.common.ANRequest;
import com.androidnetworking.common.ANResponse;
import com.androidnetworking.error.ANError;
import com.androidnetworking.interfaces.OkHttpResponseAndStringRequestListener;
import com.androidnetworking.interfaces.OkHttpResponseListener;
import com.androidnetworking.interfaces.StringRequestListener;

import org.junit.Rule;

import java.io.IOException;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicReference;

import okhttp3.Response;
import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.MockWebServer;

import static java.util.concurrent.TimeUnit.SECONDS;

/**
 * Created by amitshekhar on 25/03/17.
 */

public class PostStringApiTest extends ApplicationTestCase<Application> {

    @Rule
    public final MockWebServer server = new MockWebServer();

    public PostStringApiTest() {
        super(Application.class);
    }

    @Override
    public void setUp() throws Exception {
        super.setUp();
        createApplication();
    }

    public void testStringPostRequest() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("data"));

        final AtomicReference<String> responseRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.post(server.url("/").toString())
                .addBodyParameter("fistName", "Amit")
                .addBodyParameter("lastName", "Shekhar")
                .build()
                .getAsString(new StringRequestListener() {
                    @Override
                    public void onResponse(String response) {
                        responseRef.set(response);
                        latch.countDown();
                    }

                    @Override
                    public void onError(ANError anError) {
                        assertTrue(false);
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals("data", responseRef.get());
    }


    public void testStringPostRequest404() throws InterruptedException {

        server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));

        final AtomicReference<String> errorDetailRef = new AtomicReference<>();
        final AtomicReference<String> errorBodyRef = new AtomicReference<>();
        final AtomicReference<Integer> errorCodeRef = new AtomicReference<>();
        final CountDownLatch latch = new CountDownLatch(1);

        AndroidNetworking.post(server.url("/").toString())
                .addBodyParameter("fistName", "Amit")
                .addBodyParameter("lastName", "Shekhar")
                .build()
                .getAsString(new StringRequestListener() {
                    @Override
                    public void onResponse(String response) {
                        assertTrue(false);
                    }

                    @Override
                    public void onError(ANError anError) {
                        errorBodyRef.set(anError.getErrorBody());
                        errorDetailRef.set(anError.getErrorDetail());
                        errorCodeRef.set(anError.getErrorCode());
                        latch.countDown();
                    }
                });

        assertTrue(latch.await(2, SECONDS));

        assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());

        assertEquals("data", errorBodyRef.get());

        assertEquals(404, errorCodeRef.get().intValue());
    }

    @SuppressWarnings("unchecked")
    public void testSynchronousStringPostRequest() throws InterruptedException {

        server.enqueue(new MockResponse().setBody("data"));

        ANRequest request = AndroidNetworking.post(server.url("/").toString())
                .addBodyParameter("fistName", "Amit")
                .addBodyParameter("lastName", "Shekhar")
                .build();

        ANResponse<String> response = 
Download .txt
gitextract_9srekgqo/

├── .gitignore
├── .travis.yml
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── android-networking/
│   ├── .gitignore
│   ├── build.gradle
│   ├── proguard-rules.pro
│   └── src/
│       ├── androidTest/
│       │   ├── AndroidManifest.xml
│       │   └── java/
│       │       └── com/
│       │           └── androidnetworking/
│       │               ├── GetJSONApiTest.java
│       │               ├── GetObjectApiTest.java
│       │               ├── GetStringApiTest.java
│       │               ├── MultipartJSONApiTest.java
│       │               ├── MultipartObjectApiTest.java
│       │               ├── MultipartStringApiTest.java
│       │               ├── PostJSONApiTest.java
│       │               ├── PostObjectApiTest.java
│       │               ├── PostStringApiTest.java
│       │               └── model/
│       │                   └── User.java
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── androidnetworking/
│       │   │           ├── AndroidNetworking.java
│       │   │           ├── cache/
│       │   │           │   ├── LruBitmapCache.java
│       │   │           │   └── LruCache.java
│       │   │           ├── common/
│       │   │           │   ├── ANConstants.java
│       │   │           │   ├── ANRequest.java
│       │   │           │   ├── ANResponse.java
│       │   │           │   ├── ConnectionClassManager.java
│       │   │           │   ├── ConnectionQuality.java
│       │   │           │   ├── Method.java
│       │   │           │   ├── Priority.java
│       │   │           │   ├── RequestBuilder.java
│       │   │           │   ├── RequestType.java
│       │   │           │   └── ResponseType.java
│       │   │           ├── core/
│       │   │           │   ├── ANExecutor.java
│       │   │           │   ├── Core.java
│       │   │           │   ├── DefaultExecutorSupplier.java
│       │   │           │   ├── ExecutorSupplier.java
│       │   │           │   ├── MainThreadExecutor.java
│       │   │           │   └── PriorityThreadFactory.java
│       │   │           ├── error/
│       │   │           │   └── ANError.java
│       │   │           ├── gsonparserfactory/
│       │   │           │   ├── GsonParserFactory.java
│       │   │           │   ├── GsonRequestBodyParser.java
│       │   │           │   └── GsonResponseBodyParser.java
│       │   │           ├── interceptors/
│       │   │           │   ├── GzipRequestInterceptor.java
│       │   │           │   └── HttpLoggingInterceptor.java
│       │   │           ├── interfaces/
│       │   │           │   ├── AnalyticsListener.java
│       │   │           │   ├── BitmapRequestListener.java
│       │   │           │   ├── ConnectionQualityChangeListener.java
│       │   │           │   ├── DownloadListener.java
│       │   │           │   ├── DownloadProgressListener.java
│       │   │           │   ├── JSONArrayRequestListener.java
│       │   │           │   ├── JSONObjectRequestListener.java
│       │   │           │   ├── OkHttpResponseAndBitmapRequestListener.java
│       │   │           │   ├── OkHttpResponseAndJSONArrayRequestListener.java
│       │   │           │   ├── OkHttpResponseAndJSONObjectRequestListener.java
│       │   │           │   ├── OkHttpResponseAndParsedRequestListener.java
│       │   │           │   ├── OkHttpResponseAndStringRequestListener.java
│       │   │           │   ├── OkHttpResponseListener.java
│       │   │           │   ├── ParsedRequestListener.java
│       │   │           │   ├── Parser.java
│       │   │           │   ├── StringRequestListener.java
│       │   │           │   └── UploadProgressListener.java
│       │   │           ├── internal/
│       │   │           │   ├── ANImageLoader.java
│       │   │           │   ├── ANRequestQueue.java
│       │   │           │   ├── DownloadProgressHandler.java
│       │   │           │   ├── InternalNetworking.java
│       │   │           │   ├── InternalRunnable.java
│       │   │           │   ├── RequestProgressBody.java
│       │   │           │   ├── ResponseProgressBody.java
│       │   │           │   ├── SynchronousCall.java
│       │   │           │   └── UploadProgressHandler.java
│       │   │           ├── model/
│       │   │           │   ├── MultipartFileBody.java
│       │   │           │   ├── MultipartStringBody.java
│       │   │           │   └── Progress.java
│       │   │           ├── utils/
│       │   │           │   ├── ParseUtil.java
│       │   │           │   ├── SourceCloseUtil.java
│       │   │           │   └── Utils.java
│       │   │           └── widget/
│       │   │               └── ANImageView.java
│       │   └── res/
│       │       └── values/
│       │           └── strings.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── androidnetworking/
│                       └── ExampleUnitTest.java
├── app/
│   ├── .gitignore
│   ├── build.gradle
│   ├── proguard-rules.pro
│   └── src/
│       ├── androidTest/
│       │   └── java/
│       │       └── com/
│       │           └── androidnetworking/
│       │               └── ApplicationTest.java
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── networking/
│       │   │           ├── ApiEndPoint.java
│       │   │           ├── ApiTestActivity.java
│       │   │           ├── ImageGridActivity.java
│       │   │           ├── MainActivity.java
│       │   │           ├── MyApplication.java
│       │   │           ├── OkHttpResponseTestActivity.java
│       │   │           ├── WebSocketActivity.java
│       │   │           ├── fragments/
│       │   │           │   └── ImageGridFragment.java
│       │   │           ├── model/
│       │   │           │   └── User.java
│       │   │           ├── provider/
│       │   │           │   └── Images.java
│       │   │           └── utils/
│       │   │               └── Utils.java
│       │   └── res/
│       │       ├── drawable/
│       │       │   └── photogrid_list_selector.xml
│       │       ├── layout/
│       │       │   ├── activity_api_test.xml
│       │       │   ├── activity_main.xml
│       │       │   ├── activity_web_socket.xml
│       │       │   └── image_grid_fragment.xml
│       │       ├── values/
│       │       │   ├── colors.xml
│       │       │   ├── dimens.xml
│       │       │   ├── strings.xml
│       │       │   └── styles.xml
│       │       └── values-w820dp/
│       │           └── dimens.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── androidnetworking/
│                       └── ExampleUnitTest.java
├── build.gradle
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── jackson-android-networking/
│   ├── .gitignore
│   ├── build.gradle
│   ├── proguard-rules.pro
│   └── src/
│       ├── androidTest/
│       │   ├── AndroidManifest.xml
│       │   └── java/
│       │       └── com/
│       │           └── jacksonandroidnetworking/
│       │               ├── JacksonGetObjectApiTest.java
│       │               ├── JacksonPostObjectApiTest.java
│       │               └── model/
│       │                   └── User.java
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── jacksonandroidnetworking/
│       │   │           ├── JacksonParserFactory.java
│       │   │           ├── JacksonRequestBodyParser.java
│       │   │           └── JacksonResponseBodyParser.java
│       │   └── res/
│       │       └── values/
│       │           └── strings.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── jacksonandroidnetworking/
│                       └── ExampleUnitTest.java
├── rx-android-networking/
│   ├── .gitignore
│   ├── build.gradle
│   ├── proguard-rules.pro
│   └── src/
│       ├── androidTest/
│       │   └── java/
│       │       └── com/
│       │           └── rxandroidnetworking/
│       │               └── ApplicationTest.java
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── rxandroidnetworking/
│       │   │           ├── RxANRequest.java
│       │   │           ├── RxAndroidNetworking.java
│       │   │           └── RxInternalNetworking.java
│       │   └── res/
│       │       └── values/
│       │           └── strings.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── rxandroidnetworking/
│                       └── ExampleUnitTest.java
├── rx2-android-networking/
│   ├── .gitignore
│   ├── build.gradle
│   ├── proguard-rules.pro
│   └── src/
│       ├── androidTest/
│       │   ├── AndroidManifest.xml
│       │   └── java/
│       │       └── com/
│       │           └── rx2androidnetworking/
│       │               ├── Rx2GetJSONApiTest.java
│       │               ├── Rx2GetObjectApiTest.java
│       │               ├── Rx2GetStringApiTest.java
│       │               ├── Rx2MultipartJSONApiTest.java
│       │               ├── Rx2MultipartObjectApiTest.java
│       │               ├── Rx2MultipartStringApiTest.java
│       │               ├── Rx2PostJSONApiTest.java
│       │               ├── Rx2PostObjectApiTest.java
│       │               ├── Rx2PostStringApiTest.java
│       │               └── model/
│       │                   └── User.java
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── rx2androidnetworking/
│       │   │           ├── Rx2ANRequest.java
│       │   │           ├── Rx2AndroidNetworking.java
│       │   │           └── Rx2InternalNetworking.java
│       │   └── res/
│       │       └── values/
│       │           └── strings.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── rx2androidnetworking/
│                       └── ExampleUnitTest.java
├── rx2sampleapp/
│   ├── .gitignore
│   ├── build.gradle
│   ├── proguard-rules.pro
│   └── src/
│       ├── androidTest/
│       │   └── java/
│       │       └── com/
│       │           └── rx2sampleapp/
│       │               └── ExampleInstrumentedTest.java
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── rx2sampleapp/
│       │   │           ├── ApiEndPoint.java
│       │   │           ├── Rx2ApiTestActivity.java
│       │   │           ├── Rx2MyApplication.java
│       │   │           ├── Rx2OperatorExampleActivity.java
│       │   │           ├── SubscriptionActivity.java
│       │   │           ├── model/
│       │   │           │   ├── ApiUser.java
│       │   │           │   ├── User.java
│       │   │           │   └── UserDetail.java
│       │   │           └── utils/
│       │   │               └── Utils.java
│       │   └── res/
│       │       ├── layout/
│       │       │   ├── activity_rx_api_test.xml
│       │       │   ├── activity_rx_operator_example.xml
│       │       │   └── activity_subscription.xml
│       │       ├── values/
│       │       │   ├── colors.xml
│       │       │   ├── dimens.xml
│       │       │   ├── strings.xml
│       │       │   └── styles.xml
│       │       └── values-w820dp/
│       │           └── dimens.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── rx2sampleapp/
│                       └── ExampleUnitTest.java
├── rxsampleapp/
│   ├── .gitignore
│   ├── build.gradle
│   ├── proguard-rules.pro
│   └── src/
│       ├── androidTest/
│       │   └── java/
│       │       └── com/
│       │           └── rxsampleapp/
│       │               └── ApplicationTest.java
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── rxsampleapp/
│       │   │           ├── ApiEndPoint.java
│       │   │           ├── RxApiTestActivity.java
│       │   │           ├── RxMyApplication.java
│       │   │           ├── RxOperatorExampleActivity.java
│       │   │           ├── SubscriptionActivity.java
│       │   │           ├── model/
│       │   │           │   ├── ApiUser.java
│       │   │           │   ├── User.java
│       │   │           │   └── UserDetail.java
│       │   │           └── utils/
│       │   │               └── Utils.java
│       │   └── res/
│       │       ├── layout/
│       │       │   ├── activity_rx_api_test.xml
│       │       │   ├── activity_rx_operator_example.xml
│       │       │   └── activity_subscription.xml
│       │       └── values/
│       │           ├── colors.xml
│       │           ├── dimens.xml
│       │           ├── strings.xml
│       │           └── styles.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── rxsampleapp/
│                       └── ExampleUnitTest.java
└── settings.gradle
Download .txt
SYMBOL INDEX (1262 symbols across 130 files)

FILE: android-networking/src/androidTest/java/com/androidnetworking/GetJSONApiTest.java
  class GetJSONApiTest (line 53) | public class GetJSONApiTest extends ApplicationTestCase<Application> {
    method GetJSONApiTest (line 58) | public GetJSONApiTest() {
    method setUp (line 62) | @Override
    method testJSONObjectGetRequest (line 68) | public void testJSONObjectGetRequest() throws InterruptedException {
    method testJSONObjectGetRequest404 (line 102) | public void testJSONObjectGetRequest404() throws InterruptedException {
    method testJSONArrayGetRequest (line 138) | public void testJSONArrayGetRequest() throws InterruptedException {
    method testJSONArrayGetRequest404 (line 173) | public void testJSONArrayGetRequest404() throws InterruptedException {
    method testSynchronousJSONObjectGetRequest (line 209) | @SuppressWarnings("unchecked")
    method testSynchronousJSONObjectGetRequest404 (line 223) | @SuppressWarnings("unchecked")
    method testSynchronousJSONArrayGetRequest (line 242) | @SuppressWarnings("unchecked")
    method testSynchronousJSONArrayGetRequest404 (line 259) | @SuppressWarnings("unchecked")
    method testResponseBodyAndJSONObjectGet (line 278) | public void testResponseBodyAndJSONObjectGet() throws InterruptedExcep...
    method testResponseBodyAndJSONObjectGet404 (line 316) | public void testResponseBodyAndJSONObjectGet404() throws InterruptedEx...
    method testResponseBodyAndJSONArrayGet (line 352) | public void testResponseBodyAndJSONArrayGet() throws InterruptedExcept...
    method testResponseBodyAndJSONArrayGet404 (line 391) | public void testResponseBodyAndJSONArrayGet404() throws InterruptedExc...
    method testHeaderGetRequest (line 427) | public void testHeaderGetRequest() throws InterruptedException {

FILE: android-networking/src/androidTest/java/com/androidnetworking/GetObjectApiTest.java
  class GetObjectApiTest (line 51) | public class GetObjectApiTest extends ApplicationTestCase<Application> {
    method GetObjectApiTest (line 56) | public GetObjectApiTest() {
    method setUp (line 60) | @Override
    method testObjectGetRequest (line 66) | public void testObjectGetRequest() throws InterruptedException {
    method testObjectGetRequest404 (line 96) | public void testObjectGetRequest404() throws InterruptedException {
    method testObjectListGetRequest (line 132) | public void testObjectListGetRequest() throws InterruptedException {
    method testObjectListGetRequest404 (line 162) | public void testObjectListGetRequest404() throws InterruptedException {
    method testSynchronousObjectGetRequest (line 198) | @SuppressWarnings("unchecked")
    method testSynchronousObjectGetRequest404 (line 212) | @SuppressWarnings("unchecked")
    method testSynchronousObjectListGetRequest (line 231) | @SuppressWarnings("unchecked")
    method testSynchronousObjectListGetRequest404 (line 248) | @SuppressWarnings("unchecked")
    method testResponseBodyAndObjectGet (line 267) | public void testResponseBodyAndObjectGet() throws InterruptedException {
    method testResponseBodyAndObjectGet404 (line 302) | public void testResponseBodyAndObjectGet404() throws InterruptedExcept...
    method testResponseBodyAndObjectListGet (line 339) | public void testResponseBodyAndObjectListGet() throws InterruptedExcep...
    method testResponseBodyAndObjectListGet404 (line 374) | public void testResponseBodyAndObjectListGet404() throws InterruptedEx...
    method testHeaderGetRequest (line 411) | public void testHeaderGetRequest() throws InterruptedException {

FILE: android-networking/src/androidTest/java/com/androidnetworking/GetStringApiTest.java
  class GetStringApiTest (line 44) | public class GetStringApiTest extends ApplicationTestCase<Application> {
    method GetStringApiTest (line 49) | public GetStringApiTest() {
    method setUp (line 53) | @Override
    method testStringGetRequest (line 59) | public void testStringGetRequest() throws InterruptedException {
    method testStringGetRequest404 (line 86) | public void testStringGetRequest404() throws InterruptedException {
    method testSynchronousStringGetRequest (line 122) | @SuppressWarnings("unchecked")
    method testSynchronousStringGetRequest404 (line 134) | @SuppressWarnings("unchecked")
    method testResponseBodyGet (line 152) | public void testResponseBodyGet() throws InterruptedException {
    method testResponseBodyGet404 (line 184) | public void testResponseBodyGet404() throws InterruptedException {
    method testSyncResponseBodyGet (line 220) | @SuppressWarnings("unchecked")
    method testSyncResponseBodyGet404 (line 233) | @SuppressWarnings("unchecked")
    method testResponseBodyAndStringGet (line 247) | public void testResponseBodyAndStringGet() throws InterruptedException {
    method testResponseBodyAndStringGet404 (line 278) | public void testResponseBodyAndStringGet404() throws InterruptedExcept...
    method testHeaderGetRequest (line 314) | public void testHeaderGetRequest() throws InterruptedException {

FILE: android-networking/src/androidTest/java/com/androidnetworking/MultipartJSONApiTest.java
  class MultipartJSONApiTest (line 53) | public class MultipartJSONApiTest extends ApplicationTestCase<Applicatio...
    method MultipartJSONApiTest (line 58) | public MultipartJSONApiTest() {
    method setUp (line 62) | @Override
    method testJSONObjectMultipartRequest (line 68) | public void testJSONObjectMultipartRequest() throws InterruptedExcepti...
    method testJSONObjectMultipartRequest404 (line 103) | public void testJSONObjectMultipartRequest404() throws InterruptedExce...
    method testJSONArrayMultipartRequest (line 140) | public void testJSONArrayMultipartRequest() throws InterruptedException {
    method testJSONArrayMultipartRequest404 (line 176) | public void testJSONArrayMultipartRequest404() throws InterruptedExcep...
    method testSynchronousJSONObjectMultipartRequest (line 213) | @SuppressWarnings("unchecked")
    method testSynchronousJSONObjectMultipartRequest404 (line 229) | @SuppressWarnings("unchecked")
    method testSynchronousJSONArrayMultipartRequest (line 250) | @SuppressWarnings("unchecked")
    method testSynchronousJSONArrayMultipartRequest404 (line 269) | @SuppressWarnings("unchecked")
    method testResponseBodyAndJSONObjectMultipart (line 290) | public void testResponseBodyAndJSONObjectMultipart() throws Interrupte...
    method testResponseBodyAndJSONObjectMultipart404 (line 329) | public void testResponseBodyAndJSONObjectMultipart404() throws Interru...
    method testResponseBodyAndJSONArrayMultipart (line 366) | public void testResponseBodyAndJSONArrayMultipart() throws Interrupted...
    method testResponseBodyAndJSONArrayMultipart404 (line 406) | public void testResponseBodyAndJSONArrayMultipart404() throws Interrup...
    method testHeaderMultipartRequest (line 443) | public void testHeaderMultipartRequest() throws InterruptedException {

FILE: android-networking/src/androidTest/java/com/androidnetworking/MultipartObjectApiTest.java
  class MultipartObjectApiTest (line 51) | public class MultipartObjectApiTest extends ApplicationTestCase<Applicat...
    method MultipartObjectApiTest (line 56) | public MultipartObjectApiTest() {
    method setUp (line 60) | @Override
    method testObjectMultipartRequest (line 66) | public void testObjectMultipartRequest() throws InterruptedException {
    method testObjectMultipartRequest404 (line 97) | public void testObjectMultipartRequest404() throws InterruptedException {
    method testObjectListMultipartRequest (line 134) | public void testObjectListMultipartRequest() throws InterruptedExcepti...
    method testObjectListMultipartRequest404 (line 165) | public void testObjectListMultipartRequest404() throws InterruptedExce...
    method testSynchronousObjectMultipartRequest (line 202) | @SuppressWarnings("unchecked")
    method testSynchronousObjectMultipartRequest404 (line 218) | @SuppressWarnings("unchecked")
    method testSynchronousObjectListMultipartRequest (line 239) | @SuppressWarnings("unchecked")
    method testSynchronousObjectListMultipartRequest404 (line 258) | @SuppressWarnings("unchecked")
    method testResponseBodyAndObjectMultipart (line 279) | public void testResponseBodyAndObjectMultipart() throws InterruptedExc...
    method testResponseBodyAndObjectMultipart404 (line 315) | public void testResponseBodyAndObjectMultipart404() throws Interrupted...
    method testResponseBodyAndObjectListMultipart (line 353) | public void testResponseBodyAndObjectListMultipart() throws Interrupte...
    method testResponseBodyAndObjectListMultipart404 (line 389) | public void testResponseBodyAndObjectListMultipart404() throws Interru...
    method testHeaderMultipartRequest (line 427) | public void testHeaderMultipartRequest() throws InterruptedException {

FILE: android-networking/src/androidTest/java/com/androidnetworking/MultipartStringApiTest.java
  class MultipartStringApiTest (line 52) | public class MultipartStringApiTest extends ApplicationTestCase<Applicat...
    method MultipartStringApiTest (line 57) | public MultipartStringApiTest() {
    method setUp (line 61) | @Override
    method testStringMultipartRequest (line 67) | public void testStringMultipartRequest() throws InterruptedException {
    method testStringMultipartRequest404 (line 95) | public void testStringMultipartRequest404() throws InterruptedException {
    method testSynchronousStringMultipartRequest (line 131) | @SuppressWarnings("unchecked")
    method testSynchronousMultipartRequest404 (line 145) | @SuppressWarnings("unchecked")
    method testResponseBodyMultipart (line 165) | public void testResponseBodyMultipart() throws InterruptedException {
    method testResponseBodyMultipart404 (line 198) | public void testResponseBodyMultipart404() throws InterruptedException {
    method testSyncResponseBodyMultipart (line 235) | @SuppressWarnings("unchecked")
    method testSyncResponseBodyMultipart404 (line 250) | @SuppressWarnings("unchecked")
    method testResponseBodyAndStringMultipart (line 266) | public void testResponseBodyAndStringMultipart() throws InterruptedExc...
    method testResponseBodyAndStringMultipart404 (line 298) | public void testResponseBodyAndStringMultipart404() throws Interrupted...
    method testHeaderMultipartRequest (line 335) | public void testHeaderMultipartRequest() throws InterruptedException {

FILE: android-networking/src/androidTest/java/com/androidnetworking/PostJSONApiTest.java
  class PostJSONApiTest (line 53) | public class PostJSONApiTest extends ApplicationTestCase<Application> {
    method PostJSONApiTest (line 58) | public PostJSONApiTest() {
    method setUp (line 62) | @Override
    method testJSONObjectPostRequest (line 68) | public void testJSONObjectPostRequest() throws InterruptedException {
    method testJSONObjectPostRequest404 (line 104) | public void testJSONObjectPostRequest404() throws InterruptedException {
    method testJSONArrayPostRequest (line 142) | public void testJSONArrayPostRequest() throws InterruptedException {
    method testJSONArrayPostRequest404 (line 179) | public void testJSONArrayPostRequest404() throws InterruptedException {
    method testSynchronousJSONObjectPostRequest (line 217) | @SuppressWarnings("unchecked")
    method testSynchronousJSONObjectPostRequest404 (line 234) | @SuppressWarnings("unchecked")
    method testSynchronousJSONArrayPostRequest (line 256) | @SuppressWarnings("unchecked")
    method testSynchronousJSONArrayPostRequest404 (line 276) | @SuppressWarnings("unchecked")
    method testResponseBodyAndJSONObjectPost (line 298) | public void testResponseBodyAndJSONObjectPost() throws InterruptedExce...
    method testResponseBodyAndJSONObjectPost404 (line 338) | public void testResponseBodyAndJSONObjectPost404() throws InterruptedE...
    method testResponseBodyAndJSONArrayPost (line 376) | public void testResponseBodyAndJSONArrayPost() throws InterruptedExcep...
    method testResponseBodyAndJSONArrayPost404 (line 417) | public void testResponseBodyAndJSONArrayPost404() throws InterruptedEx...
    method testHeaderPostRequest (line 455) | public void testHeaderPostRequest() throws InterruptedException {

FILE: android-networking/src/androidTest/java/com/androidnetworking/PostObjectApiTest.java
  class PostObjectApiTest (line 51) | public class PostObjectApiTest extends ApplicationTestCase<Application> {
    method PostObjectApiTest (line 56) | public PostObjectApiTest() {
    method setUp (line 60) | @Override
    method testObjectPostRequest (line 66) | public void testObjectPostRequest() throws InterruptedException {
    method testObjectPostRequest404 (line 98) | public void testObjectPostRequest404() throws InterruptedException {
    method testObjectListPostRequest (line 136) | public void testObjectListPostRequest() throws InterruptedException {
    method testObjectListPostRequest404 (line 168) | public void testObjectListPostRequest404() throws InterruptedException {
    method testSynchronousObjectPostRequest (line 206) | @SuppressWarnings("unchecked")
    method testSynchronousObjectPostRequest404 (line 223) | @SuppressWarnings("unchecked")
    method testSynchronousObjectListPostRequest (line 245) | @SuppressWarnings("unchecked")
    method testSynchronousObjectListPostRequest404 (line 265) | @SuppressWarnings("unchecked")
    method testResponseBodyAndObjectPost (line 287) | public void testResponseBodyAndObjectPost() throws InterruptedException {
    method testResponseBodyAndObjectPost404 (line 324) | public void testResponseBodyAndObjectPost404() throws InterruptedExcep...
    method testResponseBodyAndObjectListPost (line 363) | public void testResponseBodyAndObjectListPost() throws InterruptedExce...
    method testResponseBodyAndObjectListPost404 (line 400) | public void testResponseBodyAndObjectListPost404() throws InterruptedE...
    method testHeaderPostRequest (line 439) | public void testHeaderPostRequest() throws InterruptedException {

FILE: android-networking/src/androidTest/java/com/androidnetworking/PostStringApiTest.java
  class PostStringApiTest (line 50) | public class PostStringApiTest extends ApplicationTestCase<Application> {
    method PostStringApiTest (line 55) | public PostStringApiTest() {
    method setUp (line 59) | @Override
    method testStringPostRequest (line 65) | public void testStringPostRequest() throws InterruptedException {
    method testStringPostRequest404 (line 95) | public void testStringPostRequest404() throws InterruptedException {
    method testSynchronousStringPostRequest (line 132) | @SuppressWarnings("unchecked")
    method testSynchronousStringPostRequest404 (line 147) | @SuppressWarnings("unchecked")
    method testResponseBodyPost (line 168) | public void testResponseBodyPost() throws InterruptedException {
    method testResponseBodyPost404 (line 202) | public void testResponseBodyPost404() throws InterruptedException {
    method testSyncResponseBodyPost (line 240) | @SuppressWarnings("unchecked")
    method testSyncResponseBodyPost404 (line 256) | @SuppressWarnings("unchecked")
    method testResponseBodyAndStringPost (line 273) | public void testResponseBodyAndStringPost() throws InterruptedException {
    method testResponseBodyAndStringPost404 (line 306) | public void testResponseBodyAndStringPost404() throws InterruptedExcep...
    method testHeaderPostRequest (line 344) | public void testHeaderPostRequest() throws InterruptedException {

FILE: android-networking/src/androidTest/java/com/androidnetworking/model/User.java
  class User (line 26) | public class User {

FILE: android-networking/src/main/java/com/androidnetworking/AndroidNetworking.java
  class AndroidNetworking (line 48) | @SuppressWarnings("unused")
    method AndroidNetworking (line 54) | private AndroidNetworking() {
    method initialize (line 62) | public static void initialize(Context context) {
    method initialize (line 74) | public static void initialize(Context context, OkHttpClient okHttpClie...
    method setBitmapDecodeOptions (line 92) | public static void setBitmapDecodeOptions(BitmapFactory.Options decode...
    method setConnectionQualityChangeListener (line 103) | public static void setConnectionQualityChangeListener(ConnectionQualit...
    method removeConnectionQualityChangeListener (line 110) | public static void removeConnectionQualityChangeListener() {
    method get (line 120) | public static ANRequest.GetRequestBuilder get(String url) {
    method head (line 130) | public static ANRequest.HeadRequestBuilder head(String url) {
    method options (line 140) | public static ANRequest.OptionsRequestBuilder options(String url) {
    method post (line 150) | public static ANRequest.PostRequestBuilder post(String url) {
    method put (line 160) | public static ANRequest.PutRequestBuilder put(String url) {
    method delete (line 170) | public static ANRequest.DeleteRequestBuilder delete(String url) {
    method patch (line 180) | public static ANRequest.PatchRequestBuilder patch(String url) {
    method download (line 192) | public static ANRequest.DownloadBuilder download(String url, String di...
    method upload (line 202) | public static ANRequest.MultiPartBuilder upload(String url) {
    method request (line 213) | public static ANRequest.DynamicRequestBuilder request(String url, int ...
    method cancel (line 222) | public static void cancel(Object tag) {
    method forceCancel (line 231) | public static void forceCancel(Object tag) {
    method cancelAll (line 238) | public static void cancelAll() {
    method forceCancelAll (line 245) | public static void forceCancelAll() {
    method enableLogging (line 252) | public static void enableLogging() {
    method enableLogging (line 261) | public static void enableLogging(Level level) {
    method evictBitmap (line 270) | public static void evictBitmap(String key) {
    method evictAllBitmap (line 280) | public static void evictAllBitmap() {
    method setUserAgent (line 292) | public static void setUserAgent(String userAgent) {
    method getCurrentBandwidth (line 301) | public static int getCurrentBandwidth() {
    method getCurrentConnectionQuality (line 310) | public static ConnectionQuality getCurrentConnectionQuality() {
    method setParserFactory (line 319) | public static void setParserFactory(Parser.Factory parserFactory) {
    method isRequestRunning (line 329) | public static boolean isRequestRunning(Object tag) {
    method shutDown (line 336) | public static void shutDown() {

FILE: android-networking/src/main/java/com/androidnetworking/cache/LruBitmapCache.java
  class LruBitmapCache (line 27) | public class LruBitmapCache extends LruCache<String, Bitmap>
    method LruBitmapCache (line 30) | public LruBitmapCache(int maxSize) {
    method sizeOf (line 34) | @Override
    method getBitmap (line 39) | @Override
    method evictBitmap (line 44) | @Override
    method evictAllBitmap (line 49) | @Override
    method putBitmap (line 54) | @Override

FILE: android-networking/src/main/java/com/androidnetworking/cache/LruCache.java
  class LruCache (line 28) | public class LruCache<K, V> {
    method LruCache (line 40) | public LruCache(int maxSize) {
    method resize (line 48) | public void resize(int maxSize) {
    method get (line 59) | public final V get(K key) {
    method put (line 100) | public final V put(K key, V value) {
    method trimToSize (line 123) | public void trimToSize(int maxSize) {
    method remove (line 149) | public final V remove(K key) {
    method entryRemoved (line 169) | protected void entryRemoved(boolean evicted, K key, V oldValue, V newV...
    method create (line 172) | protected V create(K key) {
    method safeSizeOf (line 176) | private int safeSizeOf(K key, V value) {
    method sizeOf (line 184) | protected int sizeOf(K key, V value) {
    method evictAll (line 188) | public final void evictAll() {
    method size (line 192) | public synchronized final int size() {
    method maxSize (line 196) | public synchronized final int maxSize() {
    method hitCount (line 200) | public synchronized final int hitCount() {
    method missCount (line 204) | public synchronized final int missCount() {
    method createCount (line 208) | public synchronized final int createCount() {
    method putCount (line 212) | public synchronized final int putCount() {
    method evictionCount (line 216) | public synchronized final int evictionCount() {
    method snapshot (line 220) | public synchronized final Map<K, V> snapshot() {
    method toString (line 224) | @SuppressLint("DefaultLocale")

FILE: android-networking/src/main/java/com/androidnetworking/common/ANConstants.java
  class ANConstants (line 23) | public final class ANConstants {

FILE: android-networking/src/main/java/com/androidnetworking/common/ANRequest.java
  class ANRequest (line 79) | @SuppressWarnings({"unchecked", "unused"})
    method ANRequest (line 144) | public ANRequest(GetRequestBuilder builder) {
    method ANRequest (line 163) | public ANRequest(PostRequestBuilder builder) {
    method ANRequest (line 187) | public ANRequest(DownloadBuilder builder) {
    method ANRequest (line 205) | public ANRequest(MultiPartBuilder builder) {
    method getAsJSONObject (line 226) | public void getAsJSONObject(JSONObjectRequestListener requestListener) {
    method getAsJSONArray (line 232) | public void getAsJSONArray(JSONArrayRequestListener requestListener) {
    method getAsString (line 238) | public void getAsString(StringRequestListener requestListener) {
    method getAsOkHttpResponse (line 244) | public void getAsOkHttpResponse(OkHttpResponseListener requestListener) {
    method getAsBitmap (line 250) | public void getAsBitmap(BitmapRequestListener requestListener) {
    method getAsParsed (line 256) | public void getAsParsed(TypeToken typeToken, ParsedRequestListener par...
    method getAsObject (line 263) | public void getAsObject(Class objectClass, ParsedRequestListener parse...
    method getAsObjectList (line 270) | public void getAsObjectList(Class objectClass, ParsedRequestListener p...
    method getAsOkHttpResponseAndJSONObject (line 277) | public void getAsOkHttpResponseAndJSONObject(OkHttpResponseAndJSONObje...
    method getAsOkHttpResponseAndJSONArray (line 283) | public void getAsOkHttpResponseAndJSONArray(OkHttpResponseAndJSONArray...
    method getAsOkHttpResponseAndString (line 289) | public void getAsOkHttpResponseAndString(OkHttpResponseAndStringReques...
    method getAsOkHttpResponseAndBitmap (line 296) | public void getAsOkHttpResponseAndBitmap(OkHttpResponseAndBitmapReques...
    method getAsOkHttpResponseAndParsed (line 302) | public void getAsOkHttpResponseAndParsed(TypeToken typeToken, OkHttpRe...
    method getAsOkHttpResponseAndObject (line 309) | public void getAsOkHttpResponseAndObject(Class objectClass, OkHttpResp...
    method getAsOkHttpResponseAndObjectList (line 316) | public void getAsOkHttpResponseAndObjectList(Class objectClass, OkHttp...
    method startDownload (line 323) | public void startDownload(DownloadListener downloadListener) {
    method prefetch (line 328) | public void prefetch() {
    method executeForJSONObject (line 333) | public ANResponse executeForJSONObject() {
    method executeForJSONArray (line 338) | public ANResponse executeForJSONArray() {
    method executeForString (line 343) | public ANResponse executeForString() {
    method executeForOkHttpResponse (line 348) | public ANResponse executeForOkHttpResponse() {
    method executeForBitmap (line 353) | public ANResponse executeForBitmap() {
    method executeForParsed (line 358) | public ANResponse executeForParsed(TypeToken typeToken) {
    method executeForObject (line 364) | public ANResponse executeForObject(Class objectClass) {
    method executeForObjectList (line 370) | public ANResponse executeForObjectList(Class objectClass) {
    method executeForDownload (line 376) | public ANResponse executeForDownload() {
    method setDownloadProgressListener (line 380) | public T setDownloadProgressListener(DownloadProgressListener download...
    method setUploadProgressListener (line 385) | public T setUploadProgressListener(UploadProgressListener uploadProgre...
    method setAnalyticsListener (line 390) | public T setAnalyticsListener(AnalyticsListener analyticsListener) {
    method getAnalyticsListener (line 395) | public AnalyticsListener getAnalyticsListener() {
    method getMethod (line 399) | public int getMethod() {
    method getPriority (line 403) | public Priority getPriority() {
    method getUrl (line 407) | public String getUrl() {
    method getSequenceNumber (line 428) | public int getSequenceNumber() {
    method setSequenceNumber (line 432) | public void setSequenceNumber(int sequenceNumber) {
    method setProgress (line 436) | public void setProgress(int progress) {
    method setResponseAs (line 440) | public void setResponseAs(ResponseType responseType) {
    method getResponseAs (line 444) | public ResponseType getResponseAs() {
    method getTag (line 448) | public Object getTag() {
    method getRequestType (line 452) | public int getRequestType() {
    method getOkHttpClient (line 456) | public OkHttpClient getOkHttpClient() {
    method setUserAgent (line 460) | public void setUserAgent(String userAgent) {
    method getUserAgent (line 464) | public String getUserAgent() {
    method getType (line 468) | public Type getType() {
    method setType (line 472) | public void setType(Type type) {
    method getDownloadProgressListener (line 476) | public DownloadProgressListener getDownloadProgressListener() {
    method updateDownloadCompletion (line 487) | public void updateDownloadCompletion() {
    method getUploadProgressListener (line 521) | public UploadProgressListener getUploadProgressListener() {
    method getDirPath (line 533) | public String getDirPath() {
    method getFileName (line 537) | public String getFileName() {
    method getCacheControl (line 541) | public CacheControl getCacheControl() {
    method getScaleType (line 545) | public ImageView.ScaleType getScaleType() {
    method cancel (line 549) | public void cancel(boolean forceCancel) {
    method isCanceled (line 570) | public boolean isCanceled() {
    method isRunning (line 574) | public boolean isRunning() {
    method setRunning (line 578) | public void setRunning(boolean running) {
    method getCall (line 582) | public Call getCall() {
    method setCall (line 586) | public void setCall(Call call) {
    method getFuture (line 590) | public Future getFuture() {
    method setFuture (line 594) | public void setFuture(Future future) {
    method destroy (line 598) | public void destroy() {
    method finish (line 610) | public void finish() {
    method parseResponse (line 615) | public ANResponse parseResponse(Response response) {
    method parseNetworkError (line 666) | public ANError parseNetworkError(ANError anError) {
    method deliverError (line 679) | public synchronized void deliverError(ANError anError) {
    method deliverResponse (line 695) | public void deliverResponse(final ANResponse response) {
    method deliverSuccessResponse (line 725) | private void deliverSuccessResponse(ANResponse response) {
    method deliverErrorResponse (line 750) | private void deliverErrorResponse(ANError anError) {
    method deliverOkHttpResponse (line 778) | public void deliverOkHttpResponse(final Response response) {
    method getRequestBody (line 816) | public RequestBody getRequestBody() {
    method getMultiPartRequestBody (line 853) | public RequestBody getMultiPartRequestBody() {
    method getHeaders (line 889) | public Headers getHeaders() {
    class HeadRequestBuilder (line 910) | public static class HeadRequestBuilder extends GetRequestBuilder {
      method HeadRequestBuilder (line 912) | public HeadRequestBuilder(String url) {
    class OptionsRequestBuilder (line 917) | public static class OptionsRequestBuilder extends GetRequestBuilder {
      method OptionsRequestBuilder (line 919) | public OptionsRequestBuilder(String url) {
    class GetRequestBuilder (line 924) | public static class GetRequestBuilder<T extends GetRequestBuilder> imp...
      method GetRequestBuilder (line 942) | public GetRequestBuilder(String url) {
      method GetRequestBuilder (line 947) | public GetRequestBuilder(String url, int method) {
      method setPriority (line 952) | @Override
      method setTag (line 958) | @Override
      method addQueryParameter (line 964) | @Override
      method addQueryParameter (line 977) | @Override
      method addQueryParameter (line 987) | @Override
      method addPathParameter (line 997) | @Override
      method addPathParameter (line 1003) | @Override
      method addPathParameter (line 1011) | @Override
      method addHeaders (line 1021) | @Override
      method addHeaders (line 1034) | @Override
      method addHeaders (line 1044) | @Override
      method doNotCacheResponse (line 1054) | @Override
      method getResponseOnlyIfCached (line 1060) | @Override
      method getResponseOnlyFromNetwork (line 1066) | @Override
      method setMaxAgeCacheControl (line 1072) | @Override
      method setMaxStaleCacheControl (line 1078) | @Override
      method setExecutor (line 1084) | @Override
      method setOkHttpClient (line 1090) | @Override
      method setUserAgent (line 1096) | @Override
      method setBitmapConfig (line 1102) | public T setBitmapConfig(Bitmap.Config bitmapConfig) {
      method setBitmapOptions (line 1107) | public T setBitmapOptions(BitmapFactory.Options bitmapOptions) {
      method setBitmapMaxHeight (line 1112) | public T setBitmapMaxHeight(int maxHeight) {
      method setBitmapMaxWidth (line 1117) | public T setBitmapMaxWidth(int maxWidth) {
      method setImageScaleType (line 1122) | public T setImageScaleType(ImageView.ScaleType imageScaleType) {
      method build (line 1127) | public ANRequest build() {
    class PutRequestBuilder (line 1132) | public static class PutRequestBuilder extends PostRequestBuilder {
      method PutRequestBuilder (line 1134) | public PutRequestBuilder(String url) {
    class DeleteRequestBuilder (line 1139) | public static class DeleteRequestBuilder extends PostRequestBuilder {
      method DeleteRequestBuilder (line 1141) | public DeleteRequestBuilder(String url) {
    class PatchRequestBuilder (line 1146) | public static class PatchRequestBuilder extends PostRequestBuilder {
      method PatchRequestBuilder (line 1148) | public PatchRequestBuilder(String url) {
    class DynamicRequestBuilder (line 1153) | public static class DynamicRequestBuilder extends PostRequestBuilder {
      method DynamicRequestBuilder (line 1155) | public DynamicRequestBuilder(String url, int method) {
    class PostRequestBuilder (line 1160) | public static class PostRequestBuilder<T extends PostRequestBuilder> i...
      method PostRequestBuilder (line 1181) | public PostRequestBuilder(String url) {
      method PostRequestBuilder (line 1186) | public PostRequestBuilder(String url, int method) {
      method setPriority (line 1191) | @Override
      method setTag (line 1197) | @Override
      method addQueryParameter (line 1203) | @Override
      method addQueryParameter (line 1216) | @Override
      method addQueryParameter (line 1226) | @Override
      method addPathParameter (line 1236) | @Override
      method addPathParameter (line 1242) | @Override
      method addPathParameter (line 1250) | @Override
      method addHeaders (line 1260) | @Override
      method addHeaders (line 1273) | @Override
      method addHeaders (line 1283) | @Override
      method doNotCacheResponse (line 1293) | @Override
      method getResponseOnlyIfCached (line 1299) | @Override
      method getResponseOnlyFromNetwork (line 1305) | @Override
      method setMaxAgeCacheControl (line 1311) | @Override
      method setMaxStaleCacheControl (line 1317) | @Override
      method setExecutor (line 1323) | @Override
      method setOkHttpClient (line 1329) | @Override
      method setUserAgent (line 1335) | @Override
      method addBodyParameter (line 1341) | public T addBodyParameter(String key, String value) {
      method addBodyParameter (line 1346) | public T addBodyParameter(Map<String, String> bodyParameterMap) {
      method addBodyParameter (line 1353) | public T addBodyParameter(Object object) {
      method addUrlEncodeFormBodyParameter (line 1362) | public T addUrlEncodeFormBodyParameter(String key, String value) {
      method addUrlEncodeFormBodyParameter (line 1367) | public T addUrlEncodeFormBodyParameter(Map<String, String> bodyParam...
      method addUrlEncodeFormBodyParameter (line 1374) | public T addUrlEncodeFormBodyParameter(Object object) {
      method addApplicationJsonBody (line 1383) | public T addApplicationJsonBody(Object object) {
      method addJSONObjectBody (line 1392) | public T addJSONObjectBody(JSONObject jsonObject) {
      method addJSONArrayBody (line 1399) | public T addJSONArrayBody(JSONArray jsonArray) {
      method addStringBody (line 1406) | public T addStringBody(String stringBody) {
      method addFileBody (line 1411) | public T addFileBody(File file) {
      method addByteBody (line 1416) | public T addByteBody(byte[] bytes) {
      method setContentType (line 1421) | public T setContentType(String contentType) {
      method build (line 1426) | public ANRequest build() {
    class DownloadBuilder (line 1431) | public static class DownloadBuilder<T extends DownloadBuilder> impleme...
      method DownloadBuilder (line 1447) | public DownloadBuilder(String url, String dirPath, String fileName) {
      method setPriority (line 1453) | @Override
      method setTag (line 1459) | @Override
      method addHeaders (line 1465) | @Override
      method addHeaders (line 1478) | @Override
      method addHeaders (line 1488) | @Override
      method addQueryParameter (line 1498) | @Override
      method addQueryParameter (line 1511) | @Override
      method addQueryParameter (line 1521) | @Override
      method addPathParameter (line 1531) | @Override
      method addPathParameter (line 1537) | @Override
      method addPathParameter (line 1545) | @Override
      method doNotCacheResponse (line 1555) | @Override
      method getResponseOnlyIfCached (line 1561) | @Override
      method getResponseOnlyFromNetwork (line 1567) | @Override
      method setMaxAgeCacheControl (line 1573) | @Override
      method setMaxStaleCacheControl (line 1579) | @Override
      method setExecutor (line 1585) | @Override
      method setOkHttpClient (line 1591) | @Override
      method setUserAgent (line 1597) | @Override
      method setPercentageThresholdForCancelling (line 1603) | public T setPercentageThresholdForCancelling(int percentageThreshold...
      method build (line 1608) | public ANRequest build() {
    class MultiPartBuilder (line 1613) | public static class MultiPartBuilder<T extends MultiPartBuilder> imple...
      method MultiPartBuilder (line 1630) | public MultiPartBuilder(String url) {
      method setPriority (line 1634) | @Override
      method setTag (line 1640) | @Override
      method addQueryParameter (line 1646) | @Override
      method addQueryParameter (line 1659) | @Override
      method addQueryParameter (line 1669) | @Override
      method addPathParameter (line 1679) | @Override
      method addPathParameter (line 1685) | @Override
      method addPathParameter (line 1693) | @Override
      method addHeaders (line 1703) | @Override
      method addHeaders (line 1716) | @Override
      method addHeaders (line 1726) | @Override
      method doNotCacheResponse (line 1736) | @Override
      method getResponseOnlyIfCached (line 1742) | @Override
      method getResponseOnlyFromNetwork (line 1748) | @Override
      method setMaxAgeCacheControl (line 1754) | @Override
      method setMaxStaleCacheControl (line 1760) | @Override
      method setExecutor (line 1766) | @Override
      method setOkHttpClient (line 1772) | @Override
      method setUserAgent (line 1778) | @Override
      method addMultipartParameter (line 1784) | public T addMultipartParameter(String key, String value) {
      method addMultipartParameter (line 1788) | public T addMultipartParameter(String key, String value, String cont...
      method addMultipartParameter (line 1794) | public T addMultipartParameter(Map<String, String> multiPartParamete...
      method addMultipartParameter (line 1798) | public T addMultipartParameter(Map<String, String> multiPartParamete...
      method addMultipartParameter (line 1810) | public T addMultipartParameter(Object object) {
      method addMultipartParameter (line 1814) | public T addMultipartParameter(Object object, String contentType) {
      method addMultipartFile (line 1824) | public T addMultipartFile(String key, File file) {
      method addMultipartFile (line 1828) | public T addMultipartFile(String key, File file, String contentType) {
      method addMultipartFile (line 1834) | public T addMultipartFile(Map<String, File> multiPartFileMap) {
      method addMultipartFile (line 1838) | public T addMultipartFile(Map<String, File> multiPartFileMap, String...
      method addMultipartFileList (line 1848) | public T addMultipartFileList(String key, List<File> files) {
      method addMultipartFileList (line 1852) | public T addMultipartFileList(String key, List<File> files, String c...
      method addMultipartFileList (line 1862) | public T addMultipartFileList(Map<String, List<File>> multiPartFileM...
      method addMultipartFileList (line 1866) | public T addMultipartFileList(Map<String, List<File>> multiPartFileM...
      method setPercentageThresholdForCancelling (line 1883) | public T setPercentageThresholdForCancelling(int percentageThreshold...
      method setContentType (line 1888) | public T setContentType(String contentType) {
      method addMultipartFileWithKey (line 1893) | private void addMultipartFileWithKey(String key, MultipartFileBody f...
      method build (line 1902) | public ANRequest build() {
    method toString (line 1907) | @Override

FILE: android-networking/src/main/java/com/androidnetworking/common/ANResponse.java
  class ANResponse (line 27) | public class ANResponse<T> {
    method success (line 35) | public static <T> ANResponse<T> success(T result) {
    method failed (line 39) | public static <T> ANResponse<T> failed(ANError anError) {
    method ANResponse (line 43) | public ANResponse(T result) {
    method ANResponse (line 48) | public ANResponse(ANError anError) {
    method getResult (line 53) | public T getResult() {
    method isSuccess (line 57) | public boolean isSuccess() {
    method getError (line 61) | public ANError getError() {
    method setOkHttpResponse (line 65) | public void setOkHttpResponse(Response response) {
    method getOkHttpResponse (line 69) | public Response getOkHttpResponse() {

FILE: android-networking/src/main/java/com/androidnetworking/common/ConnectionClassManager.java
  class ConnectionClassManager (line 26) | public class ConnectionClassManager {
    method getInstance (line 43) | public static ConnectionClassManager getInstance() {
    method updateBandwidth (line 54) | public synchronized void updateBandwidth(long bytes, long timeInMs) {
    method getCurrentBandwidth (line 98) | public int getCurrentBandwidth() {
    method getCurrentConnectionQuality (line 102) | public ConnectionQuality getCurrentConnectionQuality() {
    method setListener (line 106) | public void setListener(ConnectionQualityChangeListener connectionQual...
    method removeListener (line 110) | public void removeListener() {
    method shutDown (line 114) | public static void shutDown() {

FILE: android-networking/src/main/java/com/androidnetworking/common/ConnectionQuality.java
  type ConnectionQuality (line 23) | public enum ConnectionQuality {

FILE: android-networking/src/main/java/com/androidnetworking/common/Method.java
  type Method (line 23) | public interface Method {

FILE: android-networking/src/main/java/com/androidnetworking/common/Priority.java
  type Priority (line 28) | public enum Priority {

FILE: android-networking/src/main/java/com/androidnetworking/common/RequestBuilder.java
  type RequestBuilder (line 29) | public interface RequestBuilder {
    method setPriority (line 31) | RequestBuilder setPriority(Priority priority);
    method setTag (line 33) | RequestBuilder setTag(Object tag);
    method addHeaders (line 35) | RequestBuilder addHeaders(String key, String value);
    method addHeaders (line 37) | RequestBuilder addHeaders(Map<String, String> headerMap);
    method addHeaders (line 39) | RequestBuilder addHeaders(Object object);
    method addQueryParameter (line 41) | RequestBuilder addQueryParameter(String key, String value);
    method addQueryParameter (line 43) | RequestBuilder addQueryParameter(Map<String, String> queryParameterMap);
    method addQueryParameter (line 45) | RequestBuilder addQueryParameter(Object object);
    method addPathParameter (line 47) | RequestBuilder addPathParameter(String key, String value);
    method addPathParameter (line 49) | RequestBuilder addPathParameter(Map<String, String> pathParameterMap);
    method addPathParameter (line 51) | RequestBuilder addPathParameter(Object object);
    method doNotCacheResponse (line 53) | RequestBuilder doNotCacheResponse();
    method getResponseOnlyIfCached (line 55) | RequestBuilder getResponseOnlyIfCached();
    method getResponseOnlyFromNetwork (line 57) | RequestBuilder getResponseOnlyFromNetwork();
    method setMaxAgeCacheControl (line 59) | RequestBuilder setMaxAgeCacheControl(int maxAge, TimeUnit timeUnit);
    method setMaxStaleCacheControl (line 61) | RequestBuilder setMaxStaleCacheControl(int maxStale, TimeUnit timeUnit);
    method setExecutor (line 63) | RequestBuilder setExecutor(Executor executor);
    method setOkHttpClient (line 65) | RequestBuilder setOkHttpClient(OkHttpClient okHttpClient);
    method setUserAgent (line 67) | RequestBuilder setUserAgent(String userAgent);

FILE: android-networking/src/main/java/com/androidnetworking/common/RequestType.java
  type RequestType (line 23) | public interface RequestType {

FILE: android-networking/src/main/java/com/androidnetworking/common/ResponseType.java
  type ResponseType (line 23) | public enum ResponseType {

FILE: android-networking/src/main/java/com/androidnetworking/core/ANExecutor.java
  class ANExecutor (line 37) | public class ANExecutor extends ThreadPoolExecutor {
    method ANExecutor (line 41) | ANExecutor(int maxNumThreads, ThreadFactory threadFactory) {
    method adjustThreadCount (line 47) | void adjustThreadCount(NetworkInfo info) {
    method setThreadCount (line 85) | private void setThreadCount(int threadCount) {
    method submit (line 90) | @Override
    class AndroidNetworkingFutureTask (line 97) | private static final class AndroidNetworkingFutureTask extends FutureT...
      method AndroidNetworkingFutureTask (line 101) | public AndroidNetworkingFutureTask(InternalRunnable hunter) {
      method compareTo (line 106) | @Override

FILE: android-networking/src/main/java/com/androidnetworking/core/Core.java
  class Core (line 23) | public class Core {
    method Core (line 28) | private Core() {
    method getInstance (line 32) | public static Core getInstance() {
    method getExecutorSupplier (line 43) | public ExecutorSupplier getExecutorSupplier() {
    method shutDown (line 47) | public static void shutDown() {

FILE: android-networking/src/main/java/com/androidnetworking/core/DefaultExecutorSupplier.java
  class DefaultExecutorSupplier (line 28) | public class DefaultExecutorSupplier implements ExecutorSupplier {
    method DefaultExecutorSupplier (line 35) | public DefaultExecutorSupplier() {
    method forNetworkTasks (line 42) | @Override
    method forImmediateNetworkTasks (line 47) | @Override
    method forMainThreadTasks (line 52) | @Override

FILE: android-networking/src/main/java/com/androidnetworking/core/ExecutorSupplier.java
  type ExecutorSupplier (line 25) | public interface ExecutorSupplier {
    method forNetworkTasks (line 27) | ANExecutor forNetworkTasks();
    method forImmediateNetworkTasks (line 29) | ANExecutor forImmediateNetworkTasks();
    method forMainThreadTasks (line 31) | Executor forMainThreadTasks();

FILE: android-networking/src/main/java/com/androidnetworking/core/MainThreadExecutor.java
  class MainThreadExecutor (line 28) | public class MainThreadExecutor implements Executor {
    method execute (line 32) | @Override

FILE: android-networking/src/main/java/com/androidnetworking/core/PriorityThreadFactory.java
  class PriorityThreadFactory (line 29) | public class PriorityThreadFactory implements ThreadFactory {
    method PriorityThreadFactory (line 33) | public PriorityThreadFactory(int threadPriority) {
    method newThread (line 37) | @Override

FILE: android-networking/src/main/java/com/androidnetworking/error/ANError.java
  class ANError (line 28) | @SuppressWarnings({"unchecked", "unused"})
    method ANError (line 39) | public ANError() {
    method ANError (line 42) | public ANError(Response response) {
    method ANError (line 46) | public ANError(String message) {
    method ANError (line 50) | public ANError(String message, Response response) {
    method ANError (line 55) | public ANError(String message, Throwable throwable) {
    method ANError (line 59) | public ANError(String message, Response response, Throwable throwable) {
    method ANError (line 64) | public ANError(Response response, Throwable throwable) {
    method ANError (line 69) | public ANError(Throwable throwable) {
    method getResponse (line 73) | public Response getResponse() {
    method setErrorDetail (line 77) | public void setErrorDetail(String errorDetail) {
    method getErrorDetail (line 81) | public String getErrorDetail() {
    method setErrorCode (line 85) | public void setErrorCode(int errorCode) {
    method getErrorCode (line 89) | public int getErrorCode() {
    method setCancellationMessageInError (line 93) | public void setCancellationMessageInError() {
    method getErrorBody (line 97) | public String getErrorBody() {
    method setErrorBody (line 101) | public void setErrorBody(String errorBody) {
    method getErrorAsObject (line 105) | public <T> T getErrorAsObject(Class<T> objectClass) {

FILE: android-networking/src/main/java/com/androidnetworking/gsonparserfactory/GsonParserFactory.java
  class GsonParserFactory (line 36) | public final class GsonParserFactory extends Parser.Factory {
    method GsonParserFactory (line 40) | public GsonParserFactory() {
    method GsonParserFactory (line 44) | public GsonParserFactory(Gson gson) {
    method responseBodyParser (line 48) | @Override
    method requestBodyParser (line 54) | @Override
    method getObject (line 60) | @Override
    method getString (line 70) | @Override
    method getStringMap (line 80) | @Override

FILE: android-networking/src/main/java/com/androidnetworking/gsonparserfactory/GsonRequestBodyParser.java
  class GsonRequestBodyParser (line 39) | final class GsonRequestBodyParser<T> implements Parser<T, RequestBody> {
    method GsonRequestBodyParser (line 46) | GsonRequestBodyParser(Gson gson, TypeAdapter<T> adapter) {
    method convert (line 51) | @Override

FILE: android-networking/src/main/java/com/androidnetworking/gsonparserfactory/GsonResponseBodyParser.java
  class GsonResponseBodyParser (line 34) | final class GsonResponseBodyParser<T> implements Parser<ResponseBody, T> {
    method GsonResponseBodyParser (line 38) | GsonResponseBodyParser(Gson gson, TypeAdapter<T> adapter) {
    method convert (line 43) | @Override

FILE: android-networking/src/main/java/com/androidnetworking/interceptors/GzipRequestInterceptor.java
  class GzipRequestInterceptor (line 35) | public class GzipRequestInterceptor implements Interceptor {
    method intercept (line 36) | @Override
    method forceContentLength (line 50) | private RequestBody forceContentLength(final RequestBody requestBody) ...
    method gzip (line 72) | private RequestBody gzip(final RequestBody body) {

FILE: android-networking/src/main/java/com/androidnetworking/interceptors/HttpLoggingInterceptor.java
  class HttpLoggingInterceptor (line 47) | public class HttpLoggingInterceptor implements Interceptor {
    type Level (line 51) | public enum Level {
    type Logger (line 109) | public interface Logger {
      method log (line 110) | void log(String message);
      method log (line 116) | @Override
    method HttpLoggingInterceptor (line 123) | public HttpLoggingInterceptor() {
    method HttpLoggingInterceptor (line 127) | public HttpLoggingInterceptor(Logger logger) {
    method setLevel (line 138) | public HttpLoggingInterceptor setLevel(Level level) {
    method getLevel (line 144) | public Level getLevel() {
    method intercept (line 148) | @Override
    method isPlaintext (line 278) | static boolean isPlaintext(Buffer buffer) {
    method bodyEncoded (line 298) | private boolean bodyEncoded(Headers headers) {

FILE: android-networking/src/main/java/com/androidnetworking/interfaces/AnalyticsListener.java
  type AnalyticsListener (line 23) | public interface AnalyticsListener {
    method onReceived (line 25) | void onReceived(long timeTakenInMillis, long bytesSent, long bytesRece...

FILE: android-networking/src/main/java/com/androidnetworking/interfaces/BitmapRequestListener.java
  type BitmapRequestListener (line 27) | public interface BitmapRequestListener {
    method onResponse (line 29) | void onResponse(Bitmap response);
    method onError (line 31) | void onError(ANError anError);

FILE: android-networking/src/main/java/com/androidnetworking/interfaces/ConnectionQualityChangeListener.java
  type ConnectionQualityChangeListener (line 25) | public interface ConnectionQualityChangeListener {
    method onChange (line 27) | void onChange(ConnectionQuality currentConnectionQuality, int currentB...

FILE: android-networking/src/main/java/com/androidnetworking/interfaces/DownloadListener.java
  type DownloadListener (line 25) | public interface DownloadListener {
    method onDownloadComplete (line 27) | void onDownloadComplete();
    method onError (line 29) | void onError(ANError anError);

FILE: android-networking/src/main/java/com/androidnetworking/interfaces/DownloadProgressListener.java
  type DownloadProgressListener (line 23) | public interface DownloadProgressListener {
    method onProgress (line 24) | void onProgress(long bytesDownloaded, long totalBytes);

FILE: android-networking/src/main/java/com/androidnetworking/interfaces/JSONArrayRequestListener.java
  type JSONArrayRequestListener (line 27) | public interface JSONArrayRequestListener {
    method onResponse (line 29) | void onResponse(JSONArray response);
    method onError (line 31) | void onError(ANError anError);

FILE: android-networking/src/main/java/com/androidnetworking/interfaces/JSONObjectRequestListener.java
  type JSONObjectRequestListener (line 27) | public interface JSONObjectRequestListener {
    method onResponse (line 29) | void onResponse(JSONObject response);
    method onError (line 31) | void onError(ANError anError);

FILE: android-networking/src/main/java/com/androidnetworking/interfaces/OkHttpResponseAndBitmapRequestListener.java
  type OkHttpResponseAndBitmapRequestListener (line 31) | public interface OkHttpResponseAndBitmapRequestListener {
    method onResponse (line 33) | void onResponse(Response okHttpResponse, Bitmap response);
    method onError (line 35) | void onError(ANError anError);

FILE: android-networking/src/main/java/com/androidnetworking/interfaces/OkHttpResponseAndJSONArrayRequestListener.java
  type OkHttpResponseAndJSONArrayRequestListener (line 31) | public interface OkHttpResponseAndJSONArrayRequestListener {
    method onResponse (line 33) | void onResponse(Response okHttpResponse, JSONArray response);
    method onError (line 35) | void onError(ANError anError);

FILE: android-networking/src/main/java/com/androidnetworking/interfaces/OkHttpResponseAndJSONObjectRequestListener.java
  type OkHttpResponseAndJSONObjectRequestListener (line 31) | public interface OkHttpResponseAndJSONObjectRequestListener {
    method onResponse (line 33) | void onResponse(Response okHttpResponse, JSONObject response);
    method onError (line 35) | void onError(ANError anError);

FILE: android-networking/src/main/java/com/androidnetworking/interfaces/OkHttpResponseAndParsedRequestListener.java
  type OkHttpResponseAndParsedRequestListener (line 29) | public interface OkHttpResponseAndParsedRequestListener<T> {
    method onResponse (line 31) | void onResponse(Response okHttpResponse, T response);
    method onError (line 33) | void onError(ANError anError);

FILE: android-networking/src/main/java/com/androidnetworking/interfaces/OkHttpResponseAndStringRequestListener.java
  type OkHttpResponseAndStringRequestListener (line 29) | public interface OkHttpResponseAndStringRequestListener {
    method onResponse (line 31) | void onResponse(Response okHttpResponse, String response);
    method onError (line 33) | void onError(ANError anError);

FILE: android-networking/src/main/java/com/androidnetworking/interfaces/OkHttpResponseListener.java
  type OkHttpResponseListener (line 29) | public interface OkHttpResponseListener {
    method onResponse (line 31) | void onResponse(Response response);
    method onError (line 33) | void onError(ANError anError);

FILE: android-networking/src/main/java/com/androidnetworking/interfaces/ParsedRequestListener.java
  type ParsedRequestListener (line 27) | public interface ParsedRequestListener<T> {
    method onResponse (line 29) | void onResponse(T response);
    method onError (line 31) | void onError(ANError anError);

FILE: android-networking/src/main/java/com/androidnetworking/interfaces/Parser.java
  type Parser (line 32) | public interface Parser<F, T> {
    method convert (line 34) | T convert(F value) throws IOException;
    class Factory (line 36) | abstract class Factory {
      method responseBodyParser (line 38) | public Parser<ResponseBody, ?> responseBodyParser(Type type) {
      method requestBodyParser (line 42) | public Parser<?, RequestBody> requestBodyParser(Type type) {
      method getObject (line 46) | public Object getObject(String string, Type type) {
      method getString (line 50) | public String getString(Object object) {
      method getStringMap (line 54) | public HashMap<String, String> getStringMap(Object object) {

FILE: android-networking/src/main/java/com/androidnetworking/interfaces/StringRequestListener.java
  type StringRequestListener (line 25) | public interface StringRequestListener {
    method onResponse (line 27) | void onResponse(String response);
    method onError (line 29) | void onError(ANError anError);

FILE: android-networking/src/main/java/com/androidnetworking/interfaces/UploadProgressListener.java
  type UploadProgressListener (line 23) | public interface UploadProgressListener {
    method onProgress (line 24) | void onProgress(long bytesUploaded, long totalBytes);

FILE: android-networking/src/main/java/com/androidnetworking/internal/ANImageLoader.java
  class ANImageLoader (line 38) | public class ANImageLoader {
    method initialize (line 66) | public static void initialize() {
    method getInstance (line 70) | public static ANImageLoader getInstance() {
    type ImageCache (line 81) | public interface ImageCache {
      method getBitmap (line 82) | Bitmap getBitmap(String key);
      method putBitmap (line 84) | void putBitmap(String key, Bitmap bitmap);
      method evictBitmap (line 86) | void evictBitmap(String key);
      method evictAllBitmap (line 88) | void evictAllBitmap();
    method ANImageLoader (line 91) | public ANImageLoader(ImageCache imageCache) {
    method getImageCache (line 95) | public ImageCache getImageCache() {
    method getImageListener (line 99) | public static ImageListener getImageListener(final ImageView view,
    type ImageListener (line 121) | public interface ImageListener {
      method onResponse (line 123) | void onResponse(ImageContainer response, boolean isImmediate);
      method onError (line 125) | void onError(ANError anError);
    method isCached (line 128) | public boolean isCached(String requestUrl, int maxWidth, int maxHeight) {
    method isCached (line 132) | public boolean isCached(String requestUrl, int maxWidth, int maxHeight,
    method get (line 140) | public ImageContainer get(String requestUrl, final ImageListener liste...
    method get (line 145) | public ImageContainer get(String requestUrl, ImageListener imageListener,
    method get (line 151) | public ImageContainer get(String requestUrl, ImageListener imageListener,
    method makeImageRequest (line 184) | protected ANRequest makeImageRequest(String requestUrl, int maxWidth, ...
    method setBitmapDecodeOptions (line 210) | public void setBitmapDecodeOptions(BitmapFactory.Options bitmapOptions) {
    method setBatchedResponseDelay (line 214) | public void setBatchedResponseDelay(int newBatchedResponseDelayMs) {
    method onGetImageSuccess (line 219) | protected void onGetImageSuccess(String cacheKey, Bitmap response) {
    method onGetImageError (line 231) | protected void onGetImageError(String cacheKey, ANError anError) {
    class ImageContainer (line 240) | public class ImageContainer {
      method ImageContainer (line 250) | public ImageContainer(Bitmap bitmap, String requestUrl,
      method cancelRequest (line 258) | public void cancelRequest() {
      method getBitmap (line 280) | public Bitmap getBitmap() {
      method getRequestUrl (line 285) | public String getRequestUrl() {
    class BatchedImageRequest (line 290) | private class BatchedImageRequest {
      method BatchedImageRequest (line 300) | public BatchedImageRequest(ANRequest request, ImageContainer contain...
      method setError (line 305) | public void setError(ANError anError) {
      method getError (line 309) | public ANError getError() {
      method addContainer (line 313) | public void addContainer(ImageContainer container) {
      method removeContainerAndCancelIfNecessary (line 317) | public boolean removeContainerAndCancelIfNecessary(ImageContainer co...
    method batchResponse (line 331) | private void batchResponse(String cacheKey, BatchedImageRequest reques...
    method throwIfNotOnMainThread (line 359) | private void throwIfNotOnMainThread() {
    method getCacheKey (line 365) | private static String getCacheKey(String url, int maxWidth, int maxHei...

FILE: android-networking/src/main/java/com/androidnetworking/internal/ANRequestQueue.java
  class ANRequestQueue (line 33) | public class ANRequestQueue {
    method initialize (line 40) | public static void initialize() {
    method getInstance (line 44) | public static ANRequestQueue getInstance() {
    type RequestFilter (line 55) | public interface RequestFilter {
      method apply (line 56) | boolean apply(ANRequest request);
    method cancel (line 59) | private void cancel(RequestFilter filter, boolean forceCancel) {
    method cancelAll (line 76) | public void cancelAll(boolean forceCancel) {
    method cancelRequestWithGivenTag (line 91) | public void cancelRequestWithGivenTag(final Object tag, final boolean ...
    method getSequenceNumber (line 107) | public int getSequenceNumber() {
    method addRequest (line 111) | public ANRequest addRequest(ANRequest request) {
    method finish (line 136) | public void finish(ANRequest request) {
    method isRequestRunning (line 144) | public boolean isRequestRunning(Object tag) {
    method isRequestWithTheGivenTag (line 157) | private boolean isRequestWithTheGivenTag(ANRequest request, Object tag) {

FILE: android-networking/src/main/java/com/androidnetworking/internal/DownloadProgressHandler.java
  class DownloadProgressHandler (line 31) | public class DownloadProgressHandler extends Handler {
    method DownloadProgressHandler (line 35) | public DownloadProgressHandler(DownloadProgressListener downloadProgre...
    method handleMessage (line 40) | @Override

FILE: android-networking/src/main/java/com/androidnetworking/internal/InternalNetworking.java
  class InternalNetworking (line 54) | public final class InternalNetworking {
    method InternalNetworking (line 56) | private InternalNetworking() {
    method performSimpleRequest (line 64) | public static Response performSimpleRequest(ANRequest request) throws ...
    method performDownloadRequest (line 147) | public static Response performDownloadRequest(final ANRequest request)...
    method performUploadRequest (line 221) | public static Response performUploadRequest(ANRequest request) throws ...
    method getClient (line 265) | public static OkHttpClient getClient() {
    method addHeadersToRequestBuilder (line 272) | public static void addHeadersToRequestBuilder(Request.Builder builder,...
    method getDefaultClient (line 288) | public static OkHttpClient getDefaultClient() {
    method setClientWithCache (line 296) | public static void setClientWithCache(Context context) {
    method setUserAgent (line 305) | public static void setUserAgent(String userAgent) {
    method setClient (line 309) | public static void setClient(OkHttpClient okHttpClient) {
    method enableLogging (line 313) | public static void enableLogging(Level level) {

FILE: android-networking/src/main/java/com/androidnetworking/internal/InternalRunnable.java
  class InternalRunnable (line 38) | public class InternalRunnable implements Runnable {
    method InternalRunnable (line 44) | public InternalRunnable(ANRequest request) {
    method run (line 50) | @Override
    method executeSimpleRequest (line 67) | private void executeSimpleRequest() {
    method executeDownloadRequest (line 101) | private void executeDownloadRequest() {
    method executeUploadRequest (line 120) | private void executeUploadRequest() {
    method getPriority (line 154) | public Priority getPriority() {
    method deliverError (line 158) | private void deliverError(final ANRequest request, final ANError anErr...

FILE: android-networking/src/main/java/com/androidnetworking/internal/RequestProgressBody.java
  class RequestProgressBody (line 37) | public class RequestProgressBody extends RequestBody {
    method RequestProgressBody (line 42) | public RequestProgressBody(RequestBody requestBody, UploadProgressList...
    method contentType (line 49) | public MediaType contentType() {
    method contentLength (line 53) | @Override
    method writeTo (line 58) | @Override
    method sink (line 67) | private Sink sink(Sink sink) {

FILE: android-networking/src/main/java/com/androidnetworking/internal/ResponseProgressBody.java
  class ResponseProgressBody (line 37) | public class ResponseProgressBody extends ResponseBody {
    method ResponseProgressBody (line 43) | public ResponseProgressBody(ResponseBody responseBody, DownloadProgres...
    method contentType (line 50) | @Override
    method contentLength (line 55) | @Override
    method source (line 60) | @Override
    method source (line 68) | private Source source(Source source) {

FILE: android-networking/src/main/java/com/androidnetworking/internal/SynchronousCall.java
  class SynchronousCall (line 39) | @SuppressWarnings("unchecked")
    method SynchronousCall (line 42) | private SynchronousCall() {
    method execute (line 46) | public static <T> ANResponse<T> execute(ANRequest request) {
    method executeSimpleRequest (line 58) | private static <T> ANResponse<T> executeSimpleRequest(ANRequest reques...
    method executeDownloadRequest (line 89) | private static <T> ANResponse<T> executeDownloadRequest(ANRequest requ...
    method executeUploadRequest (line 112) | private static <T> ANResponse<T> executeUploadRequest(ANRequest reques...

FILE: android-networking/src/main/java/com/androidnetworking/internal/UploadProgressHandler.java
  class UploadProgressHandler (line 31) | public class UploadProgressHandler extends Handler {
    method UploadProgressHandler (line 35) | public UploadProgressHandler(UploadProgressListener uploadProgressList...
    method handleMessage (line 40) | @Override

FILE: android-networking/src/main/java/com/androidnetworking/model/MultipartFileBody.java
  class MultipartFileBody (line 5) | public class MultipartFileBody {
    method MultipartFileBody (line 10) | public MultipartFileBody(File file, String contentType) {

FILE: android-networking/src/main/java/com/androidnetworking/model/MultipartStringBody.java
  class MultipartStringBody (line 3) | public class MultipartStringBody {
    method MultipartStringBody (line 8) | public MultipartStringBody(String value, String contentType) {

FILE: android-networking/src/main/java/com/androidnetworking/model/Progress.java
  class Progress (line 26) | public class Progress implements Serializable {
    method Progress (line 31) | public Progress(long currentBytes, long totalBytes) {

FILE: android-networking/src/main/java/com/androidnetworking/utils/ParseUtil.java
  class ParseUtil (line 29) | public class ParseUtil {
    method setParserFactory (line 33) | public static void setParserFactory(Parser.Factory parserFactory) {
    method getParserFactory (line 37) | public static Parser.Factory getParserFactory() {
    method shutDown (line 44) | public static void shutDown() {

FILE: android-networking/src/main/java/com/androidnetworking/utils/SourceCloseUtil.java
  class SourceCloseUtil (line 30) | public final class SourceCloseUtil {
    method SourceCloseUtil (line 32) | private SourceCloseUtil() {
    method close (line 35) | public static void close(Response response, ANRequest request) {

FILE: android-networking/src/main/java/com/androidnetworking/utils/Utils.java
  class Utils (line 46) | public class Utils {
    method getDiskCacheDir (line 48) | public static File getDiskCacheDir(Context context, String uniqueName) {
    method getCache (line 52) | public static Cache getCache(Context context, int maxCacheSize, String...
    method getMimeType (line 56) | public static String getMimeType(String path) {
    method decodeBitmap (line 65) | public static ANResponse<Bitmap> decodeBitmap(Response response, int m...
    method decodeBitmap (line 72) | public static ANResponse<Bitmap> decodeBitmap(Response response, int m...
    method getResizedDimension (line 120) | private static int getResizedDimension(int maxPrimary, int maxSecondary,
    method findBestSampleSize (line 160) | public static int findBestSampleSize(int actualWidth, int actualHeight,
    method saveFile (line 172) | public static void saveFile(Response response, String dirPath,
    method sendAnalytics (line 204) | public static void sendAnalytics(final AnalyticsListener analyticsList...
    method getErrorForConnection (line 218) | public static ANError getErrorForConnection(ANError error) {
    method getErrorForServerResponse (line 225) | public static ANError getErrorForServerResponse(ANError error, ANReque...
    method getErrorForParse (line 232) | public static ANError getErrorForParse(ANError error) {

FILE: android-networking/src/main/java/com/androidnetworking/widget/ANImageView.java
  class ANImageView (line 33) | public class ANImageView extends AppCompatImageView {
    method ANImageView (line 43) | public ANImageView(Context context) {
    method ANImageView (line 47) | public ANImageView(Context context, AttributeSet attrs) {
    method ANImageView (line 51) | public ANImageView(Context context, AttributeSet attrs, int defStyle) {
    method setImageUrl (line 55) | public void setImageUrl(String url) {
    method setDefaultImageResId (line 60) | public void setDefaultImageResId(int defaultImage) {
    method setErrorImageResId (line 64) | public void setErrorImageResId(int errorImage) {
    method loadImageIfNecessary (line 68) | void loadImageIfNecessary(final boolean isInLayoutPass) {
    method setDefaultImageOrNull (line 138) | private void setDefaultImageOrNull() {
    method onLayout (line 146) | @Override
    method onDetachedFromWindow (line 152) | @Override
    method drawableStateChanged (line 162) | @Override

FILE: android-networking/src/test/java/com/androidnetworking/ExampleUnitTest.java
  class ExampleUnitTest (line 27) | public class ExampleUnitTest {
    method addition_isCorrect (line 28) | @Test

FILE: app/src/androidTest/java/com/androidnetworking/ApplicationTest.java
  class ApplicationTest (line 26) | public class ApplicationTest extends ApplicationTestCase<Application> {
    method ApplicationTest (line 27) | public ApplicationTest() {

FILE: app/src/main/java/com/networking/ApiEndPoint.java
  class ApiEndPoint (line 23) | public class ApiEndPoint {

FILE: app/src/main/java/com/networking/ApiTestActivity.java
  class ApiTestActivity (line 59) | public class ApiTestActivity extends AppCompatActivity {
    method onCreate (line 63) | @Override
    method prefetch (line 69) | public void prefetch(View view) {
    method prefetchDownload (line 88) | public void prefetchDownload(View view) {
    method getAllUsers (line 106) | public void getAllUsers(View view) {
    method getAnUser (line 140) | public void getAnUser(View view) {
    method checkForHeaderGet (line 171) | public void checkForHeaderGet(View view) {
    method checkForHeaderPost (line 213) | public void checkForHeaderPost(View view) {
    method createAnUser (line 259) | public void createAnUser(View view) {
    method createAnUserJSONObject (line 301) | public void createAnUserJSONObject(View view) {
    method downloadFile (line 348) | public void downloadFile(final View view) {
    method downloadImage (line 395) | public void downloadImage(final View view) {
    method uploadImage (line 435) | public void uploadImage(final View view) {
    method doNotCacheResponse (line 484) | public void doNotCacheResponse(View view) {
    method getResponseOnlyIfCached (line 526) | public void getResponseOnlyIfCached(View view) {
    method getResponseOnlyFromNetwork (line 568) | public void getResponseOnlyFromNetwork(View view) {
    method setMaxAgeCacheControl (line 610) | public void setMaxAgeCacheControl(View view) {
    method setMaxStaleCacheControl (line 652) | public void setMaxStaleCacheControl(View view) {
    method cleanupDestinationTest (line 694) | public void cleanupDestinationTest(View view) {
    method disableGzipForCustomRequest (line 745) | public void disableGzipForCustomRequest(View view) {
    method checkCacheForCustomClient (line 787) | public void checkCacheForCustomClient(View view) {
    method checkOkHttpResponse (line 835) | public void checkOkHttpResponse(View view) {
    method checkSynchronousCall (line 965) | public void checkSynchronousCall(View view) {
    method checkOptionsRequest (line 1112) | public void checkOptionsRequest(View view) {
    method getCurrentConnectionQuality (line 1128) | public void getCurrentConnectionQuality(View view) {

FILE: app/src/main/java/com/networking/ImageGridActivity.java
  class ImageGridActivity (line 29) | public class ImageGridActivity extends FragmentActivity {
    method onCreate (line 32) | @Override

FILE: app/src/main/java/com/networking/MainActivity.java
  class MainActivity (line 42) | public class MainActivity extends AppCompatActivity {
    method onCreate (line 51) | @Override
    method makeJSONArrayRequest (line 64) | private void makeJSONArrayRequest() {
    method makeJSONObjectRequest (line 104) | private void makeJSONObjectRequest() {
    method makeRequests (line 143) | public void makeRequests(View view) {
    method cancelAllRequests (line 150) | public void cancelAllRequests(View view) {
    method loadImageDirect (line 156) | public void loadImageDirect(View view) {
    method loadImageFromImageLoader (line 199) | public void loadImageFromImageLoader(View view) {
    method startGridActivity (line 204) | public void startGridActivity(View view) {
    method startApiTestActivity (line 208) | public void startApiTestActivity(View view) {
    method startOkHttpResponseTestActivity (line 212) | public void startOkHttpResponseTestActivity(View view) {
    method startWebSocketActivity (line 216) | public void startWebSocketActivity(View view) {

FILE: app/src/main/java/com/networking/MyApplication.java
  class MyApplication (line 31) | public class MyApplication extends Application {
    method getInstance (line 36) | public static MyApplication getInstance() {
    method onCreate (line 40) | @Override

FILE: app/src/main/java/com/networking/OkHttpResponseTestActivity.java
  class OkHttpResponseTestActivity (line 61) | public class OkHttpResponseTestActivity extends AppCompatActivity {
    method onCreate (line 65) | @Override
    method prefetch (line 71) | public void prefetch(View view) {
    method prefetchDownload (line 90) | public void prefetchDownload(View view) {
    method getAllUsers (line 108) | public void getAllUsers(View view) {
    method getAnUser (line 147) | public void getAnUser(View view) {
    method checkForHeaderGet (line 183) | public void checkForHeaderGet(View view) {
    method checkForHeaderPost (line 217) | public void checkForHeaderPost(View view) {
    method createAnUser (line 257) | public void createAnUser(View view) {
    method createAnUserJSONObject (line 293) | public void createAnUserJSONObject(View view) {
    method downloadFile (line 333) | public void downloadFile(final View view) {
    method downloadImage (line 380) | public void downloadImage(final View view) {
    method uploadImage (line 420) | public void uploadImage(final View view) {
    method doNotCacheResponse (line 462) | public void doNotCacheResponse(View view) {
    method getResponseOnlyIfCached (line 498) | public void getResponseOnlyIfCached(View view) {
    method getResponseOnlyFromNetwork (line 534) | public void getResponseOnlyFromNetwork(View view) {
    method setMaxAgeCacheControl (line 570) | public void setMaxAgeCacheControl(View view) {
    method setMaxStaleCacheControl (line 606) | public void setMaxStaleCacheControl(View view) {
    method cleanupDestinationTest (line 642) | public void cleanupDestinationTest(View view) {
    method disableGzipForCustomRequest (line 693) | public void disableGzipForCustomRequest(View view) {
    method checkCacheForCustomClient (line 729) | public void checkCacheForCustomClient(View view) {
    method checkOkHttpResponse (line 777) | public void checkOkHttpResponse(View view) {
    method checkSynchronousCall (line 907) | public void checkSynchronousCall(View view) {
    method checkOptionsRequest (line 1062) | public void checkOptionsRequest(View view) {
    method getCurrentConnectionQuality (line 1078) | public void getCurrentConnectionQuality(View view) {

FILE: app/src/main/java/com/networking/WebSocketActivity.java
  class WebSocketActivity (line 39) | public class WebSocketActivity extends AppCompatActivity {
    method onCreate (line 45) | @Override
    method onStart (line 52) | @Override
    method onStop (line 58) | @Override
    method connectWebSocket (line 64) | private void connectWebSocket() {
    method disconnectWebSocket (line 75) | private void disconnectWebSocket() {
    method getWebSocketListener (line 81) | private WebSocketListener getWebSocketListener() {

FILE: app/src/main/java/com/networking/fragments/ImageGridFragment.java
  class ImageGridFragment (line 43) | public class ImageGridFragment extends Fragment implements AdapterView.O...
    method ImageGridFragment (line 50) | public ImageGridFragment() {
    method onCreate (line 53) | @Override
    method onCreateView (line 64) | @Override
    method onResume (line 101) | @Override
    method onPause (line 107) | @Override
    method onDestroy (line 112) | @Override
    method onItemClick (line 117) | @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    class ImageAdapter (line 124) | private class ImageAdapter extends BaseAdapter {
      method ImageAdapter (line 132) | public ImageAdapter(Context context) {
      method getCount (line 145) | @Override
      method getItem (line 154) | @Override
      method getItemId (line 160) | @Override
      method getViewTypeCount (line 165) | @Override
      method getItemViewType (line 170) | @Override
      method hasStableIds (line 175) | @Override
      method getView (line 180) | @Override
      method setItemHeight (line 210) | public void setItemHeight(int height) {
      method setNumColumns (line 220) | public void setNumColumns(int numColumns) {
      method getNumColumns (line 224) | public int getNumColumns() {

FILE: app/src/main/java/com/networking/model/User.java
  class User (line 25) | public class User {

FILE: app/src/main/java/com/networking/provider/Images.java
  class Images (line 27) | public class Images {

FILE: app/src/main/java/com/networking/utils/Utils.java
  class Utils (line 32) | public class Utils {
    method getRootDirPath (line 34) | public static String getRootDirPath(Context context) {
    method logError (line 43) | public static void logError(String TAG,ANError error) {

FILE: app/src/test/java/com/androidnetworking/ExampleUnitTest.java
  class ExampleUnitTest (line 27) | public class ExampleUnitTest {
    method addition_isCorrect (line 28) | @Test

FILE: jackson-android-networking/src/androidTest/java/com/jacksonandroidnetworking/JacksonGetObjectApiTest.java
  class JacksonGetObjectApiTest (line 52) | public class JacksonGetObjectApiTest extends ApplicationTestCase<Applica...
    method JacksonGetObjectApiTest (line 57) | public JacksonGetObjectApiTest() {
    method setUp (line 61) | @Override
    method testObjectGetRequest (line 68) | public void testObjectGetRequest() throws InterruptedException {
    method testObjectGetRequest404 (line 98) | public void testObjectGetRequest404() throws InterruptedException {
    method testObjectListGetRequest (line 134) | public void testObjectListGetRequest() throws InterruptedException {
    method testObjectListGetRequest404 (line 164) | public void testObjectListGetRequest404() throws InterruptedException {
    method testSynchronousObjectGetRequest (line 200) | @SuppressWarnings("unchecked")
    method testSynchronousObjectGetRequest404 (line 214) | @SuppressWarnings("unchecked")
    method testSynchronousObjectListGetRequest (line 233) | @SuppressWarnings("unchecked")
    method testSynchronousObjectListGetRequest404 (line 250) | @SuppressWarnings("unchecked")
    method testResponseBodyAndObjectGet (line 269) | public void testResponseBodyAndObjectGet() throws InterruptedException {
    method testResponseBodyAndObjectGet404 (line 304) | public void testResponseBodyAndObjectGet404() throws InterruptedExcept...
    method testResponseBodyAndObjectListGet (line 341) | public void testResponseBodyAndObjectListGet() throws InterruptedExcep...
    method testResponseBodyAndObjectListGet404 (line 376) | public void testResponseBodyAndObjectListGet404() throws InterruptedEx...
    method testHeaderGetRequest (line 413) | public void testHeaderGetRequest() throws InterruptedException {

FILE: jackson-android-networking/src/androidTest/java/com/jacksonandroidnetworking/JacksonPostObjectApiTest.java
  class JacksonPostObjectApiTest (line 52) | public class JacksonPostObjectApiTest extends ApplicationTestCase<Applic...
    method JacksonPostObjectApiTest (line 57) | public JacksonPostObjectApiTest() {
    method setUp (line 61) | @Override
    method testObjectPostRequest (line 69) | public void testObjectPostRequest() throws InterruptedException {
    method testObjectPostRequest404 (line 101) | public void testObjectPostRequest404() throws InterruptedException {
    method testObjectListPostRequest (line 139) | public void testObjectListPostRequest() throws InterruptedException {
    method testObjectListPostRequest404 (line 171) | public void testObjectListPostRequest404() throws InterruptedException {
    method testSynchronousObjectPostRequest (line 209) | @SuppressWarnings("unchecked")
    method testSynchronousObjectPostRequest404 (line 226) | @SuppressWarnings("unchecked")
    method testSynchronousObjectListPostRequest (line 248) | @SuppressWarnings("unchecked")
    method testSynchronousObjectListPostRequest404 (line 268) | @SuppressWarnings("unchecked")
    method testResponseBodyAndObjectPost (line 290) | public void testResponseBodyAndObjectPost() throws InterruptedException {
    method testResponseBodyAndObjectPost404 (line 327) | public void testResponseBodyAndObjectPost404() throws InterruptedExcep...
    method testResponseBodyAndObjectListPost (line 366) | public void testResponseBodyAndObjectListPost() throws InterruptedExce...
    method testResponseBodyAndObjectListPost404 (line 403) | public void testResponseBodyAndObjectListPost404() throws InterruptedE...
    method testHeaderPostRequest (line 442) | public void testHeaderPostRequest() throws InterruptedException {

FILE: jackson-android-networking/src/androidTest/java/com/jacksonandroidnetworking/model/User.java
  class User (line 26) | public class User {

FILE: jackson-android-networking/src/main/java/com/jacksonandroidnetworking/JacksonParserFactory.java
  class JacksonParserFactory (line 38) | public final class JacksonParserFactory extends Parser.Factory {
    method JacksonParserFactory (line 42) | public JacksonParserFactory() {
    method JacksonParserFactory (line 46) | public JacksonParserFactory(ObjectMapper mapper) {
    method responseBodyParser (line 50) | @Override
    method requestBodyParser (line 57) | @Override
    method getObject (line 64) | @Override
    method getString (line 76) | @Override
    method getStringMap (line 87) | @Override

FILE: jackson-android-networking/src/main/java/com/jacksonandroidnetworking/JacksonRequestBodyParser.java
  class JacksonRequestBodyParser (line 33) | final class JacksonRequestBodyParser<T> implements Parser<T, RequestBody> {
    method JacksonRequestBodyParser (line 39) | JacksonRequestBodyParser(ObjectWriter adapter) {
    method convert (line 43) | @Override

FILE: jackson-android-networking/src/main/java/com/jacksonandroidnetworking/JacksonResponseBodyParser.java
  class JacksonResponseBodyParser (line 32) | final class JacksonResponseBodyParser<T> implements Parser<ResponseBody,...
    method JacksonResponseBodyParser (line 36) | JacksonResponseBodyParser(ObjectReader adapter) {
    method convert (line 40) | @Override

FILE: jackson-android-networking/src/test/java/com/jacksonandroidnetworking/ExampleUnitTest.java
  class ExampleUnitTest (line 29) | public class ExampleUnitTest {
    method addition_isCorrect (line 30) | @Test

FILE: rx-android-networking/src/androidTest/java/com/rxandroidnetworking/ApplicationTest.java
  class ApplicationTest (line 26) | public class ApplicationTest extends ApplicationTestCase<Application> {
    method ApplicationTest (line 27) | public ApplicationTest() {

FILE: rx-android-networking/src/main/java/com/rxandroidnetworking/RxANRequest.java
  class RxANRequest (line 41) | @SuppressWarnings({"unchecked", "unused"})
    method RxANRequest (line 44) | public RxANRequest(GetRequestBuilder builder) {
    method RxANRequest (line 48) | public RxANRequest(PostRequestBuilder builder) {
    method RxANRequest (line 52) | public RxANRequest(DownloadBuilder builder) {
    method RxANRequest (line 56) | public RxANRequest(MultiPartBuilder builder) {
    method getJSONObjectObservable (line 60) | public Observable<JSONObject> getJSONObjectObservable() {
    method getJSONObjectSingle (line 71) | public Single<JSONObject> getJSONObjectSingle() {
    method getJSONObjectCompletable (line 75) | public Completable getJSONObjectCompletable() {
    method getJSONArrayObservable (line 79) | public Observable<JSONArray> getJSONArrayObservable() {
    method getJSONArraySingle (line 90) | public Single<JSONArray> getJSONArraySingle() {
    method getJSONArrayCompletable (line 94) | public Completable getJSONArrayCompletable() {
    method getBitmapObservable (line 98) | public Observable<Bitmap> getBitmapObservable() {
    method getBitmapSingle (line 109) | public Single<Bitmap> getBitmapSingle() {
    method getBitmapCompletable (line 113) | public Completable getBitmapCompletable() {
    method getStringObservable (line 117) | public Observable<String> getStringObservable() {
    method getStringSingle (line 128) | public Single<String> getStringSingle() {
    method getStringCompletable (line 132) | public Completable getStringCompletable() {
    method getDownloadObservable (line 136) | public Observable<String> getDownloadObservable() {
    method getDownloadSingle (line 140) | public Single<String> getDownloadSingle() {
    method getDownloadCompletable (line 144) | public Completable getDownloadCompletable() {
    method getParseObservable (line 148) | public <T> Observable<T> getParseObservable(TypeToken<T> typeToken) {
    method getParseSingle (line 160) | public <T> Single<T> getParseSingle(TypeToken<T> typeToken) {
    method getParseCompletable (line 164) | public <T> Completable getParseCompletable(TypeToken<T> typeToken) {
    method getObjectObservable (line 168) | public <T> Observable<T> getObjectObservable(Class<T> objectClass) {
    method getObjectSingle (line 180) | public <T> Single<T> getObjectSingle(Class<T> objectClass) {
    method getObjectCompletable (line 184) | public <T> Completable getObjectCompletable(Class<T> objectClass) {
    method getObjectListObservable (line 188) | public <T> Observable<List<T>> getObjectListObservable(Class<T> object...
    method getObjectListSingle (line 200) | public <T> Single<List<T>> getObjectListSingle(Class<T> objectClass) {
    method getObjectListCompletable (line 204) | public <T> Completable getObjectListCompletable(Class<T> objectClass) {
    class GetRequestBuilder (line 208) | public static class GetRequestBuilder extends ANRequest.GetRequestBuil...
      method GetRequestBuilder (line 210) | public GetRequestBuilder(String url) {
      method GetRequestBuilder (line 214) | private GetRequestBuilder(String url, int method) {
      method build (line 218) | public RxANRequest build() {
    class HeadRequestBuilder (line 223) | public static class HeadRequestBuilder extends GetRequestBuilder {
      method HeadRequestBuilder (line 225) | public HeadRequestBuilder(String url) {
    class OptionsRequestBuilder (line 230) | public static class OptionsRequestBuilder extends GetRequestBuilder {
      method OptionsRequestBuilder (line 232) | public OptionsRequestBuilder(String url) {
    class PostRequestBuilder (line 237) | public static class PostRequestBuilder extends ANRequest.PostRequestBu...
      method PostRequestBuilder (line 239) | public PostRequestBuilder(String url) {
      method PostRequestBuilder (line 243) | private PostRequestBuilder(String url, int method) {
      method build (line 247) | public RxANRequest build() {
    class PutRequestBuilder (line 252) | public static class PutRequestBuilder extends PostRequestBuilder {
      method PutRequestBuilder (line 254) | public PutRequestBuilder(String url) {
    class DeleteRequestBuilder (line 259) | public static class DeleteRequestBuilder extends PostRequestBuilder {
      method DeleteRequestBuilder (line 261) | public DeleteRequestBuilder(String url) {
    class PatchRequestBuilder (line 266) | public static class PatchRequestBuilder extends PostRequestBuilder {
      method PatchRequestBuilder (line 268) | public PatchRequestBuilder(String url) {
    class DynamicRequestBuilder (line 273) | public static class DynamicRequestBuilder extends PostRequestBuilder {
      method DynamicRequestBuilder (line 275) | public DynamicRequestBuilder(String url, int method) {
    class DownloadBuilder (line 280) | public static class DownloadBuilder extends ANRequest.DownloadBuilder<...
      method DownloadBuilder (line 282) | public DownloadBuilder(String url, String dirPath, String fileName) {
      method build (line 286) | public RxANRequest build() {
    class MultiPartBuilder (line 291) | public static class MultiPartBuilder extends ANRequest.MultiPartBuilde...
      method MultiPartBuilder (line 293) | public MultiPartBuilder(String url) {
      method build (line 297) | public RxANRequest build() {

FILE: rx-android-networking/src/main/java/com/rxandroidnetworking/RxAndroidNetworking.java
  class RxAndroidNetworking (line 29) | public class RxAndroidNetworking {
    method RxAndroidNetworking (line 34) | private RxAndroidNetworking() {
    method get (line 43) | public static RxANRequest.GetRequestBuilder get(String url) {
    method head (line 53) | public static RxANRequest.HeadRequestBuilder head(String url) {
    method options (line 63) | public static RxANRequest.OptionsRequestBuilder options(String url) {
    method post (line 73) | public static RxANRequest.PostRequestBuilder post(String url) {
    method put (line 83) | public static RxANRequest.PutRequestBuilder put(String url) {
    method delete (line 93) | public static RxANRequest.DeleteRequestBuilder delete(String url) {
    method patch (line 103) | public static RxANRequest.PatchRequestBuilder patch(String url) {
    method download (line 115) | public static RxANRequest.DownloadBuilder download(String url, String ...
    method upload (line 125) | public static RxANRequest.MultiPartBuilder upload(String url) {
    method request (line 136) | public static RxANRequest.DynamicRequestBuilder request(String url, in...

FILE: rx-android-networking/src/main/java/com/rxandroidnetworking/RxInternalNetworking.java
  class RxInternalNetworking (line 59) | @SuppressWarnings("unchecked")
    method generateSimpleObservable (line 62) | public static <T> Observable<T> generateSimpleObservable(RxANRequest r...
    method generateDownloadObservable (line 118) | public static <T> Observable<T> generateDownloadObservable(final RxANR...
    method generateMultipartObservable (line 162) | public static <T> Observable<T> generateMultipartObservable(final RxAN...
    class ANOnSubscribe (line 166) | static final class ANOnSubscribe<T> implements Observable.OnSubscribe<...
      method ANOnSubscribe (line 170) | public ANOnSubscribe(RxANRequest request) {
      method call (line 174) | @Override
    class ANResolver (line 198) | static final class ANResolver<T> extends AtomicBoolean implements Subs...
      method ANResolver (line 203) | ANResolver(RxANRequest request, Subscriber<? super T> subscriber) {
      method request (line 209) | @Override
      method unsubscribe (line 277) | @Override
      method isUnsubscribed (line 282) | @Override
    class DownloadANResolver (line 288) | static final class DownloadANResolver<T> extends AtomicBoolean impleme...
      method DownloadANResolver (line 293) | DownloadANResolver(RxANRequest request, Subscriber<? super T> subscr...
      method request (line 299) | @Override
      method unsubscribe (line 360) | @Override
      method isUnsubscribed (line 365) | @Override
    class MultipartANResolver (line 371) | static final class MultipartANResolver<T> extends AtomicBoolean implem...
      method MultipartANResolver (line 375) | MultipartANResolver(RxANRequest request, Subscriber<? super T> subsc...
      method request (line 380) | @Override
      method unsubscribe (line 457) | @Override
      method isUnsubscribed (line 464) | @Override

FILE: rx-android-networking/src/test/java/com/rxandroidnetworking/ExampleUnitTest.java
  class ExampleUnitTest (line 27) | public class ExampleUnitTest {
    method addition_isCorrect (line 28) | @Test

FILE: rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2GetJSONApiTest.java
  class Rx2GetJSONApiTest (line 51) | public class Rx2GetJSONApiTest extends ApplicationTestCase<Application> {
    method Rx2GetJSONApiTest (line 56) | public Rx2GetJSONApiTest() {
    method setUp (line 60) | @Override
    method testJSONObjectGetRequest (line 66) | public void testJSONObjectGetRequest() throws InterruptedException {
    method testJSONObjectSingleGetRequest (line 119) | public void testJSONObjectSingleGetRequest() throws InterruptedExcepti...
    method testJSONObjectGetRequest404 (line 164) | public void testJSONObjectGetRequest404() throws InterruptedException {
    method testJSONObjectSingleGetRequest404 (line 217) | public void testJSONObjectSingleGetRequest404() throws InterruptedExce...
    method testJSONArrayGetRequest (line 265) | public void testJSONArrayGetRequest() throws InterruptedException {
    method testJSONArraySingleGetRequest (line 319) | public void testJSONArraySingleGetRequest() throws InterruptedException {
    method testJSONArrayGetRequest404 (line 365) | public void testJSONArrayGetRequest404() throws InterruptedException {
    method testJSONArraySingleGetRequest404 (line 418) | public void testJSONArraySingleGetRequest404() throws InterruptedExcep...

FILE: rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2GetObjectApiTest.java
  class Rx2GetObjectApiTest (line 50) | public class Rx2GetObjectApiTest extends ApplicationTestCase<Application> {
    method Rx2GetObjectApiTest (line 55) | public Rx2GetObjectApiTest() {
    method setUp (line 59) | @Override
    method testObjectGetRequest (line 65) | public void testObjectGetRequest() throws InterruptedException {
    method testObjectSingleGetRequest (line 115) | public void testObjectSingleGetRequest() throws InterruptedException {
    method testObjectGetRequest404 (line 156) | public void testObjectGetRequest404() throws InterruptedException {
    method testObjectSingleGetRequest404 (line 209) | public void testObjectSingleGetRequest404() throws InterruptedException {
    method testObjectListGetRequest (line 257) | public void testObjectListGetRequest() throws InterruptedException {
    method testObjectListSingleGetRequest (line 307) | public void testObjectListSingleGetRequest() throws InterruptedExcepti...
    method testObjectListGetRequest404 (line 349) | public void testObjectListGetRequest404() throws InterruptedException {
    method testObjectListSingleGetRequest404 (line 402) | public void testObjectListSingleGetRequest404() throws InterruptedExce...

FILE: rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2GetStringApiTest.java
  class Rx2GetStringApiTest (line 48) | public class Rx2GetStringApiTest extends ApplicationTestCase<Application> {
    method Rx2GetStringApiTest (line 53) | public Rx2GetStringApiTest() {
    method setUp (line 57) | @Override
    method testStringGetRequest (line 63) | public void testStringGetRequest() throws InterruptedException {
    method testStringSingleGetRequest (line 109) | public void testStringSingleGetRequest() throws InterruptedException {
    method testStringGetRequest404 (line 147) | public void testStringGetRequest404() throws InterruptedException {
    method testStringGetSingleRequest404 (line 200) | public void testStringGetSingleRequest404() throws InterruptedException {

FILE: rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2MultipartJSONApiTest.java
  class Rx2MultipartJSONApiTest (line 51) | public class Rx2MultipartJSONApiTest extends ApplicationTestCase<Applica...
    method Rx2MultipartJSONApiTest (line 56) | public Rx2MultipartJSONApiTest() {
    method setUp (line 60) | @Override
    method testJSONObjectMultipartRequest (line 66) | public void testJSONObjectMultipartRequest() throws InterruptedExcepti...
    method testJSONObjectSingleMultipartRequest (line 120) | public void testJSONObjectSingleMultipartRequest() throws InterruptedE...
    method testJSONObjectMultipartRequest404 (line 166) | public void testJSONObjectMultipartRequest404() throws InterruptedExce...
    method testJSONObjectSingleMultipartRequest404 (line 220) | public void testJSONObjectSingleMultipartRequest404() throws Interrupt...
    method testJSONArrayMultipartRequest (line 269) | public void testJSONArrayMultipartRequest() throws InterruptedException {
    method testJSONArraySingleMultipartRequest (line 324) | public void testJSONArraySingleMultipartRequest() throws InterruptedEx...
    method testJSONArrayMultipartRequest404 (line 371) | public void testJSONArrayMultipartRequest404() throws InterruptedExcep...
    method testJSONArraySingleMultipartRequest404 (line 425) | public void testJSONArraySingleMultipartRequest404() throws Interrupte...

FILE: rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2MultipartObjectApiTest.java
  class Rx2MultipartObjectApiTest (line 50) | public class Rx2MultipartObjectApiTest extends ApplicationTestCase<Appli...
    method Rx2MultipartObjectApiTest (line 55) | public Rx2MultipartObjectApiTest() {
    method setUp (line 59) | @Override
    method testObjectMultipartRequest (line 65) | public void testObjectMultipartRequest() throws InterruptedException {
    method testObjectSingleMultipartRequest (line 116) | public void testObjectSingleMultipartRequest() throws InterruptedExcep...
    method testObjectMultipartRequest404 (line 159) | public void testObjectMultipartRequest404() throws InterruptedException {
    method testObjectSingleMultipartRequest404 (line 213) | public void testObjectSingleMultipartRequest404() throws InterruptedEx...
    method testObjectListMultipartRequest (line 262) | public void testObjectListMultipartRequest() throws InterruptedExcepti...
    method testObjectListSingleMultipartRequest (line 313) | public void testObjectListSingleMultipartRequest() throws InterruptedE...
    method testObjectListMultipartRequest404 (line 355) | public void testObjectListMultipartRequest404() throws InterruptedExce...
    method testObjectListSingleMultipartRequest404 (line 409) | public void testObjectListSingleMultipartRequest404() throws Interrupt...

FILE: rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2MultipartStringApiTest.java
  class Rx2MultipartStringApiTest (line 48) | public class Rx2MultipartStringApiTest extends ApplicationTestCase<Appli...
    method Rx2MultipartStringApiTest (line 53) | public Rx2MultipartStringApiTest() {
    method setUp (line 57) | @Override
    method testStringMultipartRequest (line 63) | public void testStringMultipartRequest() throws InterruptedException {
    method testStringSingleMultipartRequest (line 110) | public void testStringSingleMultipartRequest() throws InterruptedExcep...
    method testStringMultipartRequest404 (line 149) | public void testStringMultipartRequest404() throws InterruptedException {
    method testStringSingleMultipartRequest404 (line 203) | public void testStringSingleMultipartRequest404() throws InterruptedEx...

FILE: rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2PostJSONApiTest.java
  class Rx2PostJSONApiTest (line 51) | public class Rx2PostJSONApiTest extends ApplicationTestCase<Application> {
    method Rx2PostJSONApiTest (line 56) | public Rx2PostJSONApiTest() {
    method setUp (line 60) | @Override
    method testJSONObjectPostRequest (line 66) | public void testJSONObjectPostRequest() throws InterruptedException {
    method testJSONObjectSinglePostRequest (line 121) | public void testJSONObjectSinglePostRequest() throws InterruptedExcept...
    method testJSONObjectPostRequest404 (line 168) | public void testJSONObjectPostRequest404() throws InterruptedException {
    method testJSONObjectSinglePostRequest404 (line 223) | public void testJSONObjectSinglePostRequest404() throws InterruptedExc...
    method testJSONArrayPostRequest (line 273) | public void testJSONArrayPostRequest() throws InterruptedException {
    method testJSONArraySinglePostRequest (line 329) | public void testJSONArraySinglePostRequest() throws InterruptedExcepti...
    method testJSONArrayPostRequest404 (line 377) | public void testJSONArrayPostRequest404() throws InterruptedException {
    method testJSONArraySinglePostRequest404 (line 432) | public void testJSONArraySinglePostRequest404() throws InterruptedExce...

FILE: rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2PostObjectApiTest.java
  class Rx2PostObjectApiTest (line 50) | public class Rx2PostObjectApiTest extends ApplicationTestCase<Applicatio...
    method Rx2PostObjectApiTest (line 55) | public Rx2PostObjectApiTest() {
    method setUp (line 59) | @Override
    method testObjectPostRequest (line 65) | public void testObjectPostRequest() throws InterruptedException {
    method testObjectSinglePostRequest (line 117) | public void testObjectSinglePostRequest() throws InterruptedException {
    method testObjectPostRequest404 (line 161) | public void testObjectPostRequest404() throws InterruptedException {
    method testObjectSinglePostRequest404 (line 216) | public void testObjectSinglePostRequest404() throws InterruptedExcepti...
    method testObjectListPostRequest (line 266) | public void testObjectListPostRequest() throws InterruptedException {
    method testObjectListSinglePostRequest (line 318) | public void testObjectListSinglePostRequest() throws InterruptedExcept...
    method testObjectListPostRequest404 (line 362) | public void testObjectListPostRequest404() throws InterruptedException {
    method testObjectListSinglePostRequest404 (line 417) | public void testObjectListSinglePostRequest404() throws InterruptedExc...

FILE: rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2PostStringApiTest.java
  class Rx2PostStringApiTest (line 48) | public class Rx2PostStringApiTest extends ApplicationTestCase<Applicatio...
    method Rx2PostStringApiTest (line 53) | public Rx2PostStringApiTest() {
    method setUp (line 57) | @Override
    method testStringPostRequest (line 63) | public void testStringPostRequest() throws InterruptedException {
    method testStringSinglePostRequest (line 111) | public void testStringSinglePostRequest() throws InterruptedException {
    method testStringPostRequest404 (line 151) | public void testStringPostRequest404() throws InterruptedException {
    method testStringSinglePostRequest404 (line 206) | public void testStringSinglePostRequest404() throws InterruptedExcepti...

FILE: rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/model/User.java
  class User (line 26) | public class User {

FILE: rx2-android-networking/src/main/java/com/rx2androidnetworking/Rx2ANRequest.java
  class Rx2ANRequest (line 46) | @SuppressWarnings({"unchecked", "unused"})
    method Rx2ANRequest (line 49) | public Rx2ANRequest(GetRequestBuilder builder) {
    method Rx2ANRequest (line 53) | public Rx2ANRequest(PostRequestBuilder builder) {
    method Rx2ANRequest (line 57) | public Rx2ANRequest(DownloadBuilder builder) {
    method Rx2ANRequest (line 61) | public Rx2ANRequest(MultiPartBuilder builder) {
    method getJSONObjectObservable (line 65) | public Observable<JSONObject> getJSONObjectObservable() {
    method getJSONObjectFlowable (line 76) | public Flowable<JSONObject> getJSONObjectFlowable() {
    method getJSONObjectSingle (line 80) | public Single<JSONObject> getJSONObjectSingle() {
    method getJSONObjectMaybe (line 84) | public Maybe<JSONObject> getJSONObjectMaybe() {
    method getJSONObjectCompletable (line 88) | public Completable getJSONObjectCompletable() {
    method getJSONArrayObservable (line 92) | public Observable<JSONArray> getJSONArrayObservable() {
    method getJSONArrayFlowable (line 103) | public Flowable<JSONArray> getJSONArrayFlowable() {
    method getJSONArraySingle (line 107) | public Single<JSONArray> getJSONArraySingle() {
    method getJSONArrayMaybe (line 111) | public Maybe<JSONArray> getJSONArrayMaybe() {
    method getJSONArrayCompletable (line 115) | public Completable getJSONArrayCompletable() {
    method getBitmapObservable (line 119) | public Observable<Bitmap> getBitmapObservable() {
    method getBitmapFlowable (line 130) | public Flowable<Bitmap> getBitmapFlowable() {
    method getBitmapSingle (line 134) | public Single<Bitmap> getBitmapSingle() {
    method getBitmapMaybe (line 138) | public Maybe<Bitmap> getBitmapMaybe() {
    method getBitmapCompletable (line 142) | public Completable getBitmapCompletable() {
    method getStringObservable (line 146) | public Observable<String> getStringObservable() {
    method getStringFlowable (line 157) | public Flowable<String> getStringFlowable() {
    method getStringSingle (line 161) | public Single<String> getStringSingle() {
    method getStringMaybe (line 165) | public Maybe<String> getStringMaybe() {
    method getStringCompletable (line 169) | public Completable getStringCompletable() {
    method getDownloadObservable (line 173) | public Observable<String> getDownloadObservable() {
    method getDownloadFlowable (line 177) | public Flowable<String> getDownloadFlowable() {
    method getDownloadSingle (line 181) | public Single<String> getDownloadSingle() {
    method getDownloadMaybe (line 185) | public Maybe<String> getDownloadMaybe() {
    method getDownloadCompletable (line 189) | public Completable getDownloadCompletable() {
    method getParseObservable (line 193) | public <T> Observable<T> getParseObservable(TypeToken<T> typeToken) {
    method getParseFlowable (line 205) | public <T> Flowable<T> getParseFlowable(TypeToken<T> typeToken) {
    method getParseSingle (line 209) | public <T> Single<T> getParseSingle(TypeToken<T> typeToken) {
    method getParseMaybe (line 213) | public <T> Maybe<T> getParseMaybe(TypeToken<T> typeToken) {
    method getParseCompletable (line 217) | public <T> Completable getParseCompletable(TypeToken<T> typeToken) {
    method getObjectObservable (line 221) | public <T> Observable<T> getObjectObservable(Class<T> objectClass) {
    method getObjectFlowable (line 233) | public <T> Flowable<T> getObjectFlowable(Class<T> objectClass) {
    method getObjectSingle (line 237) | public <T> Single<T> getObjectSingle(Class<T> objectClass) {
    method getObjectMaybe (line 241) | public <T> Maybe<T> getObjectMaybe(Class<T> objectClass) {
    method getObjectCompletable (line 245) | public <T> Completable getObjectCompletable(Class<T> objectClass) {
    method getObjectListObservable (line 249) | public <T> Observable<List<T>> getObjectListObservable(Class<T> object...
    method getObjectListFlowable (line 261) | public <T> Flowable<List<T>> getObjectListFlowable(Class<T> objectClas...
    method getObjectListSingle (line 265) | public <T> Single<List<T>> getObjectListSingle(Class<T> objectClass) {
    method getObjectListMaybe (line 269) | public <T> Maybe<List<T>> getObjectListMaybe(Class<T> objectClass) {
    method getObjectListCompletable (line 273) | public <T> Completable getObjectListCompletable(Class<T> objectClass) {
    class GetRequestBuilder (line 277) | public static class GetRequestBuilder extends ANRequest.GetRequestBuil...
      method GetRequestBuilder (line 279) | public GetRequestBuilder(String url) {
      method GetRequestBuilder (line 283) | private GetRequestBuilder(String url, int method) {
      method build (line 287) | public Rx2ANRequest build() {
    class HeadRequestBuilder (line 292) | public static class HeadRequestBuilder extends GetRequestBuilder {
      method HeadRequestBuilder (line 294) | public HeadRequestBuilder(String url) {
    class OptionsRequestBuilder (line 299) | public static class OptionsRequestBuilder extends GetRequestBuilder {
      method OptionsRequestBuilder (line 301) | public OptionsRequestBuilder(String url) {
    class PostRequestBuilder (line 306) | public static class PostRequestBuilder extends ANRequest.PostRequestBu...
      method PostRequestBuilder (line 308) | public PostRequestBuilder(String url) {
      method PostRequestBuilder (line 312) | private PostRequestBuilder(String url, int method) {
      method build (line 316) | public Rx2ANRequest build() {
    class PutRequestBuilder (line 321) | public static class PutRequestBuilder extends PostRequestBuilder {
      method PutRequestBuilder (line 323) | public PutRequestBuilder(String url) {
    class DeleteRequestBuilder (line 328) | public static class DeleteRequestBuilder extends PostRequestBuilder {
      method DeleteRequestBuilder (line 330) | public DeleteRequestBuilder(String url) {
    class PatchRequestBuilder (line 335) | public static class PatchRequestBuilder extends PostRequestBuilder {
      method PatchRequestBuilder (line 337) | public PatchRequestBuilder(String url) {
    class DynamicRequestBuilder (line 342) | public static class DynamicRequestBuilder extends PostRequestBuilder {
      method DynamicRequestBuilder (line 344) | public DynamicRequestBuilder(String url, int method) {
    class DownloadBuilder (line 349) | public static class DownloadBuilder extends ANRequest.DownloadBuilder<...
      method DownloadBuilder (line 351) | public DownloadBuilder(String url, String dirPath, String fileName) {
      method build (line 355) | public Rx2ANRequest build() {
    class MultiPartBuilder (line 360) | public static class MultiPartBuilder extends ANRequest.MultiPartBuilde...
      method MultiPartBuilder (line 362) | public MultiPartBuilder(String url) {
      method build (line 366) | public Rx2ANRequest build() {

FILE: rx2-android-networking/src/main/java/com/rx2androidnetworking/Rx2AndroidNetworking.java
  class Rx2AndroidNetworking (line 31) | public class Rx2AndroidNetworking {
    method Rx2AndroidNetworking (line 36) | private Rx2AndroidNetworking() {
    method get (line 45) | public static Rx2ANRequest.GetRequestBuilder get(String url) {
    method head (line 55) | public static Rx2ANRequest.HeadRequestBuilder head(String url) {
    method options (line 65) | public static Rx2ANRequest.OptionsRequestBuilder options(String url) {
    method post (line 75) | public static Rx2ANRequest.PostRequestBuilder post(String url) {
    method put (line 85) | public static Rx2ANRequest.PutRequestBuilder put(String url) {
    method delete (line 95) | public static Rx2ANRequest.DeleteRequestBuilder delete(String url) {
    method patch (line 105) | public static Rx2ANRequest.PatchRequestBuilder patch(String url) {
    method download (line 117) | public static Rx2ANRequest.DownloadBuilder download(String url, String...
    method upload (line 127) | public static Rx2ANRequest.MultiPartBuilder upload(String url) {
    method request (line 138) | public static Rx2ANRequest.DynamicRequestBuilder request(String url, i...

FILE: rx2-android-networking/src/main/java/com/rx2androidnetworking/Rx2InternalNetworking.java
  class Rx2InternalNetworking (line 61) | @SuppressWarnings("unchecked")
    method generateSimpleObservable (line 64) | public static <T> Observable<T> generateSimpleObservable(Rx2ANRequest ...
    method generateDownloadObservable (line 120) | public static <T> Observable<T> generateDownloadObservable(final Rx2AN...
    method generateMultipartObservable (line 164) | public static <T> Observable<T> generateMultipartObservable(final Rx2A...
    class SimpleANObservable (line 168) | static final class SimpleANObservable<T> extends Observable<T> {
      method SimpleANObservable (line 173) | SimpleANObservable(Rx2ANRequest request) {
      method subscribeActual (line 178) | @Override
    class DownloadANObservable (line 255) | static final class DownloadANObservable<T> extends Observable<T> {
      method DownloadANObservable (line 260) | DownloadANObservable(Rx2ANRequest request) {
      method subscribeActual (line 265) | @Override
    class MultipartANObservable (line 335) | static final class MultipartANObservable<T> extends Observable<T> {
      method MultipartANObservable (line 339) | MultipartANObservable(Rx2ANRequest request) {
      method subscribeActual (line 343) | @Override
    class ANDisposable (line 428) | private static final class ANDisposable implements Disposable {
      method ANDisposable (line 432) | private ANDisposable(Call call) {
      method dispose (line 436) | @Override
      method isDisposed (line 441) | @Override

FILE: rx2-android-networking/src/test/java/com/rx2androidnetworking/ExampleUnitTest.java
  class ExampleUnitTest (line 31) | public class ExampleUnitTest {
    method addition_isCorrect (line 32) | @Test

FILE: rx2sampleapp/src/androidTest/java/com/rx2sampleapp/ExampleInstrumentedTest.java
  class ExampleInstrumentedTest (line 36) | @RunWith(AndroidJUnit4.class)
    method useAppContext (line 38) | @Test

FILE: rx2sampleapp/src/main/java/com/rx2sampleapp/ApiEndPoint.java
  class ApiEndPoint (line 23) | public class ApiEndPoint {

FILE: rx2sampleapp/src/main/java/com/rx2sampleapp/Rx2ApiTestActivity.java
  class Rx2ApiTestActivity (line 55) | public class Rx2ApiTestActivity extends AppCompatActivity {
    method onCreate (line 59) | @Override
    method getAllUsers (line 65) | public void getAllUsers(View view) {
    method getAnUser (line 106) | public void getAnUser(View view) {
    method checkForHeaderGet (line 144) | public void checkForHeaderGet(View view) {
    method checkForHeaderPost (line 181) | public void checkForHeaderPost(View view) {
    method createAnUser (line 222) | public void createAnUser(View view) {
    method createAnUserJSONObject (line 258) | public void createAnUserJSONObject(View view) {
    method downloadFile (line 300) | public void downloadFile(final View view) {
    method downloadImage (line 342) | public void downloadImage(final View view) {
    method uploadImage (line 377) | public void uploadImage(final View view) {
    method getCurrentConnectionQuality (line 441) | public void getCurrentConnectionQuality(View view) {
    method loadImage (line 445) | public void loadImage(View view) {

FILE: rx2sampleapp/src/main/java/com/rx2sampleapp/Rx2MyApplication.java
  class Rx2MyApplication (line 26) | public class Rx2MyApplication extends Application {
    method getInstance (line 31) | public static Rx2MyApplication getInstance() {
    method onCreate (line 35) | @Override

FILE: rx2sampleapp/src/main/java/com/rx2sampleapp/Rx2OperatorExampleActivity.java
  class Rx2OperatorExampleActivity (line 56) | public class Rx2OperatorExampleActivity extends AppCompatActivity {
    method onCreate (line 60) | @Override
    method onDestroy (line 67) | @Override
    method testApi (line 76) | private void testApi() {
    method map (line 148) | public void map(View view) {
    method getCricketFansObservable (line 192) | private Observable<List<User>> getCricketFansObservable() {
    method getFootballFansObservable (line 201) | private Observable<List<User>> getFootballFansObservable() {
    method findUsersWhoLovesBoth (line 212) | private void findUsersWhoLovesBoth() {
    method filterUserWhoLovesBoth (line 254) | private List<User> filterUserWhoLovesBoth(List<User> cricketFans, List...
    method zip (line 267) | public void zip(View view) {
    method getAllMyFriendsObservable (line 275) | private Observable<List<User>> getAllMyFriendsObservable() {
    method flatMapAndFilter (line 282) | public void flatMapAndFilter(View view) {
    method take (line 329) | public void take(View view) {
    method flatMap (line 373) | public void flatMap(View view) {
    method getUserListObservable (line 422) | private Observable<List<User>> getUserListObservable() {
    method getUserDetailObservable (line 430) | private Observable<UserDetail> getUserDetailObservable(long id) {
    method flatMapWithZip (line 437) | public void flatMapWithZip(View view) {
    method startRxApiTestActivity (line 499) | public void startRxApiTestActivity(View view) {
    method startSubscriptionActivity (line 503) | public void startSubscriptionActivity(View view) {

FILE: rx2sampleapp/src/main/java/com/rx2sampleapp/SubscriptionActivity.java
  class SubscriptionActivity (line 41) | public class SubscriptionActivity extends AppCompatActivity {
    method onCreate (line 49) | @Override
    method onDestroy (line 56) | @Override
    method getCompletable (line 62) | public Completable getCompletable() {
    method getDisposableObserver (line 68) | private DisposableCompletableObserver getDisposableObserver() {
    method downloadFile (line 84) | public void downloadFile(View view) {

FILE: rx2sampleapp/src/main/java/com/rx2sampleapp/model/ApiUser.java
  class ApiUser (line 25) | public class ApiUser {

FILE: rx2sampleapp/src/main/java/com/rx2sampleapp/model/User.java
  class User (line 25) | public class User {
    method User (line 31) | public User(ApiUser apiUser) {

FILE: rx2sampleapp/src/main/java/com/rx2sampleapp/model/UserDetail.java
  class UserDetail (line 25) | public class UserDetail {

FILE: rx2sampleapp/src/main/java/com/rx2sampleapp/utils/Utils.java
  class Utils (line 31) | public class Utils {
    method getRootDirPath (line 33) | public static String getRootDirPath(Context context) {
    method logError (line 42) | public static void logError(String TAG, Throwable e) {

FILE: rx2sampleapp/src/test/java/com/rx2sampleapp/ExampleUnitTest.java
  class ExampleUnitTest (line 31) | public class ExampleUnitTest {
    method addition_isCorrect (line 32) | @Test

FILE: rxsampleapp/src/androidTest/java/com/rxsampleapp/ApplicationTest.java
  class ApplicationTest (line 26) | public class ApplicationTest extends ApplicationTestCase<Application> {
    method ApplicationTest (line 27) | public ApplicationTest() {

FILE: rxsampleapp/src/main/java/com/rxsampleapp/ApiEndPoint.java
  class ApiEndPoint (line 23) | public class ApiEndPoint {

FILE: rxsampleapp/src/main/java/com/rxsampleapp/RxApiTestActivity.java
  class RxApiTestActivity (line 53) | public class RxApiTestActivity extends AppCompatActivity {
    method onCreate (line 57) | @Override
    method getAllUsers (line 63) | public void getAllUsers(View view) {
    method getAnUser (line 104) | public void getAnUser(View view) {
    method checkForHeaderGet (line 142) | public void checkForHeaderGet(View view) {
    method checkForHeaderPost (line 195) | public void checkForHeaderPost(View view) {
    method createAnUser (line 252) | public void createAnUser(View view) {
    method createAnUserJSONObject (line 304) | public void createAnUserJSONObject(View view) {
    method downloadFile (line 362) | public void downloadFile(final View view) {
    method downloadImage (line 420) | public void downloadImage(final View view) {
    method uploadImage (line 471) | public void uploadImage(final View view) {
    method getCurrentConnectionQuality (line 529) | public void getCurrentConnectionQuality(View view) {
    method loadImage (line 533) | public void loadImage(View view) {

FILE: rxsampleapp/src/main/java/com/rxsampleapp/RxMyApplication.java
  class RxMyApplication (line 26) | public class RxMyApplication extends Application {
    method getInstance (line 31) | public static RxMyApplication getInstance() {
    method onCreate (line 35) | @Override

FILE: rxsampleapp/src/main/java/com/rxsampleapp/RxOperatorExampleActivity.java
  class RxOperatorExampleActivity (line 50) | public class RxOperatorExampleActivity extends AppCompatActivity {
    method onCreate (line 54) | @Override
    method onDestroy (line 61) | @Override
    method testApi (line 70) | private void testApi() {
    method map (line 115) | public void map(View view) {
    method getCricketFansObservable (line 161) | private Observable<List<User>> getCricketFansObservable() {
    method getFootballFansObservable (line 171) | private Observable<List<User>> getFootballFansObservable() {
    method findUsersWhoLovesBoth (line 183) | private void findUsersWhoLovesBoth() {
    method filterUserWhoLovesBoth (line 221) | private List<User> filterUserWhoLovesBoth(List<User> cricketFans, List...
    method zip (line 234) | public void zip(View view) {
    method getAllMyFriendsObservable (line 242) | private Observable<List<User>> getAllMyFriendsObservable() {
    method flatMapAndFilter (line 250) | public void flatMapAndFilter(View view) {
    method take (line 293) | public void take(View view) {
    method flatMap (line 332) | public void flatMap(View view) {
    method getUserListObservable (line 377) | private Observable<List<User>> getUserListObservable() {
    method getUserDetailObservable (line 386) | private Observable<UserDetail> getUserDetailObservable(long id) {
    method flatMapWithZip (line 394) | public void flatMapWithZip(View view) {
    method startRxApiTestActivity (line 450) | public void startRxApiTestActivity(View view) {
    method startSubscriptionActivity (line 454) | public void startSubscriptionActivity(View view) {

FILE: rxsampleapp/src/main/java/com/rxsampleapp/SubscriptionActivity.java
  class SubscriptionActivity (line 38) | public class SubscriptionActivity extends AppCompatActivity {
    method onCreate (line 46) | @Override
    method onDestroy (line 54) | @Override
    method getObservable (line 62) | public Observable<String> getObservable() {
    method getObserver (line 68) | private Observer<String> getObserver() {
    method downloadFile (line 87) | public void downloadFile(View view) {

FILE: rxsampleapp/src/main/java/com/rxsampleapp/model/ApiUser.java
  class ApiUser (line 25) | public class ApiUser {

FILE: rxsampleapp/src/main/java/com/rxsampleapp/model/User.java
  class User (line 25) | public class User {
    method User (line 31) | public User(ApiUser apiUser) {

FILE: rxsampleapp/src/main/java/com/rxsampleapp/model/UserDetail.java
  class UserDetail (line 25) | public class UserDetail {

FILE: rxsampleapp/src/main/java/com/rxsampleapp/utils/Utils.java
  class Utils (line 31) | public class Utils {
    method getRootDirPath (line 33) | public static String getRootDirPath(Context context) {
    method logError (line 42) | public static void logError(String TAG, Throwable e) {

FILE: rxsampleapp/src/test/java/com/rxsampleapp/ExampleUnitTest.java
  class ExampleUnitTest (line 27) | public class ExampleUnitTest {
    method addition_isCorrect (line 28) | @Test
Condensed preview — 203 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,134K chars).
[
  {
    "path": ".gitignore",
    "chars": 104,
    "preview": "*.iml\n.gradle\n/local.properties\n/.idea/workspace.xml\n/.idea/libraries\n.DS_Store\n/build\n/captures\n/.idea\n"
  },
  {
    "path": ".travis.yml",
    "chars": 966,
    "preview": "language: android\n\nenv:\n  global:\n    - ADB_INSTALL_TIMEOUT=30\n# Using the new Container-Based Infrastructure\n    - sudo"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 2802,
    "preview": "Change Log\n==========\n\nVersion 1.0.2 *(2018-07-10)*\n----------------------------\n\n * New: Add support for multiple file "
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 374,
    "preview": "# Contributing\n\n1. Fork it!\n2. Checkout the development branch: `git checkout development`\n3. Create your feature branch"
  },
  {
    "path": "LICENSE",
    "chars": 11357,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "README.md",
    "chars": 31780,
    "preview": "<img src=https://raw.githubusercontent.com/amitshekhariitbhu/Fast-Android-Networking/master/assets/androidnetworking.png"
  },
  {
    "path": "android-networking/.gitignore",
    "chars": 7,
    "preview": "/build\n"
  },
  {
    "path": "android-networking/build.gradle",
    "chars": 1780,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/proguard-rules.pro",
    "chars": 701,
    "preview": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /U"
  },
  {
    "path": "android-networking/src/androidTest/AndroidManifest.xml",
    "chars": 986,
    "preview": "<!--\n  ~    Copyright (C) 2016 Amit Shekhar\n  ~    Copyright (C) 2011 Android Open Source Project\n  ~\n  ~    Licensed un"
  },
  {
    "path": "android-networking/src/androidTest/java/com/androidnetworking/GetJSONApiTest.java",
    "chars": 18598,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "android-networking/src/androidTest/java/com/androidnetworking/GetObjectApiTest.java",
    "chars": 17931,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "android-networking/src/androidTest/java/com/androidnetworking/GetStringApiTest.java",
    "chars": 12870,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/androidTest/java/com/androidnetworking/MultipartJSONApiTest.java",
    "chars": 19512,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "android-networking/src/androidTest/java/com/androidnetworking/MultipartObjectApiTest.java",
    "chars": 18843,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "android-networking/src/androidTest/java/com/androidnetworking/MultipartStringApiTest.java",
    "chars": 13865,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "android-networking/src/androidTest/java/com/androidnetworking/PostJSONApiTest.java",
    "chars": 20138,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "android-networking/src/androidTest/java/com/androidnetworking/PostObjectApiTest.java",
    "chars": 19470,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "android-networking/src/androidTest/java/com/androidnetworking/PostStringApiTest.java",
    "chars": 14281,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "android-networking/src/androidTest/java/com/androidnetworking/model/User.java",
    "chars": 899,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "android-networking/src/main/AndroidManifest.xml",
    "chars": 820,
    "preview": "<!--\n  ~    Copyright (C) 2016 Amit Shekhar\n  ~    Copyright (C) 2011 Android Open Source Project\n  ~\n  ~    Licensed un"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/AndroidNetworking.java",
    "chars": 10400,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/cache/LruBitmapCache.java",
    "chars": 1518,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/cache/LruCache.java",
    "chars": 6114,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/common/ANConstants.java",
    "chars": 1566,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/common/ANRequest.java",
    "chars": 68592,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/common/ANResponse.java",
    "chars": 1764,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/common/ConnectionClassManager.java",
    "chars": 5022,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/common/ConnectionQuality.java",
    "chars": 1256,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/common/Method.java",
    "chars": 928,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/common/Priority.java",
    "chars": 1436,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/common/RequestBuilder.java",
    "chars": 2045,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/common/RequestType.java",
    "chars": 868,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/common/ResponseType.java",
    "chars": 903,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/core/ANExecutor.java",
    "chars": 4206,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/core/Core.java",
    "chars": 1460,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/core/DefaultExecutorSupplier.java",
    "chars": 1925,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/core/ExecutorSupplier.java",
    "chars": 960,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/core/MainThreadExecutor.java",
    "chars": 1089,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/core/PriorityThreadFactory.java",
    "chars": 1479,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/error/ANError.java",
    "chars": 2852,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/gsonparserfactory/GsonParserFactory.java",
    "chars": 2586,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/gsonparserfactory/GsonRequestBodyParser.java",
    "chars": 2022,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/gsonparserfactory/GsonResponseBodyParser.java",
    "chars": 1592,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/interceptors/GzipRequestInterceptor.java",
    "chars": 2953,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/interceptors/HttpLoggingInterceptor.java",
    "chars": 10198,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/interfaces/AnalyticsListener.java",
    "chars": 917,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/interfaces/BitmapRequestListener.java",
    "chars": 971,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/interfaces/ConnectionQualityChangeListener.java",
    "chars": 969,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/interfaces/DownloadListener.java",
    "chars": 925,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/interfaces/DownloadProgressListener.java",
    "chars": 880,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/interfaces/JSONArrayRequestListener.java",
    "chars": 972,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/interfaces/JSONObjectRequestListener.java",
    "chars": 975,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/interfaces/OkHttpResponseAndBitmapRequestListener.java",
    "chars": 1087,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/interfaces/OkHttpResponseAndJSONArrayRequestListener.java",
    "chars": 1088,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/interfaces/OkHttpResponseAndJSONObjectRequestListener.java",
    "chars": 1091,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/interfaces/OkHttpResponseAndParsedRequestListener.java",
    "chars": 1051,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/interfaces/OkHttpResponseAndStringRequestListener.java",
    "chars": 1054,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/interfaces/OkHttpResponseListener.java",
    "chars": 1015,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/interfaces/ParsedRequestListener.java",
    "chars": 983,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/interfaces/Parser.java",
    "chars": 1579,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/interfaces/StringRequestListener.java",
    "chars": 938,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/interfaces/UploadProgressListener.java",
    "chars": 876,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/internal/ANImageLoader.java",
    "chars": 12329,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/internal/ANRequestQueue.java",
    "chars": 5427,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/internal/DownloadProgressHandler.java",
    "chars": 1831,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/internal/InternalNetworking.java",
    "chars": 13968,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/internal/InternalRunnable.java",
    "chars": 5863,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/internal/RequestProgressBody.java",
    "chars": 2805,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/internal/ResponseProgressBody.java",
    "chars": 2823,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/internal/SynchronousCall.java",
    "chars": 5808,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/internal/UploadProgressHandler.java",
    "chars": 1809,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/model/MultipartFileBody.java",
    "chars": 297,
    "preview": "package com.androidnetworking.model;\n\nimport java.io.File;\n\npublic class MultipartFileBody {\n\n    public final File file"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/model/MultipartStringBody.java",
    "chars": 287,
    "preview": "package com.androidnetworking.model;\n\npublic class MultipartStringBody {\n\n    public final String value;\n    public fina"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/model/Progress.java",
    "chars": 1054,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/utils/ParseUtil.java",
    "chars": 1437,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/utils/SourceCloseUtil.java",
    "chars": 1416,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/utils/Utils.java",
    "chars": 8651,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/java/com/androidnetworking/widget/ANImageView.java",
    "chars": 5342,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "android-networking/src/main/res/values/strings.xml",
    "chars": 783,
    "preview": "<!--\n  ~    Copyright (C) 2016 Amit Shekhar\n  ~    Copyright (C) 2011 Android Open Source Project\n  ~\n  ~    Licensed un"
  },
  {
    "path": "android-networking/src/test/java/com/androidnetworking/ExampleUnitTest.java",
    "chars": 998,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "app/.gitignore",
    "chars": 7,
    "preview": "/build\n"
  },
  {
    "path": "app/build.gradle",
    "chars": 1542,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "app/proguard-rules.pro",
    "chars": 669,
    "preview": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /U"
  },
  {
    "path": "app/src/androidTest/java/com/androidnetworking/ApplicationTest.java",
    "chars": 1036,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "app/src/main/AndroidManifest.xml",
    "chars": 1808,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~    Copyright (C) 2016 Amit Shekhar\n  ~    Copyright (C) 2011 Android Ope"
  },
  {
    "path": "app/src/main/java/com/networking/ApiEndPoint.java",
    "chars": 1228,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "app/src/main/java/com/networking/ApiTestActivity.java",
    "chars": 59519,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "app/src/main/java/com/networking/ImageGridActivity.java",
    "chars": 1448,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "app/src/main/java/com/networking/MainActivity.java",
    "chars": 10242,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "app/src/main/java/com/networking/MyApplication.java",
    "chars": 2059,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "app/src/main/java/com/networking/OkHttpResponseTestActivity.java",
    "chars": 55888,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "app/src/main/java/com/networking/WebSocketActivity.java",
    "chars": 4093,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "app/src/main/java/com/networking/fragments/ImageGridFragment.java",
    "chars": 7840,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "app/src/main/java/com/networking/model/User.java",
    "chars": 943,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "app/src/main/java/com/networking/provider/Images.java",
    "chars": 27644,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "app/src/main/java/com/networking/utils/Utils.java",
    "chars": 2158,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "app/src/main/res/drawable/photogrid_list_selector.xml",
    "chars": 1145,
    "preview": "<!--\n  ~    Copyright (C) 2016 Amit Shekhar\n  ~    Copyright (C) 2011 Android Open Source Project\n  ~\n  ~    Licensed un"
  },
  {
    "path": "app/src/main/res/layout/activity_api_test.xml",
    "chars": 12101,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n  ~    Copyright (C) 2016 Amit Shekhar\n  ~    Copyright (C) 2011 Android Open"
  },
  {
    "path": "app/src/main/res/layout/activity_main.xml",
    "chars": 6146,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n  ~    Copyright (C) 2016 Amit Shekhar\n  ~    Copyright (C) 2011 Android Open"
  },
  {
    "path": "app/src/main/res/layout/activity_web_socket.xml",
    "chars": 1157,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n  ~ /*\n  ~  *    Copyright (C) 2016 Amit Shekhar\n  ~  *    Copyright (C) 2011"
  },
  {
    "path": "app/src/main/res/layout/image_grid_fragment.xml",
    "chars": 1219,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~    Copyright (C) 2016 Amit Shekhar\n  ~    Copyright (C) 2011 Android Ope"
  },
  {
    "path": "app/src/main/res/values/colors.xml",
    "chars": 1020,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~    Copyright (C) 2016 Amit Shekhar\n  ~    Copyright (C) 2011 Android Ope"
  },
  {
    "path": "app/src/main/res/values/dimens.xml",
    "chars": 1021,
    "preview": "<!--\n  ~    Copyright (C) 2016 Amit Shekhar\n  ~    Copyright (C) 2011 Android Open Source Project\n  ~\n  ~    Licensed un"
  },
  {
    "path": "app/src/main/res/values/strings.xml",
    "chars": 782,
    "preview": "<!--\n  ~    Copyright (C) 2016 Amit Shekhar\n  ~    Copyright (C) 2011 Android Open Source Project\n  ~\n  ~    Licensed un"
  },
  {
    "path": "app/src/main/res/values/styles.xml",
    "chars": 1276,
    "preview": "<!--\n  ~    Copyright (C) 2016 Amit Shekhar\n  ~    Copyright (C) 2011 Android Open Source Project\n  ~\n  ~    Licensed un"
  },
  {
    "path": "app/src/main/res/values-w820dp/dimens.xml",
    "chars": 1060,
    "preview": "<!--\n  ~    Copyright (C) 2016 Amit Shekhar\n  ~    Copyright (C) 2011 Android Open Source Project\n  ~\n  ~    Licensed un"
  },
  {
    "path": "app/src/test/java/com/androidnetworking/ExampleUnitTest.java",
    "chars": 998,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "build.gradle",
    "chars": 1706,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "chars": 200,
    "preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributi"
  },
  {
    "path": "gradle.properties",
    "chars": 1522,
    "preview": "#\n#    Copyright (C) 2016 Amit Shekhar\n#    Copyright (C) 2011 Android Open Source Project\n#\n#    Licensed under the Apa"
  },
  {
    "path": "gradlew",
    "chars": 4971,
    "preview": "#!/usr/bin/env bash\n\n##############################################################################\n##\n##  Gradle start "
  },
  {
    "path": "gradlew.bat",
    "chars": 2314,
    "preview": "@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem "
  },
  {
    "path": "jackson-android-networking/.gitignore",
    "chars": 7,
    "preview": "/build\n"
  },
  {
    "path": "jackson-android-networking/build.gradle",
    "chars": 2036,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "jackson-android-networking/proguard-rules.pro",
    "chars": 669,
    "preview": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /U"
  },
  {
    "path": "jackson-android-networking/src/androidTest/AndroidManifest.xml",
    "chars": 1050,
    "preview": "<!--\n  ~ /*\n  ~  *    Copyright (C) 2016 Amit Shekhar\n  ~  *    Copyright (C) 2011 Android Open Source Project\n  ~  *\n  "
  },
  {
    "path": "jackson-android-networking/src/androidTest/java/com/jacksonandroidnetworking/JacksonGetObjectApiTest.java",
    "chars": 18080,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "jackson-android-networking/src/androidTest/java/com/jacksonandroidnetworking/JacksonPostObjectApiTest.java",
    "chars": 19620,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "jackson-android-networking/src/androidTest/java/com/jacksonandroidnetworking/model/User.java",
    "chars": 906,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "jackson-android-networking/src/main/AndroidManifest.xml",
    "chars": 884,
    "preview": "<!--\n  ~ /*\n  ~  *    Copyright (C) 2016 Amit Shekhar\n  ~  *    Copyright (C) 2011 Android Open Source Project\n  ~  *\n  "
  },
  {
    "path": "jackson-android-networking/src/main/java/com/jacksonandroidnetworking/JacksonParserFactory.java",
    "chars": 3280,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "jackson-android-networking/src/main/java/com/jacksonandroidnetworking/JacksonRequestBodyParser.java",
    "chars": 1508,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "jackson-android-networking/src/main/java/com/jacksonandroidnetworking/JacksonResponseBodyParser.java",
    "chars": 1404,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "jackson-android-networking/src/main/res/values/strings.xml",
    "chars": 846,
    "preview": "<!--\n  ~ /*\n  ~  *    Copyright (C) 2016 Amit Shekhar\n  ~  *    Copyright (C) 2011 Android Open Source Project\n  ~  *\n  "
  },
  {
    "path": "jackson-android-networking/src/test/java/com/jacksonandroidnetworking/ExampleUnitTest.java",
    "chars": 1053,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "rx-android-networking/.gitignore",
    "chars": 7,
    "preview": "/build\n"
  },
  {
    "path": "rx-android-networking/build.gradle",
    "chars": 1514,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "rx-android-networking/proguard-rules.pro",
    "chars": 669,
    "preview": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /U"
  },
  {
    "path": "rx-android-networking/src/androidTest/java/com/rxandroidnetworking/ApplicationTest.java",
    "chars": 1038,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "rx-android-networking/src/main/AndroidManifest.xml",
    "chars": 822,
    "preview": "<!--\n  ~    Copyright (C) 2016 Amit Shekhar\n  ~    Copyright (C) 2011 Android Open Source Project\n  ~\n  ~    Licensed un"
  },
  {
    "path": "rx-android-networking/src/main/java/com/rxandroidnetworking/RxANRequest.java",
    "chars": 9493,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "rx-android-networking/src/main/java/com/rxandroidnetworking/RxAndroidNetworking.java",
    "chars": 4243,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "rx-android-networking/src/main/java/com/rxandroidnetworking/RxInternalNetworking.java",
    "chars": 20795,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "rx-android-networking/src/main/res/values/strings.xml",
    "chars": 784,
    "preview": "<!--\n  ~    Copyright (C) 2016 Amit Shekhar\n  ~    Copyright (C) 2011 Android Open Source Project\n  ~\n  ~    Licensed un"
  },
  {
    "path": "rx-android-networking/src/test/java/com/rxandroidnetworking/ExampleUnitTest.java",
    "chars": 1000,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "rx2-android-networking/.gitignore",
    "chars": 7,
    "preview": "/build\n"
  },
  {
    "path": "rx2-android-networking/build.gradle",
    "chars": 1684,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "rx2-android-networking/proguard-rules.pro",
    "chars": 669,
    "preview": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /U"
  },
  {
    "path": "rx2-android-networking/src/androidTest/AndroidManifest.xml",
    "chars": 1046,
    "preview": "<!--\n  ~ /*\n  ~  *    Copyright (C) 2016 Amit Shekhar\n  ~  *    Copyright (C) 2011 Android Open Source Project\n  ~  *\n  "
  },
  {
    "path": "rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2GetJSONApiTest.java",
    "chars": 17787,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2GetObjectApiTest.java",
    "chars": 16836,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2GetStringApiTest.java",
    "chars": 8743,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2MultipartJSONApiTest.java",
    "chars": 18314,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2MultipartObjectApiTest.java",
    "chars": 17369,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2MultipartStringApiTest.java",
    "chars": 9010,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2PostJSONApiTest.java",
    "chars": 18696,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2PostObjectApiTest.java",
    "chars": 17752,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/Rx2PostStringApiTest.java",
    "chars": 9196,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "rx2-android-networking/src/androidTest/java/com/rx2androidnetworking/model/User.java",
    "chars": 902,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "rx2-android-networking/src/main/AndroidManifest.xml",
    "chars": 880,
    "preview": "<!--\n  ~ /*\n  ~  *    Copyright (C) 2016 Amit Shekhar\n  ~  *    Copyright (C) 2011 Android Open Source Project\n  ~  *\n  "
  },
  {
    "path": "rx2-android-networking/src/main/java/com/rx2androidnetworking/Rx2ANRequest.java",
    "chars": 11927,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "rx2-android-networking/src/main/java/com/rx2androidnetworking/Rx2AndroidNetworking.java",
    "chars": 4315,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "rx2-android-networking/src/main/java/com/rx2androidnetworking/Rx2InternalNetworking.java",
    "chars": 19595,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "rx2-android-networking/src/main/res/values/strings.xml",
    "chars": 842,
    "preview": "<!--\n  ~ /*\n  ~  *    Copyright (C) 2016 Amit Shekhar\n  ~  *    Copyright (C) 2011 Android Open Source Project\n  ~  *\n  "
  },
  {
    "path": "rx2-android-networking/src/test/java/com/rx2androidnetworking/ExampleUnitTest.java",
    "chars": 1134,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "rx2sampleapp/.gitignore",
    "chars": 7,
    "preview": "/build\n"
  },
  {
    "path": "rx2sampleapp/build.gradle",
    "chars": 1853,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "rx2sampleapp/proguard-rules.pro",
    "chars": 669,
    "preview": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /U"
  },
  {
    "path": "rx2sampleapp/src/androidTest/java/com/rx2sampleapp/ExampleInstrumentedTest.java",
    "chars": 1468,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "rx2sampleapp/src/main/AndroidManifest.xml",
    "chars": 1750,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n  ~ /*\n  ~  *    Copyright (C) 2016 Amit Shekhar\n  ~  *    Copyright (C) 2011"
  },
  {
    "path": "rx2sampleapp/src/main/java/com/rx2sampleapp/ApiEndPoint.java",
    "chars": 1230,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "rx2sampleapp/src/main/java/com/rx2sampleapp/Rx2ApiTestActivity.java",
    "chars": 21654,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "rx2sampleapp/src/main/java/com/rx2sampleapp/Rx2MyApplication.java",
    "chars": 1820,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "rx2sampleapp/src/main/java/com/rx2sampleapp/Rx2OperatorExampleActivity.java",
    "chars": 20507,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "rx2sampleapp/src/main/java/com/rx2sampleapp/SubscriptionActivity.java",
    "chars": 2906,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "rx2sampleapp/src/main/java/com/rx2sampleapp/model/ApiUser.java",
    "chars": 914,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "rx2sampleapp/src/main/java/com/rx2sampleapp/model/User.java",
    "chars": 1101,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "rx2sampleapp/src/main/java/com/rx2sampleapp/model/UserDetail.java",
    "chars": 919,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "rx2sampleapp/src/main/java/com/rx2sampleapp/utils/Utils.java",
    "chars": 2395,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "rx2sampleapp/src/main/res/layout/activity_rx_api_test.xml",
    "chars": 6324,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n  ~    Copyright (C) 2016 Amit Shekhar\n  ~    Copyright (C) 2011 Android Open"
  },
  {
    "path": "rx2sampleapp/src/main/res/layout/activity_rx_operator_example.xml",
    "chars": 3582,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n  ~ /*\n  ~  *    Copyright (C) 2016 Amit Shekhar\n  ~  *    Copyright (C) 2011"
  },
  {
    "path": "rx2sampleapp/src/main/res/layout/activity_subscription.xml",
    "chars": 1829,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n  ~ /*\n  ~  *    Copyright (C) 2016 Amit Shekhar\n  ~  *    Copyright (C) 2011"
  },
  {
    "path": "rx2sampleapp/src/main/res/values/colors.xml",
    "chars": 967,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ /*\n  ~  *    Copyright (C) 2016 Amit Shekhar\n  ~  *    Copyright (C) 201"
  },
  {
    "path": "rx2sampleapp/src/main/res/values/dimens.xml",
    "chars": 970,
    "preview": "<!--\n  ~ /*\n  ~  *    Copyright (C) 2016 Amit Shekhar\n  ~  *    Copyright (C) 2011 Android Open Source Project\n  ~  *\n  "
  },
  {
    "path": "rx2sampleapp/src/main/res/values/strings.xml",
    "chars": 834,
    "preview": "<!--\n  ~ /*\n  ~  *    Copyright (C) 2016 Amit Shekhar\n  ~  *    Copyright (C) 2011 Android Open Source Project\n  ~  *\n  "
  },
  {
    "path": "rx2sampleapp/src/main/res/values/styles.xml",
    "chars": 1142,
    "preview": "<!--\n  ~ /*\n  ~  *    Copyright (C) 2016 Amit Shekhar\n  ~  *    Copyright (C) 2011 Android Open Source Project\n  ~  *\n  "
  },
  {
    "path": "rx2sampleapp/src/main/res/values-w820dp/dimens.xml",
    "chars": 1117,
    "preview": "<!--\n  ~ /*\n  ~  *    Copyright (C) 2016 Amit Shekhar\n  ~  *    Copyright (C) 2011 Android Open Source Project\n  ~  *\n  "
  },
  {
    "path": "rx2sampleapp/src/test/java/com/rx2sampleapp/ExampleUnitTest.java",
    "chars": 1126,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "rxsampleapp/.gitignore",
    "chars": 7,
    "preview": "/build\n"
  },
  {
    "path": "rxsampleapp/build.gradle",
    "chars": 1546,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "rxsampleapp/proguard-rules.pro",
    "chars": 675,
    "preview": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in C:"
  },
  {
    "path": "rxsampleapp/src/androidTest/java/com/rxsampleapp/ApplicationTest.java",
    "chars": 1030,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "rxsampleapp/src/main/AndroidManifest.xml",
    "chars": 1652,
    "preview": "<!--\n  ~    Copyright (C) 2016 Amit Shekhar\n  ~    Copyright (C) 2011 Android Open Source Project\n  ~\n  ~    Licensed un"
  },
  {
    "path": "rxsampleapp/src/main/java/com/rxsampleapp/ApiEndPoint.java",
    "chars": 1229,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "rxsampleapp/src/main/java/com/rxsampleapp/RxApiTestActivity.java",
    "chars": 29931,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "rxsampleapp/src/main/java/com/rxsampleapp/RxMyApplication.java",
    "chars": 1815,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "rxsampleapp/src/main/java/com/rxsampleapp/RxOperatorExampleActivity.java",
    "chars": 18406,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "rxsampleapp/src/main/java/com/rxsampleapp/SubscriptionActivity.java",
    "chars": 2827,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "rxsampleapp/src/main/java/com/rxsampleapp/model/ApiUser.java",
    "chars": 913,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "rxsampleapp/src/main/java/com/rxsampleapp/model/User.java",
    "chars": 1100,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "rxsampleapp/src/main/java/com/rxsampleapp/model/UserDetail.java",
    "chars": 918,
    "preview": "/*\n *\n *  *    Copyright (C) 2016 Amit Shekhar\n *  *    Copyright (C) 2011 Android Open Source Project\n *  *\n *  *    Li"
  },
  {
    "path": "rxsampleapp/src/main/java/com/rxsampleapp/utils/Utils.java",
    "chars": 2394,
    "preview": "/*\n *    Copyright (C) 2016 Amit Shekhar\n *    Copyright (C) 2011 Android Open Source Project\n *\n *    Licensed under th"
  },
  {
    "path": "rxsampleapp/src/main/res/layout/activity_rx_api_test.xml",
    "chars": 6324,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n  ~    Copyright (C) 2016 Amit Shekhar\n  ~    Copyright (C) 2011 Android Open"
  },
  {
    "path": "rxsampleapp/src/main/res/layout/activity_rx_operator_example.xml",
    "chars": 3582,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n  ~ /*\n  ~  *    Copyright (C) 2016 Amit Shekhar\n  ~  *    Copyright (C) 2011"
  },
  {
    "path": "rxsampleapp/src/main/res/layout/activity_subscription.xml",
    "chars": 1829,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n  ~ /*\n  ~  *    Copyright (C) 2016 Amit Shekhar\n  ~  *    Copyright (C) 2011"
  },
  {
    "path": "rxsampleapp/src/main/res/values/colors.xml",
    "chars": 910,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~    Copyright (C) 2016 Amit Shekhar\n  ~    Copyright (C) 2011 Android Ope"
  },
  {
    "path": "rxsampleapp/src/main/res/values/dimens.xml",
    "chars": 1020,
    "preview": "<!--\n  ~    Copyright (C) 2016 Amit Shekhar\n  ~    Copyright (C) 2011 Android Open Source Project\n  ~\n  ~    Licensed un"
  },
  {
    "path": "rxsampleapp/src/main/res/values/strings.xml",
    "chars": 776,
    "preview": "<!--\n  ~    Copyright (C) 2016 Amit Shekhar\n  ~    Copyright (C) 2011 Android Open Source Project\n  ~\n  ~    Licensed un"
  },
  {
    "path": "rxsampleapp/src/main/res/values/styles.xml",
    "chars": 1085,
    "preview": "<!--\n  ~    Copyright (C) 2016 Amit Shekhar\n  ~    Copyright (C) 2011 Android Open Source Project\n  ~\n  ~    Licensed un"
  }
]

// ... and 3 more files (download for full content)

About this extraction

This page contains the full source code of the amitshekhariitbhu/AndroidNetworking GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 203 files (1.0 MB), approximately 225.9k tokens, and a symbol index with 1262 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!