This project under develop

Overview

Asynchronous Http Client for Android

Build Status

An asynchronous, callback-based Http client for Android built on top of Apache's HttpClient libraries.

Changelog

See what is new in version 1.4.11 released on 29th June 2020

https://github.com/android-async-http/android-async-http/blob/1.4.11/CHANGELOG.md

Javadoc

Latest Javadoc for 1.4.11 release are available here (also included in Maven repository):

https://android-async-http.github.io/android-async-http/doc/

Features

  • Make asynchronous HTTP requests, handle responses in anonymous callbacks
  • HTTP requests happen outside the UI thread
  • Requests use a threadpool to cap concurrent resource usage
  • GET/POST params builder (RequestParams)
  • Multipart file uploads with no additional third party libraries
  • Tiny size overhead to your application, only 60kb for everything
  • Automatic smart request retries optimized for spotty mobile connections
  • Automatic gzip response decoding support for super-fast requests
  • Optional built-in response parsing into JSON (JsonHttpResponseHandler)
  • Optional persistent cookie store, saves cookies into your app's SharedPreferences
  • Support sni with Conscrypt on older android device (wiki)

Examples

For inspiration and testing on device we've provided Sample Application.
See individual samples here on Github
To run Sample application, simply clone the repository and run this command, to install it on connected device

gradle :sample:installDebug

Maven

You can now integrate this library in your project via Maven. There are available two kind of builds.

releases, maven central

https://repo1.maven.org/maven2/com/loopj/android/android-async-http/

Maven URL: https://repo1.maven.org/maven2/
GroupId: com.loopj.android
ArtifactId: android-async-http
Version: 1.4.11
Packaging: JAR or AAR

Gradle

repositories {
  mavenCentral()
}

dependencies {
  implementation 'com.loopj.android:android-async-http:1.4.11'
}

development snapshots snapshot might not be published yet

https://oss.sonatype.org/content/repositories/snapshots/com/loopj/android/android-async-http/

Maven URL: https://oss.sonatype.org/content/repositories/snapshots/
GroupId: com.loopj.android
ArtifactId: android-async-http
Version: 1.4.12-SNAPSHOT
Packaging: JAR or AAR

Gradle

repositories {
  maven {
    url 'https://oss.sonatype.org/content/repositories/snapshots/'
  }
}
dependencies {
  implementation 'com.loopj.android:android-async-http:1.4.11-SNAPSHOT'
}

Documentation, Features and Examples

Full details and documentation can be found on the project page here:

https://android-async-http.github.io/android-async-http/

