Compact and easy to use, 'all-in-one' android network solution

Related tags

Networking wasp
Overview

Android Arsenal API Join the chat at https://gitter.im/orhanobut/wasp

Deprecated

Unfortunately due to many reasons including maintenance cost, this library is deprecated. I recommend to use Retrofit/OkHttp instead. Currently this project only aims to provide some experimental functionalities.

Wasp

A compact and easy to use, 'all-in-one' network solution.

The problem

When it comes to daily development, you need more than just a library to handle networking, you need to handle mocking calls, using multiple end points, handling certificates and cookies and many other boiler plate code. With wasp, you can easily handle everything.

Wasp internally uses:

  • Volley for the network stack
  • Gson for parsing
  • OkHttp for the http stack

Wasp provides:

  • Easy implementation
  • MOCK response via text file or auto generated from model class!
  • Request Interceptors to add attributes (query params, headers, retry policy) to each call
  • Api call based headers
  • Api call based end point
  • Api call based retry policy
  • Cookie management
  • Certificate management
  • Painless Image loading
  • RxJava support
  • Request cancelation
  • Sync request call
  • Async request call

Wasp aims :

  • There are many open issues to contribute. Get this chance to contribute and improve your knowledge!
  • We want to make something that is useful and also motivates people to contribute

Add dependency

More info https://jitpack.io/#orhanobut/wasp/1.15

repositories {
  // ...
  maven { url "https://jitpack.io" }
}

dependencies {
  compile 'com.github.orhanobut:wasp:1.15'
}

Create a service interface

public interface GitHubService {

  // Async call
  @GET("/repos/{id}")
  void getRepo(@Path("id") String id, Callback<Repo> callback);
  
  // Async call with WaspRequest (cancelable)
  @GET("/repos/{id}")
  WaspRequest getRepo(@Path("id") String id, Callback<Repo> callback);
    
  // Rx
  @Mock
  @POST("/repos")
  Observable<Repo> createRepo(@Body Repo repo);
  
  // sync call
  @GET("/users/{id}")
  User getUser(@Path("id") String id);
}

Initialize the wasp

GitHubService service = new Wasp.Builder(this)
  .setEndpoint("https://api.github.com")
  .setRequestInterceptor                     // Optional
  .trustCertificates                         // Optional
  .setHttpStack                              // Optional
  .enableCookies                             // Optional
  .setNetworkMode(NetworkMode.MOCK)          // Optional(Used for Mock)
  .build()
  .create(GitHubService.class);

And use it everywhere!

Async

service.getRepo(id, new Callback<Repo>{

  @Override
  public void onSuccess(Response response, Repo repo) {
    // do something
  }
  
  @Override
  public void onError(WaspError error) {
    // handle error
  }
});

Async with WaspRequest (cancelable)

WaspRequest request = service.getRepo(id, new Callback<Repo>{

  @Override
  public void onSuccess(Response response, Repo repo) {
    // do something
  }
  
  @Override
  public void onError(WaspError error) {
    // handle error
  }
});
request.cancel();  //cancels the request

Rx

Observable<Repo> observable = service.createRepo(repo);

Sync

User user = service.getUser(id);

Check wiki for more details

License

