AutoBundle generates boilerplate code for field binding with android.os.Bundle
.
-
Usage
-
Download
-
Thanks
-
License
- Generate builder method
- Bind annotated fields
- Store annotated fields
In your class which has state from Bundle
(Activity
, BroadcastReceiver
, Service
, Fragment
or others),
@Box
for bundle.putXXX with parameters
@Unbox
bundle.getXXXX with fields
@Required
if field or parameter is composite type , add this annotation will check not null
@BundleFlag
if add this annotation, callback of create Method will get a flag
AutoBundle.builder().debug(true)//allow print debug message
//check all create method before use
.validateEagerly(true)
.addOnBundleListener(new OnBundleListener() {
/**
* @param flag flag is @BundFlag value
*/
@Override
public void onBundling(int flag, String key, @Nullable Object value, boolean required) {
Log.e("print", "key:" + key + " flag:" + flag);
}
@Override
public void onCompleted(int flag, @NonNull Bundle bundle) {
Log.e("print", bundle.toString());
//replace or add
// for example
if (flag = xxx) {
bundle.put("xxx", xxx);
}
}
})
.installDefault();
public class MyActivity extends Activity {
// field must not be private/protected.
@Required
@Unbox("loginName")
String loginName;
@Required
@Unbox("password")
String password;
@Unbox("int")
int intValue;
@Unbox("string")
String stringValue;
@Unbox("intArray")
int[] intArrayValue;
@Unbox("stringArray")
String[] stringArrayValue;
@Unbox("parcelable")
Parcelable ParcelableValue;
@Unbox("parcelableArray")
Parcelable[] parcelableArrayValue;
@Unbox("sparseParcelableArray")
SparseArray<? extends Parcelable> sparseParcelableArrayValue;
@Unbox("stringArrayList")
List<String> stringArrayListValue;
@Unbox("parcelableArrayList")
List<? extends Parcelable> parcelableArrayListValue;
@Unbox("serializable")
Serializable serializableValue;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//auto bind the field from bundle
AutoBundle.getDefault().bind(this);
}
public interface BundleService {
@BundleFlag(0)
Bundle getLogin(@Required @Box("loginName") String loginName,
@Required @Box("password") String password);
@BundleFlag(1)
Bundle getInt(@Box("int") int value);
@BundleFlag(2)
Bundle getString(@Box("string") String value);
@BundleFlag(3)
Bundle getIntArray(@Box("intArray") int[] value);
Bundle getStringArray(@Box("stringArray") String[] value);
Bundle getParcelable(@Box("parcelable") Parcelable value);
Bundle getParcelableArray(@Box("parcelableArray") Parcelable[] value);
Bundle getSparseParcelableArray(@Box("sparseParcelableArray")
SparseArray<? extends Parcelable> value);
Bundle getStringArrayList(@Box("stringArrayList") ArrayList<String> value);
Bundle getParcelableArrayList(@Box("parcelableArrayList") ArrayList<? extends Parcelable> value);
Bundle getSerializable(@Box("serializable") Serializable value);
}
//second step: you can crate Bundle like retrofit
Bundle loginBundle = AutoBundle.getDefault()
.create(BundleService.class)
.getLogin("JackWharton","123456");
Bundle intBundle = AutoBundle.getDefault()
.create(BundleService.class)
.getInt(1228);
In target class, Call binding method in onCreate
.
bind(Object target, Bundle bundle)
bind(Activity target)
(equals tobind(activity, activity.getIntent().getExtras())
)
dependencies {
implementation 'com.xcheng:autobundle-api:1.2.3'
annotationProcessor 'com.xcheng:autobundle-compiler:1.2.3'
}
Copyright 2019 xchengDroid
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.