Comments
  • New Android 5.1 Deprecated classes which could affect on the library in future

    New Android 5.1 Deprecated classes which could affect on the library in future

    The org.apache.http classes and the AndroidHttpClient class have been deprecated in Android 5.1.

    This is from the new Android 5.1 APIs update. https://developer.android.com/about/versions/android-5.1.html#http

    moderate 
    opened by SlavVv 49
  • android-async-http is powerful,can you release it with maven?

    android-async-http is powerful,can you release it with maven?

    Hi, loopj . android-async-http is powerful,can you release it with maven? you can read this topic as following. https://docs.sonatype.org/display/Repository/Sonatype+OSS+Maven+Repository+Usage+Guide#SonatypeOSSMavenRepositoryUsageGuide-7a.1.POMandsettingsconfig

    opened by snowdream 36
  • isFinished shows incorrect value

    isFinished shows incorrect value

    On rare occasions, RequestHandle isFinished = true even before onSuccess was done processing. I stop on breakpoint in on success while background thread pools if request is finished.

    question duplicate wontfix 
    opened by AAverin 33
  • No response called. Nor succes nor failed

    No response called. Nor succes nor failed

    I put progress dialog in my activity and dismiss it onSuccess and onFailure. There are some cases that ProgressDialog is never dismissed because callback is never called.

    critical 
    opened by irfanzz 33
  • JsonHttpResponseHandler throws NullPointerException when run in loop

    JsonHttpResponseHandler throws NullPointerException when run in loop

    JsonHttpResponseHandler is throwing a NullPointerException when it is run in a loop. The standard AsyncHttpResponseHandler does not.

    JsonHttpResponseHandler code:

    public class RefreshLoopTask extends AsyncTask <String, String, String> {       
        @Override
        protected String doInBackground(String... nothing) {
            try {
                while(true) {
                    String url = "http://echo.jsontest.com/key/value/one/two";
                    AppRestClient.get(url, null, new JsonHttpResponseHandler() {
                        @Override
                        public void onSuccess(JSONObject res) {
                            Log.d("logger", "succ - " + res.toString());
                        }
                        @Override
                        public void onFailure(Throwable e, JSONObject res) {
                            Log.d("logger", "fail - " + res.toString());
                        }
                        @Override
                        public void onFinish() {
                            Log.d("logger", "finis");
                        }
                    });
                    Thread.sleep(5000);
                }
            } catch (InterruptedException e) {
                RefreshLoopTask t = new RefreshLoopTask();
                t.execute();
            }
            return null;
        }
    }
    

    Log output:

    11-27 19:05:37.618: E/AndroidRuntime(20517): FATAL EXCEPTION: Thread-433
    11-27 19:05:37.618: E/AndroidRuntime(20517): java.lang.NullPointerException
    11-27 19:05:37.618: E/AndroidRuntime(20517):    at com.loopj.android.http.AsyncHttpResponseHandler.postRunnable(AsyncHttpResponseHandler.java:412)
    11-27 19:05:37.618: E/AndroidRuntime(20517):    at com.loopj.android.http.JsonHttpResponseHandler$1.run(JsonHttpResponseHandler.java:153)
    11-27 19:05:37.618: E/AndroidRuntime(20517):    at java.lang.Thread.run(Thread.java:841)
    

    AsyncHttpResponseHandler code:

    public class RefreshLoopTask extends AsyncTask <String, String, String> {
    
        @Override
        protected String doInBackground(String... nothing) {
            try {
                while(true) {
                    String url = "http://echo.jsontest.com/key/value/one/two";
                    AppRestClient.get(url, null, new AsyncHttpResponseHandler() {
                        @Override
                        public void onSuccess(String res) {
                            Log.d("logger", "succ - " + res);
                        }
                        @Override
                        public void onFailure(Throwable e, String res) {
                            Log.d("logger", "fail - " + res);
                        }
                        @Override
                        public void onFinish() {
                            Log.d("logger", "finis");
                        }
                    });
                    Thread.sleep(5000);
                }
            } catch (InterruptedException e) {
                RefreshLoopTask t = new RefreshLoopTask();
                t.execute();
            }
            return null;
        }
    }
    

    Log output:

    11-27 19:08:22.008: D/logger(20757): GET - http://echo.jsontest.com/key/value/one/two
    11-27 19:08:22.068: D/logger(20757): succ - {
    11-27 19:08:22.068: D/logger(20757):    "one": "two",
    11-27 19:08:22.068: D/logger(20757):    "key": "value"
    11-27 19:08:22.068: D/logger(20757): }
    11-27 19:08:22.072: D/logger(20757): finis
    11-27 19:08:27.008: D/logger(20757): GET - http://echo.jsontest.com/key/value/one/two
    11-27 19:08:27.080: D/logger(20757): succ - {
    11-27 19:08:27.080: D/logger(20757):    "one": "two",
    11-27 19:08:27.080: D/logger(20757):    "key": "value"
    11-27 19:08:27.080: D/logger(20757): }
    11-27 19:08:27.080: D/logger(20757): finis
    
    critical 
    opened by anulman 28
  • No SNI support

    No SNI support

    At the moment AsyncHttpClient does not support SSL connections that use SNI (Server Name Identification). It's a technique that allows servers to return different SSL certificates depending on the requested host name, which allows using SSL in shared hosting scenarios. However, AsyncHttpClient only fetches the default certificate, therefore every request fails - most of the time even without an exception. It would be nice if SNI support could be added to this project.

    critical 
    opened by viernullvier 25
  • Integration with okhttp

    Integration with okhttp

    http://square.github.io/okhttp/ is superior replacement for java.net.HttpURLConnection and apache httpclient. This is a Square open source project.

    Please add support for this library.

    moderate feature-request duplicate 
    opened by krishnakumarp 22
  • SSL Socket Read  Time Out

    SSL Socket Read Time Out

    I am trying to post data, always receiving "read Time Out"

    Here is the request and respons.

    I am using HTTPS URL applying default security as well:

    Please help

    MySSLSocketFactory sf = null;
            try {
                KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
                trustStore.load(null, null);
                sf = new MySSLSocketFactory(trustStore);
                sf.setHostnameVerifier(MySSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
                this.setSSLSocketFactory(sf);
            } catch (Exception e) {
            }
    
    
    String json = copy.asJson();
    
            addHeader("Content-Type", "application/json");
            addHeader("myAuthorization", getAuthHeader());
    
            StringEntity se = null;
            this.setURLEncodingEnabled(false);
            try {
                se = new StringEntity(json);
                se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
                se.setChunked(true);
    
    
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
                return;
            }
    
            setResponseTimeout(10*1000);
            post(ApplicationContext.getContext(), url, se, "application/json", new AsyncHttpResponseHandler() {
    
                @Override
                public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
                    Log.i("", "Success");
    
                }
    
                @Override
                public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) {
                    Log.i("", "Failed");
    
                }
            });
    
    java.net.SocketTimeoutException: Read timed out
    at org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_read(Native Method)
    at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLInputStream.read(OpenSSLSocketImpl.java:671)
    at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:103)
    at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:191)
    at org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:82)
    at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:174)
    at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:180)
    at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:235)
    at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:259)
    at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:279)
    at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:121)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:428)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
    at com.loopj.android.http.AsyncHttpRequest.makeRequest(AsyncHttpRequest.java:76)
    at com.loopj.android.http.AsyncHttpRequest.makeRequestWithRetries(AsyncHttpRequest.java:95)
    at com.loopj.android.http.AsyncHttpRequest.run(AsyncHttpRequest.java:57)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:442)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
    at java.lang.Thread.run(Thread.java:856)
    
    question on hold 
    opened by faizandedia 21
  • Google custom search(problems with ssl on Android)

    Google custom search(problems with ssl on Android)

    The default implementation of "AsyncHttpClient", failure to process the ssl protocol.

    String url = "https://www.googleapis.com/customsearch/..."
    AsyncHttpClient client = new AsyncHttpClient(true, 80, 443); // client
    client.setUserAgent(Agent.FIREFOX);
    client.get(url, [Handle...]);
    

    Now with my own implementation works as expected:

    MySSLSocketFactory http://pastebin.com/NcKsD2pm HttpSSLFix http://pastebin.com/WZ264xiz

    moderate 
    opened by alexsilva 21
  • StrictMode error - resource leak on 1.4.9

    StrictMode error - resource leak on 1.4.9

    09-20 13:53:07.992  29298-29309/? E/StrictMode﹕ A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
        java.lang.Throwable: Explicit termination method 'close' not called
                at dalvik.system.CloseGuard.open(CloseGuard.java:184)
                at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:289)
                at cz.msebera.android.httpclient.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:535)
                at cz.msebera.android.httpclient.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:403)
                at cz.msebera.android.httpclient.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:472)
                at cz.msebera.android.httpclient.conn.scheme.SchemeSocketFactoryAdaptor.connectSocket(SchemeSocketFactoryAdaptor.java:65)
                at cz.msebera.android.httpclient.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:177)
                at cz.msebera.android.httpclient.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:145)
                at cz.msebera.android.httpclient.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:131)
                at cz.msebera.android.httpclient.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:611)
                at cz.msebera.android.httpclient.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:446)
                at cz.msebera.android.httpclient.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:860)
                at cz.msebera.android.httpclient.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
                at com.loopj.android.http.AsyncHttpRequest.makeRequest(AsyncHttpRequest.java:146)
                at com.loopj.android.http.AsyncHttpRequest.makeRequestWithRetries(AsyncHttpRequest.java:177)
                at com.loopj.android.http.AsyncHttpRequest.run(AsyncHttpRequest.java:106)
                at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
                at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
                at java.lang.Thread.run(Thread.java:818)
    
    moderate 
    opened by toni1727 20
  • Fix for java.lang.ClassCastException in BinaryHttpResponseHandler

    Fix for java.lang.ClassCastException in BinaryHttpResponseHandler

    I've got loads of ClassCastException crash reports and this commit might fix the bug. I'm not yet sure of why this bug exists in the first place. Please confirm this and let me know if I'm doing something wrong here. Thanks

    java.lang.ClassCastException: java.lang.String cannot be cast to byte[]
      at com.loopj.android.http.BinaryHttpResponseHandler.handleMessage(BinaryHttpResponseHandler.java:145)
      at com.loopj.android.http.AsyncHttpResponseHandler$1.handleMessage(AsyncHttpResponseHandler.java:84)
    
    opened by rishabhmhjn 19
  • Exception java.lang.RuntimeException: java.lang.NullPointerException

    Exception java.lang.RuntimeException: java.lang.NullPointerException

    Exception java.lang.RuntimeException: java.lang.NullPointerException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkNotNullParameter, parameter headers at com.loopj.android.http.AsyncHttpResponseHandler.onUserException (AsyncHttpResponseHandler.java:304) at com.loopj.android.http.AsyncHttpResponseHandler.handleMessage (AsyncHttpResponseHandler.java:395) at com.loopj.android.http.AsyncHttpResponseHandler$ResponderHandler.handleMessage (AsyncHttpResponseHandler.java:510) at android.os.Handler.dispatchMessage (Handler.java:106) at android.os.Looper.loop (Looper.java:223) at android.app.ActivityThread.main (ActivityThread.java:7754) at java.lang.reflect.Method.invoke at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:952) Caused by java.lang.NullPointerException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkNotNullParameter, parameter headers at com.xyz.ui.MyActivity$letsDoSomeNetworking$1.onFailure at com.loopj.android.http.JsonHttpResponseHandler.onFailure (JsonHttpResponseHandler.java:233) at com.loopj.android.http.AsyncHttpResponseHandler.handleMessage (AsyncHttpResponseHandler.java:359)

    opened by zainriaz 0
  • HTTPS ignores host verification security risks

    HTTPS ignores host verification security risks

    com.loopj.android.http.MySSLSocketFactory line 165: socketFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

    Google security certification test has HTTPS ignoring host verification security risk.

    opened by aihuier 1
  • HTTPS ignores host verification security risks

    HTTPS ignores host verification security risks

    com.loopj.android.http.MySSLSocketFactory line 165: socketFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

    Google security certification test has HTTPS ignoring host verification security risk.

    opened by aihuier 2
  • Add SECURITY.md

    Add SECURITY.md

    Hey there!

    I belong to an open source security research community, and a member (@ready-research) has found an issue, but doesn’t know the best way to disclose it.

    If not a hassle, might you kindly add a SECURITY.md file with an email, or another contact method? GitHub recommends this best practice to ensure security issues are responsibly disclosed, and it would serve as a simple instruction for security researchers in the future.

    Thank you for your consideration, and I look forward to hearing from you!

    (cc @huntr-helper)

    opened by JamieSlome 0
  • Error 400

    Error 400 "Bad Request" on long URL

    I implemented android-async-http on my Android project, so I can download files from AWS S3.

    For obvious security reasons, the URL includes tokens information, and should be new each time I want to download (or resume) the same file.

    But I have two issues:

    • since the URL needs to be new each time I download a file, I need to change it when I pause a download, then resume it later on
    • I have an error 400 Bad Request each time I try to download a file, using the following kind of URL:

    https://test-audio-hd.s3.eu-central-1.amazonaws.com/1.ogg?X-Amz-Security-Token=IQoJb3JpZ2luX2VjEEcaDGV1LWNlbnRyYWwtMSJGMEQCIHVf%2BG7JJ7uw5COXkMQ5719dfyocDmgJljdMJYfKS4puAiBqI3ELGBf1e%2FVORkJldlBqQVZxWGVHq%2FislvqNhLdwFiqXBggwEAIaDDM4NzQ4OTE5MTY1MiIM6zYKkvbiRyY2cBWRKvQFXv2v2BCIAoZstGO5DU3s%2BCXC6KVGzBr6WDRY8ry%2Bf9t7Zy36TsuJA5cvtBkZnUm5igjRGlnTlUDyrTXG8D27eVG8f61wxgdgMx2TabL4yd%2FkUboYl%2B4RT45a0GGIxZm0n%2FXpP%2FOJlL8N598slZLndRbqY0qXEWGNCuakY%2FknXskpg2poL1g5w5uOziJIMggTNb3rnGSwfRcZd2h%2Bgi5ATsWBHZ41Oh9W2KGT5K6o0TJIm7yp4FsFFdMHgYsqlLpZVlxyqQqNds1K7PdkUKoSFZUQ%2BEEFq7ioUxWFPOpwlum6fRILKufEZeorERg01SC4QojDY7Pi%2BUcQfWb1zkQgJZBL33RxBCJqdmgsCAAeEg7Q1SYFwuD6P%2Bpugjzr4KVrpkC0ncy0JcWzSP5pCLJxzr9y2uSquXeels2BnE9jWxgesA8aeeekShGxUsSzp7uKNN%2BV2otmDRgXB2hX4%2BtIlJmgCtUmSsMwAtGhZbsO1TZOM1v38KOjufWE6e3Lejn7gH0OPHdefYhbfNTsklVIT6LmEYwFrWidxNB%2FiCUAP4wF5z%2Fb8rwiF5ehQ76VUSEPpViYyYRYixWWeoCNQugrnsAjUUqbv23a6JIbCWbIi66SEzqV8jQUlAif0aEX%2FX162wMPQCs4BSPG6RQOoXWnBYx6wMov4%2Bp1%2B%2FKM5zIWQxx%2BvdFHr%2BJV%2BdGZuv8N8DnDlJ9EX%2FWar%2Bi%2F8Es6yVKqInvsAXt2OwrS8XKUN9843bBSx6afcEw3jJ35xn6BZ5Ja6Lnsn%2B7Upxga3nqph5xX%2F4XAgyIiyIcMItaJcfNapy8PViAOpT57pYwp%2BjACN2c2O5L05GvC0rO7i1l4ew6oXDDbqatA3eQr3lTS8WWQrYWpTX3QO6calhQUyobhahaOjpT%2FbgyXn8oVK1WzpWOdkcu3Cy%2F%2Bo4DJbuLVIjZImRlGPGG7tPZEjeH1d%2FYsqhwWemWiWOeXl8txNQbplqdbWgQW7yggTwC%2B9UcDrbcIudVKKTq1MMi4jIcGOogCjr76XH3yvCSPVvdeGsvNMWQNAjZONp3fKEr0wqGfLyhGUOkqABAEeiMEfGt4mSil7rhPgwyaQiaq%2Fv14I2R%2FLJu0GFCfE6sZ74TjacWaEye7%2FCQvwIBfhhVItzaEbd9FIAdLjGlaCJ3s%2F74k%2FvVJ31gKWMG1TU4%2B5LWdwl370IulJ5OhNOEErHrVMtVezhlREStoi9Ur79nwbKVPrsTPiqraQ2k53hEhyo%2FLZqRW0QaBsfo3I0vvigs4crFfplm7Kwrz6vxQuEWjXfgp91FKnYqgi7dxUaw61B5FskZFLNsj9jRtnzXyWZn7lxU%2FCh58a5WECA1U4WsoUpc%2FBB5OB8Pzz5EfjpNy&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20210705T145100Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3599&X-Amz-Credential=ASIAVUOBH23SCGGHNZ4T%2F20210705%2Feu-central-1%2Fs3%2Faws4_request&X-Amz-Signature=9161743269ff7e545dab11121a0660efe9b11c26b27801fd12a76db58701229b

    Thanks for your help.

    opened by mregnauld 0