Copyright 2014 Orhan Obut

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.
Comments
  • Fixes synchronous operations.

    Fixes synchronous operations.

    • T used in InternalCallback is wasp.Response class. Sync calls should return the given type of the request itself. I simply changed it to return Object. If you can suggest better alternative, that would be great.
    • Future object is added to VolleyRequest. Either that or listener will be NonNull at a given time. RequestFuture's onResponse method must be called for blocking future.get() method to be finished.

    Fixes #116

    enhancement reviewed 
    opened by tasomaniac 7
  • VolleyNetworkStack : why RequestQueue requestQueue is static ?

    VolleyNetworkStack : why RequestQueue requestQueue is static ?

    If I have two services when creating the second one it will call again VolleyNetworkStack.newInstance which will call the constructor again and because requestQueue is static it will override the previous one. So for exemple if in my first service i need to trust a specific certificate, i will not be able to connect to my web service anymore. I think it should be something like this :

    private RequestQueue requestQueue;
    
    private VolleyNetworkStack(Context context, WaspHttpStack stack) {
        requestQueue = Volley.newRequestQueue(context, (HttpStack) stack.getHttpStack());
    }
    
    static VolleyNetworkStack newInstance(Context context, WaspHttpStack stack) {
        return new VolleyNetworkStack(context, stack);
    }
    
    RequestQueue getRequestQueue() {
        if (requestQueue == null) {
            throw new NullPointerException("Wasp.Builder must be called");
        }
        return requestQueue;
    }
    
    opened by adrienleroy 6
  • how to parse an array without root

    how to parse an array without root

    I couldn't parse a json array without root like below api. If I add a root as Mock data, I can do it easily but no root, no response :D Is it possible to do it thanks to Wasp? http://api.goeuro.com/api/v2/position/suggest/de/izmir

    opened by ghost 5
  • Problem with post body with byte[], body changed!

    Problem with post body with byte[], body changed!

    Parser parse post body returns String, while VolleyRequest return body byte[] with convert string body to byte[] with encoding "UTF-8". The converted byte[] may be changed after the convertion. For example, I want to post a 665 length byte[], in Parser I convert it to String with new String(bytes, "UTF-8") , but in VolleyRequest I get a 669 length byte[] after requestBody.getBytes(PROTOCOL_CHARSET).

    opened by fengshenzhu 4
  • java.io.InterruptedIOException: timeout

    java.io.InterruptedIOException: timeout

    Hey all,

    I have two activities (activity_main and activity_test) in my Android App (just a test application). Each of them has a button. If this will be clicked a login request will be sent over wasp to my server and then the other activity will be opened. When I start another app and then going back to the test App, I get this exception: java.io.InterruptedIOException: timeout after sending several requests again. If you wait about 10 seconds you can send request without the error (exception).

    Here the full log, the first request is successful but the other ones throwing the InterruptedIOException:

    07-07 08:14:50.129  25489-25489/com.example.root.wasptest D/Wasp﹕ ---> REQUEST POST https://h2211501.stratoserver.net/bachelor_webservice/resources/session/login
    07-07 08:14:50.129  25489-25489/com.example.root.wasptest D/Wasp﹕ Header - [Content-Type: application/json]
    07-07 08:14:50.133  25489-25489/com.example.root.wasptest D/Wasp﹕ Body - {"email":"[email protected]","password":"test12"}
    07-07 08:14:50.133  25489-25489/com.example.root.wasptest D/Wasp﹕ ---> END
    07-07 08:14:50.273  25489-25489/com.example.root.wasptest D/Wasp﹕ <--- RESPONSE 200 https://h2211501.stratoserver.net/bachelor_webservice/resources/session/login
    07-07 08:14:50.273  25489-25489/com.example.root.wasptest D/Wasp﹕ Header - [Access-Control-Allow-Credentials: true]
    07-07 08:14:50.273  25489-25489/com.example.root.wasptest D/Wasp﹕ Header - [Access-Control-Allow-Headers: auth_token, main_category_id, Content-Type]
    07-07 08:14:50.273  25489-25489/com.example.root.wasptest D/Wasp﹕ Header - [Access-Control-Allow-Methods: GET, POST, DELETE, PUT]
    07-07 08:14:50.273  25489-25489/com.example.root.wasptest D/Wasp﹕ Header - [Access-Control-Allow-Origin: *]
    07-07 08:14:50.273  25489-25489/com.example.root.wasptest D/Wasp﹕ Header - [Cache-Control: no-cache, no-transform, must-revalidate]
    07-07 08:14:50.273  25489-25489/com.example.root.wasptest D/Wasp﹕ Header - [Connection: keep-alive]
    07-07 08:14:50.273  25489-25489/com.example.root.wasptest D/Wasp﹕ Header - [Content-Length: 53]
    07-07 08:14:50.273  25489-25489/com.example.root.wasptest D/Wasp﹕ Header - [Content-Type: application/json]
    07-07 08:14:50.273  25489-25489/com.example.root.wasptest D/Wasp﹕ Header - [Date: Tue, 07 Jul 2015 08:14:50 GMT]
    07-07 08:14:50.273  25489-25489/com.example.root.wasptest D/Wasp﹕ Header - [OkHttp-Received-Millis: 1436256890275]
    07-07 08:14:50.273  25489-25489/com.example.root.wasptest D/Wasp﹕ Header - [OkHttp-Selected-Protocol: http/1.1]
    07-07 08:14:50.273  25489-25489/com.example.root.wasptest D/Wasp﹕ Header - [OkHttp-Sent-Millis: 1436256890141]
    07-07 08:14:50.273  25489-25489/com.example.root.wasptest D/Wasp﹕ Header - [Server: nginx/1.4.6 (Ubuntu)]
    07-07 08:14:50.273  25489-25489/com.example.root.wasptest D/Wasp﹕ Body - {"auth_token":"e245bd5c-f102-4f91-8cd0-97c96c8581b7"}
    07-07 08:14:50.273  25489-25489/com.example.root.wasptest D/Wasp﹕ <--- END (Size: 53 bytes - Network time: 139 ms)
    07-07 08:14:50.273  25489-25489/com.example.root.wasptest D/Login﹕ e245bd5c-f102-4f91-8cd0-97c96c8581b7
    07-07 08:14:50.345  25489-25489/com.example.root.wasptest W/EGL_genymotion﹕ eglSurfaceAttrib not implemented
    07-07 08:14:50.913  25489-25489/com.example.root.wasptest D/Wasp﹕ ---> REQUEST POST https://h2211501.stratoserver.net/bachelor_webservice/resources/session/login
    07-07 08:14:50.913  25489-25489/com.example.root.wasptest D/Wasp﹕ Header - [Content-Type: application/json]
    07-07 08:14:50.913  25489-25489/com.example.root.wasptest D/Wasp﹕ Body - {"email":"[email protected]","password":"test12"}
    07-07 08:14:50.913  25489-25489/com.example.root.wasptest D/Wasp﹕ ---> END
    07-07 08:14:52.493  25489-25489/com.example.root.wasptest D/Wasp﹕ ---> REQUEST POST https://h2211501.stratoserver.net/bachelor_webservice/resources/session/login
    07-07 08:14:52.493  25489-25489/com.example.root.wasptest D/Wasp﹕ Header - [Content-Type: application/json]
    07-07 08:14:52.493  25489-25489/com.example.root.wasptest D/Wasp﹕ Body - {"email":"[email protected]","password":"test12"}
    07-07 08:14:52.493  25489-25489/com.example.root.wasptest D/Wasp﹕ ---> END
    07-07 08:14:53.421  25489-25489/com.example.root.wasptest D/Wasp﹕ <--- ERROR
    07-07 08:14:53.421  25489-25489/com.example.root.wasptest D/Wasp﹕ Message - [java.io.InterruptedIOException: timeout]
    07-07 08:14:53.421  25489-25489/com.example.root.wasptest D/Wasp﹕ <--- RESPONSE 0 https://h2211501.stratoserver.net/bachelor_webservice/resources/session/login
    07-07 08:14:53.421  25489-25489/com.example.root.wasptest D/Wasp﹕ Body - no body
    07-07 08:14:53.421  25489-25489/com.example.root.wasptest D/Wasp﹕ <--- END (Size: 0 bytes - Network time: 5778 ms)
    07-07 08:14:53.421  25489-25489/com.example.root.wasptest E/Login﹕ java.io.InterruptedIOException: timeout
    07-07 08:14:55.993  25489-25489/com.example.root.wasptest D/Wasp﹕ <--- ERROR
    07-07 08:14:55.993  25489-25489/com.example.root.wasptest D/Wasp﹕ Message - [java.io.InterruptedIOException: timeout]
    07-07 08:14:55.993  25489-25489/com.example.root.wasptest D/Wasp﹕ <--- RESPONSE 0 https://h2211501.stratoserver.net/bachelor_webservice/resources/session/login
    07-07 08:14:55.993  25489-25489/com.example.root.wasptest D/Wasp﹕ Body - no body
    07-07 08:14:55.993  25489-25489/com.example.root.wasptest D/Wasp﹕ <--- END (Size: 0 bytes - Network time: 7382 ms)
    

    Here is my source code. Did I do something wrong or is it a bug? In the following I show just the MainActivity because the other one (TestActitvity) is exactly the same except that the MainActivity will be started.

    WaspApplication.java

    public class WaspApplication extends Application {
        private static WaspService service;
    
        public static WaspService getService(){
            return service;
        }
    
        @Override
        public void onCreate() {
            super.onCreate();
    
            service = new Wasp.Builder(this)
                    .setEndpoint("https://h2211501.stratoserver.net/bachelor_webservice/resources")
                    .setLogLevel(LogLevel.FULL)
                    .trustCertificates()
                    .build()
                    .create(WaspService.class);
        }
    }
    

    WaspService.java

    public interface WaspService {
    
        //---Static header
        @Headers("Content-Type:application/json")
    
        @POST("/session/login")
        WaspRequest login(
                @Body LoginData loginData,
                Callback<LoginResponse> callBack
        );
    }
    

    MainActivity.java

    public class MainActivity extends AppCompatActivity {
        private final RequestManager requestManager = new SimpleRequestManager();
    
        private final WaspService service = WaspApplication.getService();
        private LoginData loginData;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            loginData = new LoginData();
            loginData.setEmail("[email protected]");
            loginData.setPassword("test12");
    
            Button button = (Button) findViewById(R.id.button);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    WaspRequest request = service.login(loginData, callbackLogin);
                    requestManager.addRequest(request);
                }
            });
    
    
        }
    
        ...
        ...
    
        private final Callback<LoginResponse> callbackLogin = new Callback<LoginResponse>() {
            @Override
            public void onSuccess(Response response, LoginResponse loginResponse) {
                Log.d("Login", loginResponse.getToken());
                startTestActivity();
            }
    
            @Override
            public void onError(WaspError waspError) {
                Log.e("Login", waspError.getErrorMessage());
            }
        };
    
        private void startTestActivity(){
            startActivity(new Intent(this, TestActivity.class));
            finish();
        }
    }
    
    opened by kevinkl 4
  • move header decorate in the request getHeader method

    move header decorate in the request getHeader method

    request getHeader method is called in the network thread(not in the main thread), sometime we need to get token from accountmanager, the accountmanager gettoken method is blocking.

    reviewed 
    opened by jiqimaogou 4
  • shows wrong image while actual image is loading

    shows wrong image while actual image is loading

    I have many images in recyclerview. If scrolls to bottom fastly when the application is opened, imageview shows wrong image while actual image is loading. Generally it shows image loaded in previous imageview. When the actual image is loaded, it shows correct image. But it's bad.

    A loading spinner should be shown while image is loading.

    bug 
    opened by farukcankaya 4
  • Cancel Request

    Cancel Request

    Client should be able to cancel the specific request or requests in a very easy way. We should really discuss about this carefully.

    Please consider following items for the suggestions:

    • We don't want to make the logic complex, the steps should be really easy for the client.
    • The solution should follow the design principles. Decoupling is really important for us, we don't want to rely only volley since it's just a network stack that we use for now.
    enhancement 
    opened by orhanobut 4
  • WaspError should include info about Exceptions coming from Volley

    WaspError should include info about Exceptions coming from Volley

    For example, when TimeoutError occurs we could not know the exception is due to time out because all we get from Wasp is a WaspError with status code 0 and null message.

    enhancement 
    opened by kardeslik 3
  • image load

    image load

    • Imageloader is removed, instead imagehandler is introduced.
    • Flicker issue is fixed
    • Parser is reachable from Wasp now
    • LogLevel is reachable from Wasp now.
    • Refactoring
    opened by orhanobut 3
  • Uploading big files

    Uploading big files

    We should introduce File class in order to upload/download big files. This can stay for now but in the future we should think and discuss about it.

    Wasp.File

    enhancement wontfix 
    opened by orhanobut 3
  • Leaking connections?

    Leaking connections?

    I'm noticing these in my console on occasion:

    W/OkHttpClient: A connection to http://10.0.2.2:3000/ was leaked. Did you forget to close a response body?

    Looks like there might need to be some error handling around the OKHttp calls:

    https://github.com/square/okhttp/issues/2311

    Or is this something I'm doing wrong with wasp? As far as I know, I'm making standard gets and my usage is pretty basic.

    opened by DaveSanders 0
  • Attribute Error: BamScanner has no attribute 'indel_table'.

    Attribute Error: BamScanner has no attribute 'indel_table'.

    Hello!

    My name is Maheetha, and I'm a student at a lab at Stanford trying to use WASP for allele-specific expression purposes.

    I have a couple of bugs that I was hoping you might have the answer for. I have everything set up as according to the README file and have all of the SNPs separated by chromosome in a separate directory.

    When I run find_intersecting_snps.py, it finishes chr1, chr10, and chr11 sucessfully. During chr11, it doesn't say that it "skips any SNPs", but it skipped SNPs for chr1 and chr10.

    However, I think the bigger issues is that it finishes after chr11 and doesn't do chr12 or any other chromosome for that matter.

    When I try to do chr8 by itself or start from chr12 (so I remove chr1, chr10, and chr11 from the snp directory) it gives me this error:

    Traceback (most recent call last): File "./WASP_master/mapping/find_intersecting_snps.py", line 810, in is_sorted=options.is_sorted) File "./WASP_master/mapping/find_intersecting_snps.py", line 764, in main remap_num_name, fastq_names, snp_dir) File "./WASP_master/mapping/find_intersecting_snps.py", line 259, in init self.switch_chr() File "./WASP_master/mapping/find_intersecting_snps.py", line 320, in switch_chr self.skip_chr() File "./WASP_master/mapping/find_intersecting_snps.py", line 413, in skip_chr self.empty_table() File "./WASP_master/mapping/find_intersecting_snps.py", line 686, in empty_table self.empty_slot_paired() File "./WASP_master/mapping/find_intersecting_snps.py", line 522, in empty_slot_paired self.shift_SNP_table() File "./WASP_master/mapping/find_intersecting_snps.py", line 649, in shift_SNP_table for indel_pos in self.indel_table[cur_slot]: AttributeError: BamScanner instance has no attribute 'indel_table'

    I don't have any indels in any of my chromosome SNP files, and I'm not sure why suddenly after chr11, it's throwing me this error. I'm not really able to spot the issue.

    I was wondering if you had some ideas.

    Thank you so much for your help,

    Best,

    Maheetha

    opened by maheetha 0
  • How to get statusCode from try/catch on sync request

    How to get statusCode from try/catch on sync request

    Greetings

    Im following the doc about the sync request https://github.com/orhanobut/wasp/wiki/Sync-Request is working. But I cant figure it out how to handle the try/catch properly.

    First I realize that any error would crash the app. So according with documentation "Use try/catch block to handle exceptions". Off course the try/catch rescue the app from crashing, but I cant know what is the error number. So I added the Callback inside the try/catch, very silly of me cause the try/catch handle the exception first, hence the callback is never executed.

    I have being looking at the library classes to understand how to handle the error. By example the Callback lead me to a dead end cause is an Interface. The WaspError gave me some clues, but Im still bouncing.

    How can I get the getStatusCode? This is what I have done so far:

    try {
        User user = service.login();
    }catch (RuntimeException exception) {
        Log.d("ERROR", exception.getCause().toString() + " " + exception.getLocalizedMessage() + " " + exception.getMessage() + " " + exception.getCause().getMessage());
    }
    

    What I need is something like what is done with the Callbacks:

    @Override
    public void onError(WaspError error) {
        //This is what I need
        error.getResponse().getStatusCode();
    }
    

    If I could get any help please, thanks.

    opened by cutiko 0
  • How to catch Exception onError method

    How to catch Exception onError method

    Greetings

    We are having problems with the error 0. We cant figure it out what it is. So Im trying to implement New Relic, especifically this:

    NewRelic.noticeNetworkFailure(String url, String httpMethod, long startTime, long endTime, Exception e)

    This is the New Relic documentation

    I have being looking in the repository but cant figure it out, and also trying to cast some of the error.somthing to Exception but is not posible.

    How can we catch the exception in the onError method?

    [EDITED] If you are reading this please follow the link to an explanation for the error 0 https://github.com/orhanobut/wasp/issues/139

    enhancement 
    opened by cutiko 4
  • Error 0, what does exactly mean?

    Error 0, what does exactly mean?

    Greetings

    At first I thought error 0 was no internet connection cause I had it when I test my app in offline mode. But now Im getting while connected to internet.

    What does error 0 actually means?

    enhancement 
    opened by cutiko 5
