Javascript required
Skip to content Skip to sidebar Skip to footer

Same as Paper? Phospho Ab Reads Whqt/

Paper

Android Arsenal Build Status

Paper's aim is to provide a uncomplicated yet fast object storage option for Android. It allows to apply Java/Kotlin classes as is: without annotations, factory methods, mandatory class extensions etc. Moreover adding or removing fields to information classes is no longer a pain – all data structure changes are handled automatically.

Paper icon

Migration to Maven Central

Library has been moved to Maven Central since service ends for JCenter. Notation that group id has been changed to io.github.pilgr. See the updated section below.

Add together dependency

implementation                              'io.github.pilgr:paperdb:2.7.ii'                          

RxJava wrapper for Newspaper is available equally a separate lib RxPaper2. Thanks @pakoito for it!

Initialize Newspaper

Should be initialized once in Awarding.onCreate():

Threading

  • Paper.init() should be called in UI thread;
  • All other APIs (write, read etc.) are thread-safe and manifestly must be called outside of UI thread. Reading/writing for different cardinals tin be done in parallel.

Salvage

Salve any object, Map, List, HashMap etc. including all internal objects. Use your existing data classes equally is. Note that key is used as file name to store the information so cannot contain symbols similar /.

              Listing<Person>              contacts              =              ...              Paper              .book().write(                "contacts"              , contacts);

Read

Read data objects is every bit piece of cake as

              List<Person>              =              Paper              .book().read(                "contacts"              );

the instantiated grade is exactly the 1 used to save information. Limited changes to the class structure are handled automatically. Meet Handle information grade changes.

Use default values if object doesn't exist in the storage.

              List<Person>              =              Newspaper              .book().read(                "contacts"              ,              new              ArrayList<>());

Delete

Delete information for i cardinal.

              Newspaper              .book().delete(                "contacts"              );

Remove all keys for the given Book. Paper.init() must be called prior calling destroy().

Apply custom book

You can create custom Book with separate storage using

              Paper              .book(                "for-user-1"              ).write(                "contacts"              , contacts);              Paper              .book(                "for-user-2"              ).write(                "contacts"              , contacts);

Each book is located in a split up file folder.

Get all keys

Returns all keys for objects in the book.

              List<String>              allKeys              =              Paper              .book().getAllKeys();

Handle data structure changes

You tin add or remove fields to the course. Then on next read endeavor of a new class:

  • Newly added fields will take their default values.
  • Removed field volition be ignored.

Note: field type changes are not supported.

For example, if y'all take following data class saved in Paper storage:

              class              Volcano              {              public              String              proper noun;              public              boolean              isActive; }

And and then you realized you demand to modify the class like:

              class              Volcano              {              public              String              name;                              //                public boolean isActive; removed field              public              Location              location;                              //                New field              }

the isActive field will be ignored on adjacent read and new location field will have its default value as nada.

Exclude fields

Use transient keyword for fields which yous want to exclude from saving process.

              public              transient              String              tempId              =                              "default"              ;                              //                Won't exist saved            

Set storage location for Book instances

By default, all the Paper data files are located with all files belonging to your app, at ../you-app-package-name/files. To salve data on SDCard or at whatever other location y'all can use new API:

  • Paper.bookOn("/path/to/the/new/location")
  • or Paper.bookOn("path/to/the/new/location", "book-for-user-1") to create custom volume.

Export/Import

  • Use Paper.volume().getPath() to go path for a binder containing all *.pt files for a given book.
  • Use Paper.book().getPath(key) to become path for a particular *.pt file containing saved object for a given key. Experience gratuitous to copy/rewrite those files for export/import purposes. It's your responsibility to finalize file's export/import operations prior accessing data over Paper API.

Proguard config

  • Keep your data classes from modification by Proguard:
              -keep class your.app.data.model.** { *; }                          

as well yous can implement Serializable for all your data classes and go on all of them using:

              -keep grade * implements java.io.Serializable { *; }                          

How information technology works

Newspaper is based on the post-obit assumptions:

  • Datasets on mobile devices are small and usually don't have relations in between;
  • Random file access on wink storage is very fast;

Newspaper saves each object for given central in a separate file and every write/read operations write/read the whole file.

The Kryo is used for object graph serialization and to provide data compatibility support.

Benchmark results

Running Criterion on Nexus iv, in ms:

Benchmark Paper Militarist
Read/write 500 contacts 187 447
Write 500 contacts 108 221
Read 500 contacts 79 155

Limitations

  • Circular references are not supported

Apps using Paper

  • AppDialer – Newspaper initially has been developed as internal lib to reduce start up time for AppDialer. Currently AppDialer has the best kickoff up fourth dimension in its class. And unproblematic no-sql-pain data storage layer similar a bonus.
  • Busmap - This awarding provide all things yous demand for travelling by bus in Ho Chi Minh city, Vietnam. While the source code is not opened, information technology is constitute that the application use Paper internally to manange the charabanc stop data, route information, time information,... and more.

License

              Copyright 2015 Aleksey Masny  Licensed under the Apache License, Version two.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://world wide web.apache.org/licenses/LICENSE-2.0  Unless required by applicable constabulary or agreed to in writing, software distributed under the License is distributed on an "Every bit IS" Ground, WITHOUT WARRANTIES OR Conditions OF ANY KIND, either limited or implied. See the License for the specific language governing permissions and limitations under the License.                          

blossevillecoutiek.blogspot.com

Source: https://github.com/pilgr/Paper