A small Android project to practice executing network requests and parsing the network response

InspirationalQuotesExercise A small Android project to practice executing network requests and parsing the network response This app uses the ZenQuote

Caren 0 Oct 13, 2021
This project under develop

Asynchronous Http Client for Android An asynchronous, callback-based Http client for Android built on top of Apache's HttpClient libraries. Changelog

null 10.6k Dec 23, 2022
A project which demonstrate how to develop a custom client on android for dribbble.com

##What is this? This is a project with custom client app on android for https://dribbble.com, which you can browse the popular icon and animation, lik

ZhangLei 599 Nov 14, 2022
A project which demonstrate how to develop a custom client on android for dribbble.com

##What is this? This is a project with custom client app on android for https://dribbble.com, which you can browse the popular icon and animation, lik

ZhangLei 599 Nov 14, 2022
Android Library to rapidly develop attractive and insightful charts in android applications.

williamchart Williamchart is an Android Library to rapidly implement attractive and insightful charts in android applications. Note: WilliamChart v3 h

Diogo Bernardino 4.9k Dec 30, 2022
A surgical debugging tool to uncover the layers under your app.

Scalpel DEPRECATED! Android Studio 4.0's layout inspector now includes a live-updating 3D view. Use it! A surgical debugging tool to uncover the layer