Releases(1.15)
  • 1.15(Aug 27, 2015)

  • 1.14(Aug 25, 2015)

  • v1.13(Aug 9, 2015)

  • v1.11(Jun 29, 2015)

    • FormUrlEncoded mime type added
    • Field and FieldMap parameter annotations added
    • Mocks are delayed by 1 second as default
    • Request cancel option added
    WaspRequest request = service.getFoo();
    request.cancel();
    
    • RequestManager added in order to cancel all requests at once.
    • Path values are encoded automatically
    • Wasp.Image now uses the same httpstack as network, thus you can take advantage of everything you set with the builder.
    • Callback is changed, now it contains Response parameter
    Source code(tar.gz)
    Source code(zip)
  • v1.9(Mar 20, 2015)

  • v1.8(Mar 9, 2015)

    • OkHttp's Interceptor support added
    • Adds OkHttpLogInterceptor: An implementation of OkHttp's Interceptor for logging which can be used as an alternative for Wasp's default logging
    • Parser will throw RunTimeException in MOCK network mode and will call onError method of CallBack in LIVE network mode instead of silently logging error.
    • Fixes issues: 58, 68
    Source code(tar.gz)
    Source code(zip)
  • v1.7(Feb 12, 2015)

    • ImageHandler is introduced, volley image loader is removed.
    • Flicker issue for the recycled views is issued.
    • Parser is reachable from Wasp.getParser() now.
    • Major refactoring for parser.
    Source code(tar.gz)
    Source code(zip)
  • v1.6(Feb 3, 2015)

    • Parsing operation is moved to network stack from network handler. This will allow to make the parsing in the worker thread.
    • WaspResponse is public, it will be reachable when there is a need.
    Source code(tar.gz)
    Source code(zip)
  • v1.5(Jan 30, 2015)

    • NetworkMode added in order to avoid clearing mock annotations for real server, it can be set via setNetworkMode method of Wasp.Builder
      NetworkMode.MOCK //Mocks response if mock annotation is present for request
      NetworkMode.LIVE //Retrieves response from server regardless of mock annotation
      
    • Parse errors will no longer cause crashes but will give error for request
    • WaspError improved, it provides methods for getting parsed object by providing a type and getting raw body
    • Logger will chunk messages that are longer than 4000 characters (i.e response bodies) since Android Log allow at most ~4076 bytes
    • MockFactory improved, it will return response body in case of http status code other than 2xx
    • RequestQueue is no longer static.
    • ApplicationContext is used as context even if the activity context is passed. This will decouple the wasp with the activities.
    Source code(tar.gz)
    Source code(zip)
  • v1.4(Jan 22, 2015)

    • Rest API log output is improved
    • Wasp.Image log output is improved
    • LogLevel has more options now.
      LogLevel.NONE // No logs are printed. This is default
      LogLevel.FULL  // Print logs both for REST and Images request
      LogLevel.FULL_REST_ONLY   // Print logs for REST
      LogLevel.FULL_IMAGE_ONLY // Print logs for Images
      
    • QueryMap annotation added. You can use this annotation to add multiple query parameters.
    • Query encode issue is fixed
    Source code(tar.gz)
    Source code(zip)
  • v1.3(Jan 18, 2015)

    • Image class added for image loading initiation
    • Certificate issue is fixed
    • RequestInterceptor changed
    • SimpleInterceptor added
    • Auth annotation added
    • AuthToken added to interceptor
    Source code(tar.gz)
    Source code(zip)
Owner
Orhan Obut
Architect | ex Android GDE
Orhan Obut
Android network client based on Cronet. This library let you easily use QUIC protocol in your Android projects

Android network client based on Cronet. This library let you easily use QUIC protocol in your Android projects

VK.com 104 Dec 12, 2022
Android library listening network connection state and change of the WiFi signal strength with event bus

NetworkEvents Android library listening network connection state and change of the WiFi signal strength with event bus. It works with any implementati

Piotr Wittchen 452 Nov 21, 2022
SimpleApiCalls is a type-safe REST client for Android. The library provides the ability to interact with APIs and send network requests with HttpURLConnection.

SimpleApiCalls ?? SimpleApiCalls is a type-safe REST client for Android. The library provides the ability to interact with APIs and send network reque

null 4 Nov 28, 2022
Write your asynchronous Network / IO call painlessly in Kotlin !!

Asynkio : Write asynced IO/ Network calls painlessly on android | | | Documentation Write your network requests, IO calls in android with Kotlin seaml

Nikhil Chaudhari 82 Jan 26, 2022
A library that observes your network status.

A library that observes your network status. Update in progress ... Download Using gradle In your root build.gradle at the end of repositories add all

Moses Wangira 9 Apr 18, 2022
Sandwich was invented for constructing the standardized response interface from the network response