Jake Wharton 2.8k Jan 9, 2023
An example of how to extend the ActionBar under the status bar from the theme

Extended ActionBar The problem: Android 4.4 Kitkat introduced a wonderful new opportunity: translucent bars. It's as simple as adding the following to

Eugenio Marletti 160 Nov 11, 2022
Under the Hood is a flexible and powerful Android debug view library. It uses a modular template system that can be easily extended to your needs, although coming with many useful elements built-in.

Under the Hood - Android App Debug View Library Under the Hood is a flexible and powerful Android debug view library. It uses a modular template syste

Patrick Favre-Bulle 217 Nov 25, 2022
An example for who are all going to start learning Kotlin programming language to develop Android application.

Kotlin Example Here is an example for who are all going to start learning Kotlin programming language to develop Android application. First check this

Prabhakar Thota 56 Sep 16, 2022
Android Weather Library: android weather lib to develop weather based app fast and easily

WeatherLib Android weather lib is an android weather aggregator. The lib helps you getting weather data from the most importat weather provider. It su

Surviving with android (by Francesco Azzola) 641 Dec 23, 2022
Chips EditText, Token EditText, Bubble EditText, Spannable EditText and etc.. There are many names of this control. Here I develop easy to understand , modify and integrate Chips Edit Text widget for Android