?? A lightweight and standardized Android network response interface for handling successful data and error responses.

Jaewoong Eum 973 Jan 5, 2023
Operations are performed by calling api endpoints over the network

##About The app Operations are performed by calling api endpoints over the network. Local data is in effect immutable, the client just downloads updat

Marc Daniel Registre 1 Oct 22, 2021
Cli lightning network server, based on LDK (rust-lightning). Provides DUMB-RPC interface (telnet friendly).

Hello Lightning Cli lightning network server, based on LDK (rust-lightning). Provides DUMB-RPC interface (telnet friendly). Example: Build it run it:

null 9 Mar 28, 2022
SMNetworkChecker aims to help check if the network is connected or if the wifi is connected.

Network Checker for Android SMNetworkChecker aims to help check if the network is connected or if the wifi is connected. Preview Network connection O

Sangmin Kim 3 Aug 5, 2022
Easy-to-use webserver with Markdown.

Easy-to-use webserver with Markdown.

Tim 4 May 21, 2022
LiteHttp is a simple, intelligent and flexible HTTP framework for Android. With LiteHttp you can make HTTP request with only one line of code! It could convert a java model to the parameter and rander the response JSON as a java model intelligently.

Android network framework: LiteHttp Tags : litehttp2.x-tutorials Website : http://litesuits.com QQgroup : 42960650 , 47357508 Android网络通信为啥子选 lite-htt

马天宇 829 Dec 29, 2022
All Consumable Code From Amirisback

About This Project SDK for anything your problem to make easier developing android apps Screen Shoot The Meals API Chuck Data 1 Chuck Data 2 TV Movie

Frogobox 10 Nov 25, 2022
IceNet - Fast, Simple and Easy Networking for Android

IceNet FAST, SIMPLE, EASY This library is an Android networking wrapper consisting of a combination of Volley, OkHttp and Gson. For more information s

Anton Nurdin Tuhadiansyah 61 Jun 24, 2022
Android Easy Http - Simplest android http request library.

Android Easy Http Library 繁體中文文檔 About Android Easy Http Library Made on OkHttp. Easy to do http request, just make request and listen for the respons

null 13 Sep 30, 2022
Easy, asynchronous, annotation-based SOAP for Android

IceSoap IceSoap provides quick, easy, asynchronous access to SOAP web services from Android devices. It allows for SOAP responses to be bound to Java

Alex Gilleran 75 Nov 29, 2022
Android 网络请求框架,简单易用,so easy

简单易用的网络框架 项目地址:Github、码云 博客地址:网络请求,如斯优雅 点击此处下载Demo 另外对 OkHttp 原理感兴趣的同学推荐你看以下源码分析文章 OkHttp 精讲:拦截器执行原理 OkHttp 精讲:RetryAndFollowUpInterceptor OkHttp 精讲:B

Android轮子哥 939 Dec 28, 2022
Monitoring water tanker level using NodeMCU ESP8266 and HC-SR04P Ultrasonic Sensor and broadcasting it using a simple HTTP server inside NodeMCU ESP8266 and show data in an Android App

WaterLevel Preface This project aims to finding a tanker water level using NodeMCU with ESP8266 core and HC-SR04P Ultrasonic sensor and broadcasting i

YaMiN 12 Dec 20, 2022
Pluto is a on-device debugger for Android applications, which helps in inspection of HTTP requests/responses, capture Crashes and ANRs and manipulating application data on-the-go.

Pluto Pluto is a on-device debugger for Android applications, which helps in inspection of HTTP requests/responses, capture Crashes and ANRs and manip

Mocklets 8 Aug 22, 2022