Chips EditText Library Chips EditText, Token EditText, Bubble EditText, Spannable EditText and etc.. There are many names of this control. Here I deve

kpbird 381 Nov 20, 2022
A surgical debugging tool to uncover the layers under your app.

Scalpel DEPRECATED! Android Studio 4.0's layout inspector now includes a live-updating 3D view. Use it! A surgical debugging tool to uncover the layer

Jake Wharton 2.8k Jan 3, 2023
🍼Debug Bottle is an Android runtime debug / develop tools written using kotlin language.

???? 中文 / ???? 日本語 / ???? English ?? Debug Bottle An Android debug / develop tools written using Kotlin language. All the features in Debug bottle are

Yuriel Arlencloyn 846 Nov 14, 2022
🍼Debug Bottle is an Android runtime debug / develop tools written using kotlin language.

???? 中文 / ???? 日本語 / ???? English ?? Debug Bottle An Android debug / develop tools written using Kotlin language. All the features in Debug bottle are

Yuriel Arlencloyn 846 Nov 14, 2022
Android MVVM framework write in kotlin, develop Android has never been so fun.

KBinding 中文版 Android MVVM framework write in kotlin, base on anko, simple but powerful. It depends on my another project AutoAdapter(A library for sim

Benny 413 Dec 5, 2022
Android ProgressBar that "bends" under its own weight. Inspired by http://drbl.in/nwih

RopeProgressBar Android ProgressBar that "bends" under its own weight. Attributes Attribute Type Default Usage app:ropeMax integer 0 The max value of

Christian De Angelis 206 Dec 18, 2022
An under development minecraft plugin (1.8.8) to learning Kotlin language

CorePlus CorePlus is a minecraft plugin coded with Kotlin language. Still under development CorePlus will be an essential for each minecraft servers !

Gonz 3 Jun 16, 2021
This library makes it easy for you to develop an simple drawing app in android

DrawingCanvas Library for drawing app canvas Features Size , transperancy and color manupulation of brush -- Using setSizeForBrush(), setBrushAlpha()

Mihir Shah 24 Nov 27, 2022