[
  {
    "path": ".gitignore",
    "content": "*.iml\n.gradle\n/local.properties\n/.idea/workspace.xml\n/.idea/libraries\n.DS_Store\n/build\n/captures\n.externalNativeBuild\n"
  },
  {
    "path": ".idea/compiler.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"CompilerConfiguration\">\n    <resourceExtensions />\n    <wildcardResourcePatterns>\n      <entry name=\"!?*.java\" />\n      <entry name=\"!?*.form\" />\n      <entry name=\"!?*.class\" />\n      <entry name=\"!?*.groovy\" />\n      <entry name=\"!?*.scala\" />\n      <entry name=\"!?*.flex\" />\n      <entry name=\"!?*.kt\" />\n      <entry name=\"!?*.clj\" />\n      <entry name=\"!?*.aj\" />\n    </wildcardResourcePatterns>\n    <annotationProcessing>\n      <profile default=\"true\" name=\"Default\" enabled=\"false\">\n        <processorPath useClasspath=\"true\" />\n      </profile>\n    </annotationProcessing>\n  </component>\n</project>"
  },
  {
    "path": ".idea/copyright/profiles_settings.xml",
    "content": "<component name=\"CopyrightManager\">\n  <settings default=\"\" />\n</component>"
  },
  {
    "path": ".idea/encodings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"Encoding\">\n    <file url=\"PROJECT\" charset=\"UTF-8\" />\n  </component>\n</project>"
  },
  {
    "path": ".idea/gradle.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"GradleSettings\">\n    <option name=\"linkedExternalProjectsSettings\">\n      <GradleProjectSettings>\n        <option name=\"distributionType\" value=\"LOCAL\" />\n        <option name=\"externalProjectPath\" value=\"$PROJECT_DIR$\" />\n        <option name=\"gradleHome\" value=\"D:\\Program Files\\Android\\Android Studio\\gradle\\gradle-2.14.1\" />\n        <option name=\"modules\">\n          <set>\n            <option value=\"$PROJECT_DIR$\" />\n            <option value=\"$PROJECT_DIR$/app\" />\n          </set>\n        </option>\n        <option name=\"resolveModulePerSourceSet\" value=\"false\" />\n      </GradleProjectSettings>\n    </option>\n  </component>\n</project>"
  },
  {
    "path": ".idea/misc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"EntryPointsManager\">\n    <entry_points version=\"2.0\" />\n  </component>\n  <component name=\"NullableNotNullManager\">\n    <option name=\"myDefaultNullable\" value=\"android.support.annotation.Nullable\" />\n    <option name=\"myDefaultNotNull\" value=\"android.support.annotation.NonNull\" />\n    <option name=\"myNullables\">\n      <value>\n        <list size=\"4\">\n          <item index=\"0\" class=\"java.lang.String\" itemvalue=\"org.jetbrains.annotations.Nullable\" />\n          <item index=\"1\" class=\"java.lang.String\" itemvalue=\"javax.annotation.Nullable\" />\n          <item index=\"2\" class=\"java.lang.String\" itemvalue=\"edu.umd.cs.findbugs.annotations.Nullable\" />\n          <item index=\"3\" class=\"java.lang.String\" itemvalue=\"android.support.annotation.Nullable\" />\n        </list>\n      </value>\n    </option>\n    <option name=\"myNotNulls\">\n      <value>\n        <list size=\"4\">\n          <item index=\"0\" class=\"java.lang.String\" itemvalue=\"org.jetbrains.annotations.NotNull\" />\n          <item index=\"1\" class=\"java.lang.String\" itemvalue=\"javax.annotation.Nonnull\" />\n          <item index=\"2\" class=\"java.lang.String\" itemvalue=\"edu.umd.cs.findbugs.annotations.NonNull\" />\n          <item index=\"3\" class=\"java.lang.String\" itemvalue=\"android.support.annotation.NonNull\" />\n        </list>\n      </value>\n    </option>\n  </component>\n  <component name=\"ProjectLevelVcsManager\" settingsEditedManually=\"false\">\n    <OptionsSetting value=\"true\" id=\"Add\" />\n    <OptionsSetting value=\"true\" id=\"Remove\" />\n    <OptionsSetting value=\"true\" id=\"Checkout\" />\n    <OptionsSetting value=\"true\" id=\"Update\" />\n    <OptionsSetting value=\"true\" id=\"Status\" />\n    <OptionsSetting value=\"true\" id=\"Edit\" />\n    <ConfirmationsSetting value=\"0\" id=\"Add\" />\n    <ConfirmationsSetting value=\"0\" id=\"Remove\" />\n  </component>\n  <component name=\"ProjectRootManager\" version=\"2\" languageLevel=\"JDK_1_7\" default=\"true\" assert-keyword=\"true\" jdk-15=\"true\" project-jdk-name=\"1.8\" project-jdk-type=\"JavaSDK\">\n    <output url=\"file://$PROJECT_DIR$/build/classes\" />\n  </component>\n  <component name=\"ProjectType\">\n    <option name=\"id\" value=\"Android\" />\n  </component>\n</project>"
  },
  {
    "path": ".idea/modules.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ProjectModuleManager\">\n    <modules>\n      <module fileurl=\"file://$PROJECT_DIR$/DemoRealm.iml\" filepath=\"$PROJECT_DIR$/DemoRealm.iml\" />\n      <module fileurl=\"file://$PROJECT_DIR$/app/app.iml\" filepath=\"$PROJECT_DIR$/app/app.iml\" />\n    </modules>\n  </component>\n</project>"
  },
  {
    "path": ".idea/runConfigurations.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"RunConfigurationProducerService\">\n    <option name=\"ignoredProducers\">\n      <set>\n        <option value=\"org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer\" />\n        <option value=\"org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer\" />\n        <option value=\"org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer\" />\n      </set>\n    </option>\n  </component>\n</project>"
  },
  {
    "path": ".idea/vcs.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"VcsDirectoryMappings\">\n    <mapping directory=\"\" vcs=\"Git\" />\n  </component>\n</project>"
  },
  {
    "path": "README.md",
    "content": "##Demo是以本地收藏为应用场景的，实现了对Realm的增删改查等操作，以及异步的增删改查操作，欢迎Star、Fork\n使用详情请看我的简书http://www.jianshu.com/p/28912c2f31db\n##DownloadDemo\n![image](https://github.com/RaphetS/DemoRealm/blob/master/Screenshot/demoURL.png)\n\n\n效果图\n\n![image](https://github.com/RaphetS/DemoRealm/blob/master/Screenshot/%E5%A2%9E%E5%88%A0%E6%9F%A5.gif)\n![image](https://github.com/RaphetS/DemoRealm/blob/master/Screenshot/%E6%94%B9.gif)\n\n![image](https://github.com/RaphetS/DemoRealm/blob/master/Screenshot/%E5%88%A0.gif)\n![image](https://github.com/RaphetS/DemoRealm/blob/master/Screenshot/%E6%9D%A1%E4%BB%B6%E6%9F%A5%E8%AF%A2.gif)\n\n\n![image](https://github.com/RaphetS/DemoRealm/blob/master/Screenshot/%E5%85%B6%E4%BB%96%E6%9F%A5%E8%AF%A2.gif)\n![image](https://github.com/RaphetS/DemoRealm/blob/master/Screenshot/%E5%BC%82%E6%AD%A5%E5%A2%9E%E5%88%A0.gif)\n\n![image](https://github.com/RaphetS/DemoRealm/blob/master/Screenshot/%E5%BC%82%E6%AD%A5%E6%9B%B4%E6%96%B0.gif)\n![image](https://github.com/RaphetS/DemoRealm/blob/master/Screenshot/%E5%BC%82%E6%AD%A5%E5%88%A0.gif)\n"
  },
  {
    "path": "app/.gitignore",
    "content": "/build\n"
  },
  {
    "path": "app/build.gradle",
    "content": "apply plugin: 'com.android.application'\napply plugin: 'realm-android'\napply plugin: 'android-apt'\n\nandroid {\n    compileSdkVersion 24\n    buildToolsVersion \"24.0.2\"\n    defaultConfig {\n        applicationId \"org.raphets.demorealm\"\n        minSdkVersion 19\n        targetSdkVersion 24\n        versionCode 1\n        versionName \"1.0\"\n        testInstrumentationRunner \"android.support.test.runner.AndroidJUnitRunner\"\n    }\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n        }\n    }\n}\n\ndependencies {\n    compile fileTree(include: ['*.jar'], dir: 'libs')\n    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {\n        exclude group: 'com.android.support', module: 'support-annotations'\n    })\n    compile 'com.android.support:appcompat-v7:24.2.0'\n    testCompile 'junit:junit:4.12'\n    compile 'com.android.support:recyclerview-v7:24.2.0'\n    compile 'com.android.support:cardview-v7:24.2.0'\n    compile 'com.jakewharton:butterknife:8.4.0'\n    apt 'com.jakewharton:butterknife-compiler:8.4.0'\n    compile 'com.android.support:design:24.2.0'\n}\n"
  },
  {
    "path": "app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in D:\\android\\sdk/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the proguardFiles\n# directive in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n"
  },
  {
    "path": "app/src/androidTest/java/org/raphets/demorealm/ExampleInstrumentedTest.java",
    "content": "package org.raphets.demorealm;\n\nimport android.content.Context;\nimport android.support.test.InstrumentationRegistry;\nimport android.support.test.runner.AndroidJUnit4;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\n\nimport static org.junit.Assert.*;\n\n/**\n * Instrumentation test, which will execute on an Android device.\n *\n * @see <a href=\"http://d.android.com/tools/testing\">Testing documentation</a>\n */\n@RunWith(AndroidJUnit4.class)\npublic class ExampleInstrumentedTest {\n    @Test\n    public void useAppContext() throws Exception {\n        // Context of the app under test.\n        Context appContext = InstrumentationRegistry.getTargetContext();\n\n        assertEquals(\"org.raphets.demorealm\", appContext.getPackageName());\n    }\n}\n"
  },
  {
    "path": "app/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"org.raphets.demorealm\">\n\n    <application\n        android:name=\".MyApp\"\n        android:allowBackup=\"true\"\n        android:icon=\"@drawable/icon\"\n        android:label=\"@string/app_name\"\n        android:supportsRtl=\"true\"\n        android:theme=\"@style/AppTheme\">\n        <activity android:name=\".activity.MainActivity\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n        <activity android:name=\".activity.DogListActivity\" />\n        <activity android:name=\".activity.QueryActivity\" />\n        <activity android:name=\".activity.AllDogActivity\" />\n        <activity android:name=\".activity.ConditionQueryActivity\" />\n        <activity android:name=\".activity.UpdateActivity\" />\n        <activity android:name=\".activity.OtherQueryActivity\" />\n        <activity android:name=\".async.AsyncActivity\" />\n        <activity android:name=\".async.AddDeleteActivity\" />\n        <activity android:name=\".async.AsyncQueryActivity\" />\n        <activity android:name=\".async.UpdateCatActivity\"></activity>\n    </application>\n\n</manifest>"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/MyApp.java",
    "content": "package org.raphets.demorealm;\n\nimport android.app.Application;\n\nimport org.raphets.demorealm.util.RealmHelper;\n\nimport io.realm.Realm;\nimport io.realm.RealmConfiguration;\n\n/**\n * Created by matou0289 on 2016/10/21.\n */\n\npublic class MyApp extends Application {\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        Realm.init(this);\n        RealmConfiguration configuration=new RealmConfiguration.Builder()\n                .name(RealmHelper.DB_NAME)\n                .deleteRealmIfMigrationNeeded()\n                .build();\n        Realm.setDefaultConfiguration(configuration);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/activity/AllDogActivity.java",
    "content": "package org.raphets.demorealm.activity;\n\nimport android.content.Intent;\nimport android.support.design.widget.Snackbar;\nimport android.support.v7.app.AppCompatActivity;\nimport android.os.Bundle;\nimport android.support.v7.widget.DefaultItemAnimator;\nimport android.support.v7.widget.LinearLayoutManager;\nimport android.support.v7.widget.RecyclerView;\nimport android.support.v7.widget.Toolbar;\nimport android.support.v7.widget.helper.ItemTouchHelper;\nimport android.util.Log;\nimport android.view.View;\n\nimport org.raphets.demorealm.R;\nimport org.raphets.demorealm.adapter.BaseAdapter;\nimport org.raphets.demorealm.adapter.LikeDogAdapter;\nimport org.raphets.demorealm.bean.Dog;\nimport org.raphets.demorealm.util.DefaultItemTouchHelpCallback;\nimport org.raphets.demorealm.util.RealmHelper;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\n\n/**\n *  查询所有\n */\npublic class AllDogActivity extends BaseActivity {\n    @BindView(R.id.toolBar)\n    Toolbar mToolbar;\n    @BindView(R.id.recyclerView)\n    RecyclerView mRecyclerView;\n\n    private List<Dog> mDogs = new ArrayList<>();\n    private LikeDogAdapter mAdapter;\n    private RealmHelper mRealmHelper;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n\n        setToolbar(mToolbar, \"查询所有\");\n\n        initData();\n\n        addListener();\n    }\n\n    private void initData() {\n        mRealmHelper = new RealmHelper(this);\n\n        mDogs = mRealmHelper.queryAllDog();\n\n        LinearLayoutManager manager = new LinearLayoutManager(this);\n        mRecyclerView.setLayoutManager(manager);\n        mRecyclerView.setItemAnimator(new DefaultItemAnimator());\n\n        mAdapter = new LikeDogAdapter(this, mDogs, R.layout.item_dog);\n        mRecyclerView.setAdapter(mAdapter);\n\n        setSwipeDelete();\n\n        Snackbar.make(mRecyclerView,\"滑动删除item、点击Item进入修改界面\",Snackbar.LENGTH_LONG).show();\n\n    }\n\n    private void setSwipeDelete() {\n        DefaultItemTouchHelpCallback mCallback = new DefaultItemTouchHelpCallback(new DefaultItemTouchHelpCallback.OnItemTouchCallbackListener() {\n            @Override\n            public void onSwiped(int adapterPosition) {\n                //删除数据库数据\n                mRealmHelper.deleteDog(mDogs.get(adapterPosition).getId());\n                //滑动删除\n                mDogs.remove(adapterPosition);\n                mAdapter.notifyItemRemoved(adapterPosition);\n\n            }\n\n            @Override\n            public boolean onMove(int srcPosition, int targetPosition) {\n\n                return false;\n            }\n        });\n        mCallback.setDragEnable(false);\n        mCallback.setSwipeEnable(true);\n        ItemTouchHelper itemTouchHelper = new ItemTouchHelper(mCallback);\n        itemTouchHelper.attachToRecyclerView(mRecyclerView);\n    }\n\n    private void addListener() {\n        mAdapter.setOnItemClickListener(new BaseAdapter.OnItemClickListener() {\n            @Override\n            public void onItemClick(View view, int position) {\n                Intent intent=new Intent(AllDogActivity.this,UpdateActivity.class);\n                intent.putExtra(\"id\",mDogs.get(position).getId());\n                startActivityForResult(intent,100);\n            }\n        });\n    }\n\n\n    @Override\n    public int getLayoutId() {\n        return R.layout.activity_all_dog;\n    }\n\n    @Override\n    protected void onActivityResult(int requestCode, int resultCode, Intent data) {\n        super.onActivityResult(requestCode, resultCode, data);\n\n        if (resultCode==RESULT_OK&&requestCode==100){\n            mDogs.clear();\n            List<Dog> dogs=mRealmHelper.queryAllDog();\n            mDogs.addAll(dogs);\n            mAdapter.notifyDataSetChanged();\n\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/activity/BaseActivity.java",
    "content": "package org.raphets.demorealm.activity;\n\nimport android.os.Bundle;\nimport android.support.annotation.Nullable;\nimport android.support.v7.app.AppCompatActivity;\nimport android.support.v7.widget.Toolbar;\nimport android.view.View;\n\nimport butterknife.ButterKnife;\n\n/**\n * Created by matou0289 on 2016/10/20.\n */\n\npublic abstract class BaseActivity extends AppCompatActivity {\n    @Override\n    protected void onCreate(@Nullable Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(getLayoutId());\n\n        ButterKnife.bind(this);\n    }\n\n    public abstract int getLayoutId();\n\n    protected void setToolbar(Toolbar toolbar,String title){\n        toolbar.setTitle(title);\n        setSupportActionBar(toolbar);\n        getSupportActionBar().setDisplayHomeAsUpEnabled(true);\n        getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(true);\n        toolbar.setNavigationOnClickListener(new View.OnClickListener() {\n            @Override\n            public void onClick(View v) {\n                finish();\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/activity/ConditionQueryActivity.java",
    "content": "package org.raphets.demorealm.activity;\n\nimport android.os.Bundle;\nimport android.support.annotation.Nullable;\nimport android.support.v7.widget.DefaultItemAnimator;\nimport android.support.v7.widget.LinearLayoutManager;\nimport android.support.v7.widget.RecyclerView;\nimport android.support.v7.widget.Toolbar;\nimport android.text.TextUtils;\nimport android.view.View;\nimport android.widget.EditText;\nimport android.widget.Toast;\n\nimport org.raphets.demorealm.R;\nimport org.raphets.demorealm.adapter.LikeDogAdapter;\nimport org.raphets.demorealm.bean.Dog;\nimport org.raphets.demorealm.util.RealmHelper;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport butterknife.BindView;\nimport butterknife.OnClick;\n\n\n/**\n * 条件查询\n */\npublic class ConditionQueryActivity extends BaseActivity {\n    @BindView(R.id.et_id)\n    EditText etId;\n    @BindView(R.id.et_age)\n    EditText etAge;\n    @BindView(R.id.recyclerView)\n    RecyclerView mRecyclerView;\n    @BindView(R.id.toolBar)\n    Toolbar mToolbar;\n\n    private RealmHelper mRealmHelper;\n    private List<Dog> mDogs = new ArrayList<>();\n    private LikeDogAdapter mAdapter;\n\n    @Override\n    public int getLayoutId() {\n        return R.layout.activity_condition_query;\n    }\n\n    @Override\n    protected void onCreate(@Nullable Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setToolbar(mToolbar, \"条件查询\");\n        initData();\n    }\n\n\n    @OnClick({R.id.btn_query_id, R.id.btn_query_age})\n    void onClick(View view) {\n        switch (view.getId()) {\n            case R.id.btn_query_id:\n                queryById();\n                break;\n            case R.id.btn_query_age:\n                queryByAge();\n                break;\n            default:\n                break;\n        }\n\n    }\n\n    private void initData() {\n        mRealmHelper = new RealmHelper(this);\n        mAdapter = new LikeDogAdapter(this, mDogs, R.layout.item_dog);\n\n        LinearLayoutManager manager = new LinearLayoutManager(this);\n        mRecyclerView.setLayoutManager(manager);\n        mRecyclerView.setItemAnimator(new DefaultItemAnimator());\n        mRecyclerView.setAdapter(mAdapter);\n    }\n\n    private void queryById() {\n        String id = etId.getText().toString().trim();\n        if (TextUtils.isEmpty(id)) {\n            Toast.makeText(ConditionQueryActivity.this, \"请输入Id\", Toast.LENGTH_SHORT).show();\n            return;\n        }\n\n        mDogs.clear();\n        Dog dog = mRealmHelper.queryDogById(id);\n        if (dog != null) {\n            mDogs.add(dog);\n\n        } else {\n            Toast.makeText(ConditionQueryActivity.this, \"查询结果为空\", Toast.LENGTH_SHORT).show();\n        }\n        mAdapter.notifyDataSetChanged();\n\n    }\n\n    private void queryByAge() {\n        String age = etAge.getText().toString().trim();\n        if (TextUtils.isEmpty(age)) {\n            Toast.makeText(ConditionQueryActivity.this, \"请输入age\", Toast.LENGTH_SHORT).show();\n            return;\n        }\n\n        mDogs.clear();\n        List<Dog> dogs = mRealmHelper.queryDobByAge(Integer.parseInt(age));\n        if (dogs!=null) {\n            mDogs.addAll(dogs);\n\n        }else {\n            Toast.makeText(ConditionQueryActivity.this, \"查询结果为空\", Toast.LENGTH_SHORT).show();\n\n        }\n        mAdapter.notifyDataSetChanged();\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/activity/DogListActivity.java",
    "content": "package org.raphets.demorealm.activity;\n\nimport android.support.v7.app.AppCompatActivity;\nimport android.os.Bundle;\nimport android.support.v7.widget.LinearLayoutManager;\nimport android.support.v7.widget.RecyclerView;\nimport android.support.v7.widget.Toolbar;\n\nimport org.raphets.demorealm.R;\nimport org.raphets.demorealm.adapter.DogAdapter;\nimport org.raphets.demorealm.bean.Dog;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\n\npublic class DogListActivity extends BaseActivity {\n    @BindView(R.id.toolBar)\n    Toolbar mToolbar;\n    @BindView(R.id.recyclerView)\n    RecyclerView mRecyclerView;\n\n\n    private List<Dog> mDogs = new ArrayList<>();\n    private DogAdapter mAdapter;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n\n        setToolbar(mToolbar, \"查询\");\n\n        initData();\n\n        initRecyclerView();\n    }\n\n    @Override\n    public int getLayoutId() {\n        return R.layout.activity_add;\n    }\n\n\n    private void initRecyclerView() {\n        LinearLayoutManager layoutManager = new LinearLayoutManager(this);\n        mRecyclerView.setLayoutManager(layoutManager);\n        mAdapter = new DogAdapter(this, mDogs, R.layout.item_dog);\n        mRecyclerView.setAdapter(mAdapter);\n    }\n\n\n    private void initData() {\n        Dog dog1 = new Dog();\n        dog1.setName(\"John\");\n        dog1.setAge(1);\n        dog1.setId(\"001\");\n\n        Dog dog2 = new Dog();\n        dog2.setName(\"Kate\");\n        dog2.setAge(2);\n        dog2.setId(\"002\");\n\n        Dog dog3 = new Dog();\n        dog3.setName(\"Amy\");\n        dog3.setAge(2);\n        dog3.setId(\"003\");\n\n        Dog dog4 = new Dog();\n        dog4.setName(\"Kim\");\n        dog4.setAge(3);\n        dog4.setId(\"004\");\n\n        Dog dog5 = new Dog();\n        dog5.setName(\"Mary\");\n        dog5.setAge(1);\n        dog5.setId(\"005\");\n\n\n        Dog dog6 = new Dog();\n        dog6.setName(\"Michael\");\n        dog6.setAge(2);\n        dog6.setId(\"006\");\n\n        Dog dog7 = new Dog();\n        dog7.setName(\"James\");\n        dog7.setAge(3);\n        dog7.setId(\"007\");\n\n        Dog dog8 = new Dog();\n        dog8.setName(\"Paul\");\n        dog8.setAge(1);\n        dog8.setId(\"008\");\n\n        Dog dog9 = new Dog();\n        dog9.setName(\"Lily\");\n        dog9.setAge(1);\n        dog9.setId(\"009\");\n\n        mDogs.add(dog1);\n        mDogs.add(dog2);\n        mDogs.add(dog3);\n        mDogs.add(dog4);\n        mDogs.add(dog5);\n        mDogs.add(dog6);\n        mDogs.add(dog7);\n        mDogs.add(dog8);\n        mDogs.add(dog9);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/activity/MainActivity.java",
    "content": "package org.raphets.demorealm.activity;\n\nimport android.content.Intent;\nimport android.support.annotation.Nullable;\nimport android.os.Bundle;\nimport android.support.v7.widget.Toolbar;\nimport android.view.View;\nimport org.raphets.demorealm.R;\nimport org.raphets.demorealm.async.AsyncActivity;\n\nimport butterknife.BindView;\nimport butterknife.OnClick;\nimport io.realm.Realm;\n\n/**\n * 主界面\n */\npublic class MainActivity extends BaseActivity {\n    @BindView(R.id.toolBar)\n    Toolbar mToolbar;\n\n    @Override\n    protected void onCreate(@Nullable Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n\n        mToolbar.setTitle(\"DemoRealm\");\n        setSupportActionBar(mToolbar);\n\n    }\n\n    @Override\n    public int getLayoutId() {\n        return R.layout.activity_main;\n    }\n\n\n\n    @OnClick({R.id.btn_add,  R.id.btn_query,R.id.btn_async})\n    void onClick(View view) {\n        switch (view.getId()) {\n            case R.id.btn_add:\n                startActivity(new Intent(MainActivity.this,DogListActivity.class));\n                break;\n            case R.id.btn_query:\n                startActivity(new Intent(MainActivity.this,QueryActivity.class));\n                break;\n            case R.id.btn_async:\n                startActivity(new Intent(MainActivity.this,AsyncActivity.class));\n\n                break;\n            default:\n                break;\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/activity/OtherQueryActivity.java",
    "content": "package org.raphets.demorealm.activity;\n\nimport android.support.annotation.Nullable;\nimport android.support.v7.app.AppCompatActivity;\nimport android.os.Bundle;\nimport android.support.v7.widget.Toolbar;\nimport android.widget.TextView;\n\nimport org.raphets.demorealm.R;\nimport org.raphets.demorealm.bean.Dog;\nimport org.raphets.demorealm.util.RealmHelper;\n\nimport butterknife.BindView;\nimport io.realm.Realm;\nimport io.realm.RealmResults;\n\n/**\n * 其他查询\n */\npublic class OtherQueryActivity extends BaseActivity {\n    @BindView(R.id.toolBar)\n    Toolbar mToolbar;\n\n    @BindView(R.id.tv_average_age)\n    TextView tvAverage;//平均年龄\n    @BindView(R.id.tv_sum_age)\n    TextView tvSumAge;//总年龄\n    @BindView(R.id.tv_max_id)\n    TextView tvMaxId;\n\n    private Realm mRealm;\n\n    @Override\n    public int getLayoutId() {\n        return R.layout.activity_other_query;\n    }\n\n    @Override\n    protected void onCreate(@Nullable Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setToolbar(mToolbar,\"其他查询\");\n\n        mRealm=Realm.getDefaultInstance();\n\n        getAverageAge();\n\n        getSumAge();\n\n        getMaxId();\n    }\n\n    /**\n     *  查询平均年龄\n     */\n    private void getAverageAge() {\n         double avgAge=  mRealm.where(Dog.class).findAll().average(\"age\");\n        tvAverage.setText(avgAge+\"岁\");\n    }\n\n    /**\n     *  查询总年龄\n     */\n    private void getSumAge() {\n      Number sum=  mRealm.where(Dog.class).findAll().sum(\"age\");\n        int sumAge=sum.intValue();\n        tvSumAge.setText(sumAge+\"岁\");\n    }\n\n    /**\n     *  查询最大年龄\n     */\n    private void getMaxId(){\n      Number max=  mRealm.where(Dog.class).findAll().max(\"age\");\n        int maxAge=max.intValue();\n        tvMaxId.setText(maxAge+\"岁\");\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/activity/QueryActivity.java",
    "content": "package org.raphets.demorealm.activity;\n\nimport android.content.Intent;\nimport android.support.v7.app.AppCompatActivity;\nimport android.os.Bundle;\nimport android.support.v7.widget.Toolbar;\nimport android.view.View;\n\nimport org.raphets.demorealm.R;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\nimport butterknife.OnClick;\n\n/**\n *  查、改\n */\npublic class QueryActivity extends BaseActivity {\n    @BindView(R.id.toolBar)\n    Toolbar mToolbar;\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setToolbar(mToolbar,\"改、查\");\n    }\n\n    @Override\n    public int getLayoutId() {\n        return R.layout.activity_query;\n    }\n\n    @OnClick({R.id.btn_query, R.id.btn_condition_query,R.id.btn_other_query})\n    void onClick(View view) {\n        switch (view.getId()) {\n            case R.id.btn_query:\n                startActivity(new Intent(QueryActivity.this,AllDogActivity.class));\n                break;\n            case R.id.btn_condition_query:\n                startActivity(new Intent(QueryActivity.this,ConditionQueryActivity.class));\n                break;\n            case R.id.btn_other_query:\n                startActivity(new Intent(QueryActivity.this,OtherQueryActivity.class));\n                break;\n            default:\n                break;\n\n        }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/activity/UpdateActivity.java",
    "content": "package org.raphets.demorealm.activity;\n\nimport android.support.annotation.Nullable;\nimport android.support.v7.app.AppCompatActivity;\nimport android.os.Bundle;\nimport android.support.v7.widget.Toolbar;\nimport android.text.TextUtils;\nimport android.view.View;\nimport android.widget.EditText;\nimport android.widget.Toast;\n\nimport org.raphets.demorealm.R;\nimport org.raphets.demorealm.util.RealmHelper;\n\nimport butterknife.BindView;\nimport butterknife.OnClick;\n\npublic class UpdateActivity extends BaseActivity {\n    @BindView(R.id.toolBar)\n    Toolbar mToolbar;\n    @BindView(R.id.et_name)\n    EditText etName;\n\n    private RealmHelper mRealmHelper;\n    private String mId;\n\n    @Override\n    public int getLayoutId() {\n        return R.layout.activity_update;\n    }\n\n    @Override\n    protected void onCreate(@Nullable Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setToolbar(mToolbar, \"改\");\n\n        initData();\n    }\n\n    private void initData() {\n        mRealmHelper=new RealmHelper(this);\n        mId=getIntent().getStringExtra(\"id\");\n    }\n\n    @OnClick(R.id.btn_update)\n    void onClick(View v) {\n        String name=etName.getText().toString().trim();\n        if (TextUtils.isEmpty(name)){\n            Toast.makeText(UpdateActivity.this,\"请输入名称\",Toast.LENGTH_SHORT).show();\n            return;\n        }\n\n        mRealmHelper.updateDog(mId,name);\n\n        setResult(RESULT_OK);\n        finish();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/adapter/AsyncCatAdapter.java",
    "content": "package org.raphets.demorealm.adapter;\n\nimport android.content.Context;\nimport android.os.AsyncTask;\nimport android.view.View;\nimport android.widget.ImageView;\nimport android.widget.Toast;\n\nimport org.raphets.demorealm.R;\nimport org.raphets.demorealm.bean.Cat;\nimport org.raphets.demorealm.bean.Dog;\nimport org.raphets.demorealm.util.ToastUtil;\n\nimport java.util.List;\n\nimport io.realm.Realm;\nimport io.realm.RealmAsyncTask;\nimport io.realm.RealmChangeListener;\nimport io.realm.RealmModel;\n\n/**\n * Created by RaphetS on 2016/10/21.\n */\n\npublic class AsyncCatAdapter extends BaseAdapter<Cat> {\n    private Realm mRealm;\n    private Context mContext;\n    private RealmAsyncTask addTask;\n    private RealmAsyncTask deleteTask;\n\n    public AsyncCatAdapter(Context context, List<Cat> mDatas, int mLayoutId) {\n        super(context, mDatas, mLayoutId);\n        mContext=context;\n        mRealm=Realm.getDefaultInstance();\n    }\n\n    @Override\n    protected void convert(Context mContext, BaseViewHolder holder, final Cat cat) {\n        holder.setText(R.id.tv_id,cat.getId())\n                .setText(R.id.tv_name,cat.getName());\n        final ImageView imageView=holder.getView(R.id.iv_like);\n        if (isLiked(cat.getId())){\n            imageView.setSelected(true);\n        }else {\n            imageView.setSelected(false);\n        }\n\n        holder.setOnClickListener(R.id.iv_like, new View.OnClickListener() {\n            @Override\n            public void onClick(View v) {\n                if (imageView.isSelected()){\n                    deleteCat(cat.getId(),imageView);\n                }else {\n                    addCat(cat,imageView);\n                }\n\n            }\n        });\n\n    }\n\n\n    private boolean isLiked( String id){\n      Cat cat=  mRealm.where(Cat.class).equalTo(\"id\",id).findFirst();\n        if (cat==null){\n            return false;\n        }else {\n            return  true;\n        }\n    }\n\n    private void addCat(final Cat cat, final ImageView imageView) {\n        addTask=  mRealm.executeTransactionAsync(new Realm.Transaction() {\n            @Override\n            public void execute(Realm realm) {\n                realm.copyToRealm(cat);\n            }\n        }, new Realm.Transaction.OnSuccess() {\n            @Override\n            public void onSuccess() {\n                ToastUtil.showShortToast(mContext,\"收藏成功\");\n                imageView.setSelected(true);\n            }\n        }, new Realm.Transaction.OnError() {\n            @Override\n            public void onError(Throwable error) {\n                ToastUtil.showShortToast(mContext,\"收藏失败\");\n\n            }\n        });\n\n    }\n\n    private void deleteCat(final String id, final ImageView imageView){\n     deleteTask=   mRealm.executeTransactionAsync(new Realm.Transaction() {\n            @Override\n            public void execute(Realm realm) {\n                Cat cat=realm.where(Cat.class).equalTo(\"id\",id).findFirst();\n                cat.deleteFromRealm();\n\n            }\n        }, new Realm.Transaction.OnSuccess() {\n            @Override\n            public void onSuccess() {\n                ToastUtil.showShortToast(mContext,\"取消收藏成功\");\n                imageView.setSelected(false);\n            }\n        }, new Realm.Transaction.OnError() {\n            @Override\n            public void onError(Throwable error) {\n                ToastUtil.showShortToast(mContext,\"取消收藏失败\");\n\n            }\n        });\n\n    }\n\n    public void CancelTask(){\n        if (addTask!=null&&!addTask.isCancelled()){\n            addTask.cancel();\n        }\n        if (deleteTask!=null&&!deleteTask.isCancelled()){\n            deleteTask.cancel();\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/adapter/BaseAdapter.java",
    "content": "package org.raphets.demorealm.adapter;\n\nimport android.content.Context;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\n\n\nimport java.util.List;\n\n/**\n * Created by RaphetS on 2016/9/28.\n * 普通的万能Adapter\n * 支持onItemClick\n * 支持onLongItemClick\n */\npublic abstract class BaseAdapter<T> extends RecyclerView.Adapter<BaseViewHolder> {\n    private Context mContext;\n    private List<T> mDatas;\n    private int mLayoutId;\n    private OnItemClickListener mItemClickListener;\n    private onLongItemClickListener mLongItemClickListener;\n\n    public BaseAdapter(Context mContext, List<T> mDatas, int mLayoutId) {\n        this.mContext = mContext;\n        this.mDatas = mDatas;\n        this.mLayoutId = mLayoutId;\n    }\n\n    public void updateData(List<T> data) {\n        mDatas.clear();\n        mDatas.addAll(data);\n        notifyDataSetChanged();\n    }\n\n    public void addAll(List<T> data) {\n        mDatas.addAll(data);\n        notifyDataSetChanged();\n    }\n\n\n    @Override\n    public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {\n        View view = LayoutInflater.from(mContext).inflate(mLayoutId, parent, false);\n        BaseViewHolder holder = new BaseViewHolder(view);\n        return holder;\n    }\n\n    @Override\n    public int getItemCount() {\n        return mDatas.size();\n    }\n\n\n    @Override\n    public void onBindViewHolder(BaseViewHolder holder, final int position) {\n        convert(mContext, holder, mDatas.get(position));\n        if (mItemClickListener != null) {\n            holder.mItemView.setOnClickListener(new View.OnClickListener() {\n                @Override\n                public void onClick(View v) {\n                    mItemClickListener.onItemClick(v, position);\n                }\n            });\n        }\n        if (mLongItemClickListener != null) {\n            holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {\n                @Override\n                public boolean onLongClick(View v) {\n                    mLongItemClickListener.onLongItemClick(v, position);\n                    return true;\n                }\n            });\n        }\n    }\n\n    protected abstract void convert(Context mContext, BaseViewHolder holder, T t);\n\n\n    public    interface OnItemClickListener {\n        void onItemClick(View view, int position);\n    }\n\n    public    interface onLongItemClickListener {\n        void onLongItemClick(View view, int postion);\n    }\n\n    public void setOnItemClickListener(OnItemClickListener listener) {\n        this.mItemClickListener = listener;\n    }\n\n    public void setonLongItemClickListener(onLongItemClickListener listener) {\n        this.mLongItemClickListener = listener;\n    }\n}"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/adapter/BaseViewHolder.java",
    "content": "package org.raphets.demorealm.adapter;\n\nimport android.annotation.SuppressLint;\nimport android.graphics.Bitmap;\nimport android.graphics.drawable.Drawable;\nimport android.os.Build;\nimport android.support.v7.widget.RecyclerView;\nimport android.text.SpannableStringBuilder;\nimport android.util.SparseArray;\nimport android.view.View;\nimport android.view.animation.AlphaAnimation;\nimport android.widget.Checkable;\nimport android.widget.ImageView;\nimport android.widget.TextView;\n\npublic class BaseViewHolder extends RecyclerView.ViewHolder {\n    SparseArray<View> mViews;\n    View mItemView;\n\n    public BaseViewHolder(View itemView) {\n        super(itemView);\n        mItemView = itemView;\n        mViews = new SparseArray<>();\n    }\n\n\n    public <T extends View> T getView(int viewId) {\n        View view = mViews.get(viewId);\n        if (view == null) {\n            view = mItemView.findViewById(viewId);\n            mViews.put(viewId, view);\n        }\n        return (T) view;\n    }\n\n    public BaseViewHolder setText(int viewId, int resId) {\n        TextView textView = getView(viewId);\n        textView.setText(resId);\n        return this;\n    }\n\n\n    public BaseViewHolder setText(int viewId, String text) {\n        TextView textView = getView(viewId);\n        textView.setText(text);\n        return this;\n    }\n\n    public BaseViewHolder setText(int viewId, SpannableStringBuilder text) {\n        TextView textView = getView(viewId);\n        textView.setText(text);\n        return this;\n    }\n\n    public BaseViewHolder setImageResource(int viewId, int resId) {\n        ImageView view = getView(viewId);\n        view.setImageResource(resId);\n        return this;\n    }\n\n    public BaseViewHolder setImageBitmap(int viewId, Bitmap bitmap) {\n        ImageView view = getView(viewId);\n        view.setImageBitmap(bitmap);\n        return this;\n    }\n\n    public BaseViewHolder setImageDrawable(int viewId, Drawable drawable) {\n        ImageView view = getView(viewId);\n        view.setImageDrawable(drawable);\n        return this;\n    }\n\n    public BaseViewHolder setBackgroundColor(int viewId, int color) {\n        View view = getView(viewId);\n        view.setBackgroundColor(color);\n        return this;\n    }\n\n    public BaseViewHolder setBackgroundResource(int viewId, int backgroundRes) {\n        View view = getView(viewId);\n        view.setBackgroundResource(backgroundRes);\n        return this;\n    }\n\n    public BaseViewHolder setTextColor(int viewId, int textColor) {\n        TextView view = getView(viewId);\n        view.setTextColor(textColor);\n        return this;\n    }\n\n\n    @SuppressLint(\"NewApi\")\n    public BaseViewHolder setAlpha(int viewId, float value) {\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {\n            getView(viewId).setAlpha(value);\n        } else {\n            // Pre-honeycomb hack to set Alpha value\n            AlphaAnimation alpha = new AlphaAnimation(value, value);\n            alpha.setDuration(0);\n            alpha.setFillAfter(true);\n            getView(viewId).startAnimation(alpha);\n        }\n        return this;\n    }\n\n    public BaseViewHolder setVisible(int viewId, int visible) {\n        View view = getView(viewId);\n        view.setVisibility(visible);\n        return this;\n    }\n\n\n    public BaseViewHolder setTag(int viewId, Object tag) {\n        View view = getView(viewId);\n        view.setTag(tag);\n        return this;\n    }\n\n    public BaseViewHolder setTag(int viewId, int key, Object tag) {\n        View view = getView(viewId);\n        view.setTag(key, tag);\n        return this;\n    }\n\n    public BaseViewHolder setChecked(int viewId, boolean checked) {\n        Checkable view = (Checkable) getView(viewId);\n        view.setChecked(checked);\n        return this;\n    }\n\n    /**\n     * 关于事件监听\n     */\n    public BaseViewHolder setOnClickListener(int viewId, View.OnClickListener listener) {\n\n        View view = getView(viewId);\n        view.setOnClickListener(listener);\n        return this;\n    }\n\n    public BaseViewHolder setOnTouchListener(int viewId, View.OnTouchListener listener) {\n        View view = getView(viewId);\n        view.setOnTouchListener(listener);\n        return this;\n    }\n\n    public BaseViewHolder setOnLongClickListener(int viewId, View.OnLongClickListener listener) {\n        View view = getView(viewId);\n        view.setOnLongClickListener(listener);\n        return this;\n    }\n}"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/adapter/DogAdapter.java",
    "content": "package org.raphets.demorealm.adapter;\n\nimport android.content.Context;\nimport android.view.View;\nimport android.widget.ImageView;\n\nimport org.raphets.demorealm.R;\nimport org.raphets.demorealm.bean.Dog;\nimport org.raphets.demorealm.util.RealmHelper;\n\nimport java.util.List;\n\nimport io.realm.Realm;\n\n/**\n * Created by matou0289 on 2016/10/20.\n */\n\npublic class DogAdapter extends BaseAdapter<Dog> {\n\n    private RealmHelper mRealmHleper;\n\n    public DogAdapter(Context mContext, List<Dog> mDatas, int mLayoutId) {\n        super(mContext, mDatas, mLayoutId);\n        mRealmHleper = new RealmHelper(mContext);\n    }\n\n    @Override\n    protected void convert(Context mContext, BaseViewHolder holder, final Dog dog) {\n        holder.setText(R.id.tv_name, dog.getName())\n                .setText(R.id.tv_id, dog.getId());\n\n        final ImageView iv = holder.getView(R.id.iv_like);\n\n        if (mRealmHleper.isDogExist(dog.getId())) {\n            iv.setSelected(true);\n        } else {\n            iv.setSelected(false);\n        }\n\n\n        iv.setOnClickListener(new View.OnClickListener() {\n            @Override\n            public void onClick(View v) {\n                if (iv.isSelected()) {\n                    iv.setSelected(false);\n                    mRealmHleper.deleteDog(dog.getId());\n\n                } else {\n                    iv.setSelected(true);\n                    mRealmHleper.addDog(dog);\n                }\n            }\n        });\n\n\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/adapter/LikeCatAdapter.java",
    "content": "package org.raphets.demorealm.adapter;\n\nimport android.content.Context;\nimport android.view.View;\n\nimport org.raphets.demorealm.R;\nimport org.raphets.demorealm.bean.Cat;\n\nimport java.util.List;\n\n/**\n * Created by RaphetS on 2016/10/21.\n */\n\npublic class LikeCatAdapter extends BaseAdapter<Cat> {\n\n    public LikeCatAdapter(Context mContext, List<Cat> mDatas, int mLayoutId) {\n        super(mContext, mDatas, mLayoutId);\n    }\n\n    @Override\n    protected void convert(Context mContext, BaseViewHolder holder, Cat cat) {\n        holder.setText(R.id.tv_name, cat.getName())\n                .setText(R.id.tv_id,cat.getId())\n                .setVisible(R.id.iv_like, View.INVISIBLE);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/adapter/LikeDogAdapter.java",
    "content": "package org.raphets.demorealm.adapter;\n\nimport android.content.Context;\nimport android.view.View;\nimport android.widget.ImageView;\n\nimport org.raphets.demorealm.R;\nimport org.raphets.demorealm.bean.Dog;\n\nimport java.util.List;\n\n/**\n * Created by matou0289 on 2016/10/20.\n */\n\npublic class LikeDogAdapter extends BaseAdapter<Dog> {\n\n    public LikeDogAdapter(Context mContext, List<Dog> mDatas, int mLayoutId) {\n        super(mContext, mDatas, mLayoutId);\n    }\n\n    @Override\n    protected void convert(Context mContext, BaseViewHolder holder, Dog dog) {\n        holder.setText(R.id.tv_name, dog.getName())\n                .setText(R.id.tv_id,dog.getId())\n                .setVisible(R.id.iv_like, View.INVISIBLE);\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/async/AddDeleteActivity.java",
    "content": "package org.raphets.demorealm.async;\n\nimport android.support.annotation.Nullable;\nimport android.os.Bundle;\nimport android.support.v7.widget.LinearLayoutManager;\nimport android.support.v7.widget.RecyclerView;\nimport android.support.v7.widget.Toolbar;\n\nimport org.raphets.demorealm.R;\nimport org.raphets.demorealm.activity.BaseActivity;\nimport org.raphets.demorealm.adapter.AsyncCatAdapter;\nimport org.raphets.demorealm.bean.Cat;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport butterknife.BindView;\n\npublic class AddDeleteActivity extends BaseActivity {\n    @BindView(R.id.toolBar)\n    Toolbar mToolbar;\n    @BindView(R.id.recyclerView)\n    RecyclerView mRecyclerView;\n\n    private List<Cat> mCats=new ArrayList<>();\n    private String[] letters=new String[]{\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"M\",\"N\",\"U\",\"X\",\"Y\",\"Z\"};\n    private String[] letters1=new String[]{\"a\",\"c\",\"u\",\"p\",\"q\",\"y\"};\n    private AsyncCatAdapter mAdapter;\n\n    @Override\n    public int getLayoutId() {\n        return R.layout.activity_add_delete;\n    }\n\n    @Override\n    protected void onCreate(@Nullable Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setToolbar(mToolbar,\"异步增、删\");\n        initData();\n        setRecyclerView();\n    }\n\n    private void setRecyclerView() {\n        LinearLayoutManager manager=new LinearLayoutManager(this);\n        mRecyclerView.setLayoutManager(manager);\n        mAdapter=new AsyncCatAdapter(this,mCats,R.layout.item_dog);\n        mRecyclerView.setAdapter(mAdapter);\n    }\n\n    private void initData() {\n        for (int i=0;i<15;i++){\n            Cat cat=new Cat();\n            String name=letters[i]+letters1[i%5]+letters1[i%3];\n            cat.setName(name);\n            cat.setAge(i%4);\n            cat.setId(\"10\"+i);\n            mCats.add(cat);\n        }\n    }\n\n    @Override\n    protected void onDestroy() {\n        super.onDestroy();\n        mAdapter.CancelTask();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/async/AsyncActivity.java",
    "content": "package org.raphets.demorealm.async;\n\nimport android.content.Intent;\nimport android.support.annotation.Nullable;\nimport android.support.v7.app.AppCompatActivity;\nimport android.os.Bundle;\nimport android.support.v7.widget.Toolbar;\nimport android.view.View;\n\nimport org.raphets.demorealm.R;\nimport org.raphets.demorealm.activity.BaseActivity;\n\nimport butterknife.BindView;\nimport butterknife.OnClick;\n\npublic class AsyncActivity extends BaseActivity {\n    @BindView(R.id.toolBar)\n    Toolbar mToolbar;\n\n    @Override\n    public int getLayoutId() {\n        return R.layout.activity_async;\n    }\n\n    @Override\n    protected void onCreate(@Nullable Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setToolbar(mToolbar,\"异步操作\");\n    }\n\n    @OnClick({R.id.btn_add_delete,R.id.btn_update_query})\n    void onClick(View view){\n        switch (view.getId()){\n            case R.id.btn_add_delete:\n                startActivity(new Intent(AsyncActivity.this,AddDeleteActivity.class));\n                break;\n            case R.id.btn_update_query:\n                startActivity(new Intent(AsyncActivity.this,AsyncQueryActivity.class));\n\n                break;\n            default:\n                break;\n\n        }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/async/AsyncQueryActivity.java",
    "content": "package org.raphets.demorealm.async;\n\nimport android.content.Intent;\nimport android.support.annotation.Nullable;\nimport android.support.v7.app.AppCompatActivity;\nimport android.os.Bundle;\nimport android.support.v7.widget.DefaultItemAnimator;\nimport android.support.v7.widget.LinearLayoutManager;\nimport android.support.v7.widget.RecyclerView;\nimport android.support.v7.widget.Toolbar;\nimport android.support.v7.widget.helper.ItemTouchHelper;\nimport android.util.Log;\nimport android.view.View;\n\nimport org.raphets.demorealm.R;\nimport org.raphets.demorealm.activity.BaseActivity;\nimport org.raphets.demorealm.adapter.BaseAdapter;\nimport org.raphets.demorealm.adapter.LikeCatAdapter;\nimport org.raphets.demorealm.bean.Cat;\nimport org.raphets.demorealm.util.DefaultItemTouchHelpCallback;\nimport org.raphets.demorealm.util.ToastUtil;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport butterknife.BindView;\nimport io.realm.Realm;\nimport io.realm.RealmAsyncTask;\nimport io.realm.RealmChangeListener;\nimport io.realm.RealmResults;\n\npublic class AsyncQueryActivity extends BaseActivity {\n    @BindView(R.id.toolBar)\n    Toolbar mToolbar;\n    @BindView(R.id.recyclerView)\n    RecyclerView mRecyclerView;\n\n    private Realm mRealm;\n    private List<Cat> mCats=new ArrayList<>();\n    private LikeCatAdapter mAdapter;\n    private RealmResults<Cat> cats;\n    private RealmAsyncTask deleteTask;\n\n    @Override\n    public int getLayoutId() {\n        return R.layout.activity_async_query;\n    }\n\n    @Override\n    protected void onCreate(@Nullable Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setToolbar(mToolbar,\"异步查、改\");\n        mRealm=Realm.getDefaultInstance();\n\n        initRecyclerView();\n\n        getData();\n\n        addListener();\n    }\n\n    private void initRecyclerView() {\n        LinearLayoutManager manager=new LinearLayoutManager(this);\n        mRecyclerView.setLayoutManager(manager);\n        mRecyclerView.setItemAnimator(new DefaultItemAnimator());\n        mAdapter=new LikeCatAdapter(this,mCats,R.layout.item_dog);\n        mRecyclerView.setAdapter(mAdapter);\n        setSwipeDelete();\n    }\n\n\n    private void getData() {\n        cats=mRealm.where(Cat.class).findAllAsync();\n        cats.addChangeListener(new RealmChangeListener<RealmResults<Cat>>() {\n            @Override\n            public void onChange(RealmResults<Cat> element) {\n                Log.i(\"TAG\",\"111111111\");\n               element= element.sort(\"id\");\n                List<Cat> datas=mRealm.copyFromRealm(element);\n                mCats.clear();\n               mCats.addAll(datas);\n                mAdapter.notifyDataSetChanged();\n            }\n        });\n    }\n\n    private void addListener() {\n        mAdapter.setOnItemClickListener(new BaseAdapter.OnItemClickListener() {\n            @Override\n            public void onItemClick(View view, int position) {\n                Intent intent=new Intent(AsyncQueryActivity.this,UpdateCatActivity.class);\n                intent.putExtra(\"id\",mCats.get(position).getId());\n                startActivityForResult(intent,100);\n            }\n        });\n    }\n\n\n\n    private void setSwipeDelete() {\n        DefaultItemTouchHelpCallback mCallback = new DefaultItemTouchHelpCallback(new DefaultItemTouchHelpCallback.OnItemTouchCallbackListener() {\n            @Override\n            public void onSwiped(int adapterPosition) {\n                deleteCat(mCats.get(adapterPosition).getId());\n                mCats.remove(adapterPosition);\n                mAdapter.notifyItemRemoved(adapterPosition);\n            }\n\n            @Override\n            public boolean onMove(int srcPosition, int targetPosition) {\n\n                return false;\n            }\n        });\n        mCallback.setDragEnable(false);\n        mCallback.setSwipeEnable(true);\n        ItemTouchHelper itemTouchHelper = new ItemTouchHelper(mCallback);\n        itemTouchHelper.attachToRecyclerView(mRecyclerView);\n    }\n\n    private void deleteCat(final String id) {\n\n      deleteTask=  mRealm.executeTransactionAsync(new Realm.Transaction() {\n\n            @Override\n            public void execute(Realm realm) {\n                Cat cat=realm.where(Cat.class).equalTo(\"id\",id).findFirst();\n\n                if (cat!=null){\n                   cat.deleteFromRealm();\n               }\n\n            }\n        }, new Realm.Transaction.OnSuccess() {\n            @Override\n            public void onSuccess() {\n                ToastUtil.showShortToast(AsyncQueryActivity.this,\"删除成功\");\n            }\n        }, new Realm.Transaction.OnError() {\n            @Override\n            public void onError(Throwable error) {\n                ToastUtil.showShortToast(AsyncQueryActivity.this,\"删除失败\");\n\n            }\n        });\n\n    }\n\n    @Override\n    protected void onActivityResult(int requestCode, int resultCode, Intent data) {\n        super.onActivityResult(requestCode, resultCode, data);\n        if (resultCode==RESULT_OK&&requestCode==100){\n            mCats.clear();\n            getData();\n        }\n    }\n\n    @Override\n    protected void onDestroy() {\n        super.onDestroy();\n        cats.removeChangeListeners();\n        if (deleteTask!=null&&!deleteTask.isCancelled()){\n            deleteTask.cancel();\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/async/UpdateCatActivity.java",
    "content": "package org.raphets.demorealm.async;\n\nimport android.support.annotation.Nullable;\nimport android.support.v7.app.AppCompatActivity;\nimport android.os.Bundle;\nimport android.support.v7.widget.Toolbar;\nimport android.text.TextUtils;\nimport android.view.View;\nimport android.widget.EditText;\n\nimport org.raphets.demorealm.R;\nimport org.raphets.demorealm.activity.BaseActivity;\nimport org.raphets.demorealm.bean.Cat;\nimport org.raphets.demorealm.util.ToastUtil;\n\nimport butterknife.BindView;\nimport butterknife.OnClick;\nimport io.realm.Realm;\nimport io.realm.RealmAsyncTask;\n\npublic class UpdateCatActivity extends BaseActivity {\n    @BindView(R.id.toolBar)\n    Toolbar mToolbar;\n    @BindView(R.id.et_name)\n    EditText etName;\n\n    private Realm mRealm;\n    private String mId;\n    private RealmAsyncTask updateTask;\n\n    @Override\n    public int getLayoutId() {\n        return R.layout.activity_update_cat;\n    }\n\n    @Override\n    protected void onCreate(@Nullable Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n\n        initData();\n\n    }\n\n    private void initData() {\n        setToolbar(mToolbar,\"异步更新\");\n        mId=getIntent().getStringExtra(\"id\");\n        mRealm=Realm.getDefaultInstance();\n    }\n\n    @OnClick(R.id.btn_update)\n    void onClick(View view){\n        final String name=etName.getText().toString().trim();\n        if (TextUtils.isEmpty(name)){\n            ToastUtil.showShortToast(UpdateCatActivity.this,\"请输入新的Name\");\n            return;\n        }\n\n     updateTask=   mRealm.executeTransactionAsync(new Realm.Transaction() {\n            @Override\n            public void execute(Realm realm) {\n                Cat cat=realm.where(Cat.class).equalTo(\"id\",mId).findFirst();\n                cat.setName(name);\n            }\n        }, new Realm.Transaction.OnSuccess() {\n            @Override\n            public void onSuccess() {\n                ToastUtil.showShortToast(UpdateCatActivity.this,\"更新成功\");\n                setResult(RESULT_OK);\n                finish();\n            }\n        }, new Realm.Transaction.OnError() {\n            @Override\n            public void onError(Throwable error) {\n                ToastUtil.showShortToast(UpdateCatActivity.this,\"失败成功\");\n\n            }\n        });\n\n    }\n\n\n    @Override\n    protected void onDestroy() {\n        super.onDestroy();\n        if (updateTask!=null&&!updateTask.isCancelled()){\n            updateTask.cancel();\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/bean/Cat.java",
    "content": "package org.raphets.demorealm.bean;\n\nimport io.realm.RealmObject;\nimport io.realm.annotations.PrimaryKey;\n\n/**\n * Created by RaphetS on 2016/10/21.\n */\n\npublic class Cat extends RealmObject {\n    private String name;\n    private int age;\n    @PrimaryKey\n    private String id;\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n\n    public int getAge() {\n        return age;\n    }\n\n    public void setAge(int age) {\n        this.age = age;\n    }\n\n    public String getId() {\n        return id;\n    }\n\n    public void setId(String id) {\n        this.id = id;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/bean/Dog.java",
    "content": "package org.raphets.demorealm.bean;\n\nimport io.realm.RealmObject;\nimport io.realm.annotations.PrimaryKey;\n\n/**\n * Created by matou0289 on 2016/10/20.\n */\n\npublic class Dog extends RealmObject {\n    private String name;\n    private int age;\n    @PrimaryKey\n    private String id;\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n\n    public int getAge() {\n        return age;\n    }\n\n    public void setAge(int age) {\n        this.age = age;\n    }\n\n    public String getId() {\n        return id;\n    }\n\n    public void setId(String id) {\n        this.id = id;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/util/DefaultItemTouchHelpCallback.java",
    "content": "package org.raphets.demorealm.util;\n\nimport android.support.v7.widget.GridLayoutManager;\nimport android.support.v7.widget.LinearLayoutManager;\nimport android.support.v7.widget.RecyclerView;\nimport android.support.v7.widget.helper.ItemTouchHelper;\n\n\npublic class DefaultItemTouchHelpCallback extends ItemTouchHelper.Callback {\n\n    /**\n     * Item操作的回调\n     */\n    private OnItemTouchCallbackListener onItemTouchCallbackListener;\n\n    /**\n     * 是否可以拖拽\n     */\n    private boolean isCanDrag = true;\n    /**\n     * 是否可以被滑动\n     */\n    private boolean isCanSwipe = true;\n\n    public DefaultItemTouchHelpCallback(OnItemTouchCallbackListener onItemTouchCallbackListener) {\n        this.onItemTouchCallbackListener = onItemTouchCallbackListener;\n    }\n\n    /**\n     * 设置Item操作的回调，去更新UI和数据源\n     *\n     * @param onItemTouchCallbackListener\n     */\n    public void setOnItemTouchCallbackListener(OnItemTouchCallbackListener onItemTouchCallbackListener) {\n        this.onItemTouchCallbackListener = onItemTouchCallbackListener;\n    }\n\n    /**\n     * 设置是否可以被拖拽\n     *\n     * @param canDrag 是true，否false\n     */\n    public void setDragEnable(boolean canDrag) {\n        isCanDrag = canDrag;\n    }\n\n    /**\n     * 设置是否可以被滑动\n     *\n     * @param canSwipe 是true，否false\n     */\n    public void setSwipeEnable(boolean canSwipe) {\n        isCanSwipe = canSwipe;\n    }\n\n    /**\n     * 当Item被长按的时候是否可以被拖拽\n     *\n     * @return\n     */\n    @Override\n    public boolean isLongPressDragEnabled() {\n        return isCanDrag;\n    }\n\n    /**\n     * Item是否可以被滑动(H：左右滑动，V：上下滑动)\n     *\n     * @return\n     */\n    @Override\n    public boolean isItemViewSwipeEnabled() {\n        return isCanSwipe;\n    }\n\n    /**\n     * 当用户拖拽或者滑动Item的时候需要我们告诉系统滑动或者拖拽的方向\n     *\n     * @param recyclerView\n     * @param viewHolder\n     * @return\n     */\n    @Override\n    public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {\n        RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();\n        if (layoutManager instanceof GridLayoutManager) {// GridLayoutManager\n            // flag如果值是0，相当于这个功能被关闭\n            int dragFlag = ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT | ItemTouchHelper.UP | ItemTouchHelper.DOWN;\n            int swipeFlag = 0;\n            // create make\n            return makeMovementFlags(dragFlag, swipeFlag);\n        } else if (layoutManager instanceof LinearLayoutManager) {// linearLayoutManager\n            LinearLayoutManager linearLayoutManager = (LinearLayoutManager) layoutManager;\n            int orientation = linearLayoutManager.getOrientation();\n\n            int dragFlag = 0;\n            int swipeFlag = 0;\n\n            // 为了方便理解，相当于分为横着的ListView和竖着的ListView\n            if (orientation == LinearLayoutManager.HORIZONTAL) {// 如果是横向的布局\n                swipeFlag = ItemTouchHelper.UP | ItemTouchHelper.DOWN;\n                dragFlag = ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;\n            } else if (orientation == LinearLayoutManager.VERTICAL) {// 如果是竖向的布局，相当于ListView\n                dragFlag = ItemTouchHelper.UP | ItemTouchHelper.DOWN;\n                swipeFlag = ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;\n            }\n            return makeMovementFlags(dragFlag, swipeFlag);\n        }\n        return 0;\n    }\n\n    /**\n     * 当Item被拖拽的时候被回调\n     *\n     * @param recyclerView     recyclerView\n     * @param srcViewHolder    拖拽的ViewHolder\n     * @param targetViewHolder 目的地的viewHolder\n     * @return\n     */\n    @Override\n    public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder srcViewHolder, RecyclerView.ViewHolder targetViewHolder) {\n        if (onItemTouchCallbackListener != null) {\n            return onItemTouchCallbackListener.onMove(srcViewHolder.getAdapterPosition(), targetViewHolder.getAdapterPosition());\n        }\n        return false;\n    }\n\n    @Override\n    public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {\n        if (onItemTouchCallbackListener != null) {\n            onItemTouchCallbackListener.onSwiped(viewHolder.getAdapterPosition());\n        }\n    }\n\n    public interface OnItemTouchCallbackListener {\n        /**\n         * 当某个Item被滑动删除的时候\n         *\n         * @param adapterPosition item的position\n         */\n        void onSwiped(int adapterPosition);\n\n        /**\n         * 当两个Item位置互换的时候被回调\n         *\n         * @param srcPosition    拖拽的item的position\n         * @param targetPosition 目的地的Item的position\n         * @return 开发者处理了操作应该返回true，开发者没有处理就返回false\n         */\n        boolean onMove(int srcPosition, int targetPosition);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/util/RealmHelper.java",
    "content": "package org.raphets.demorealm.util;\n\nimport android.content.Context;\n\nimport org.raphets.demorealm.bean.Dog;\n\nimport java.util.List;\n\nimport io.realm.Realm;\nimport io.realm.RealmConfiguration;\nimport io.realm.RealmResults;\nimport io.realm.Sort;\n\n/**\n * Created by matou0289 on 2016/10/20.\n */\n\npublic class RealmHelper {\n    public static final String DB_NAME = \"myRealm.realm\";\n    private Realm mRealm;\n\n\n    public RealmHelper(Context context) {\n\n        mRealm = Realm.getDefaultInstance();\n    }\n\n    /**\n     * add （增）\n     */\n    public void addDog(final Dog dog) {\n        mRealm.beginTransaction();\n        mRealm.copyToRealm(dog);\n        mRealm.commitTransaction();\n\n    }\n\n    /**\n     * delete （删）\n     */\n    public void deleteDog(String id) {\n        Dog dog = mRealm.where(Dog.class).equalTo(\"id\", id).findFirst();\n        mRealm.beginTransaction();\n        dog.deleteFromRealm();\n        mRealm.commitTransaction();\n\n    }\n\n    /**\n     * update （改）\n     */\n    public void updateDog(String id, String newName) {\n        Dog dog = mRealm.where(Dog.class).equalTo(\"id\", id).findFirst();\n        mRealm.beginTransaction();\n        dog.setName(newName);\n        mRealm.commitTransaction();\n    }\n\n    /**\n     * query （查询所有）\n     */\n    public List<Dog> queryAllDog() {\n        RealmResults<Dog> dogs = mRealm.where(Dog.class).findAll();\n        /**\n         * 对查询结果，按Id进行排序，只能对查询结果进行排序\n         */\n        //增序排列\n        dogs=dogs.sort(\"id\");\n//        //降序排列\n//        dogs=dogs.sort(\"id\", Sort.DESCENDING);\n        return mRealm.copyFromRealm(dogs);\n    }\n\n    /**\n     * query （根据Id（主键）查）\n     */\n    public Dog queryDogById(String id) {\n        Dog dog = mRealm.where(Dog.class).equalTo(\"id\", id).findFirst();\n\n        return dog;\n    }\n\n\n    /**\n     * query （根据age查）\n     */\n    public List<Dog> queryDobByAge(int age) {\n        RealmResults<Dog> dogs = mRealm.where(Dog.class).equalTo(\"age\", age).findAll();\n\n        return mRealm.copyFromRealm(dogs);\n    }\n\n    public boolean isDogExist(String id){\n        Dog dog=mRealm.where(Dog.class).equalTo(\"id\",id).findFirst();\n        if (dog==null){\n            return false;\n        }else {\n            return  true;\n        }\n    }\n\n    public Realm getRealm(){\n\n        return mRealm;\n    }\n\n    public void close(){\n        if (mRealm!=null){\n            mRealm.close();\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/util/ToastUtil.java",
    "content": "package org.raphets.demorealm.util;\n\nimport android.content.Context;\nimport android.widget.Toast;\n\n/**\n * Created by RaphetS on 2016/10/21.\n */\n\npublic class ToastUtil {\n    private  static Toast mToast;\n\n    public static void showShortToast(Context context,String msg){\n        if (mToast==null){\n            mToast=Toast.makeText(context,msg,Toast.LENGTH_SHORT);\n        }\n        mToast.setText(msg);\n        mToast.show();\n    }\n}\n"
  },
  {
    "path": "app/src/main/res/drawable/like_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@drawable/icon_like\" android:state_selected=\"true\" />\n    <item android:drawable=\"@drawable/icon_unlike\" android:state_selected=\"false\" />\n\n</selector>"
  },
  {
    "path": "app/src/main/res/drawable/stoke_bg.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <stroke android:color=\"@color/colorAccent\"\n        android:width=\"1dp\"/>\n</shape>"
  },
  {
    "path": "app/src/main/res/layout/activity_add.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\">\n\n    <include layout=\"@layout/toolbar\"/>\n    <android.support.v7.widget.RecyclerView\n        android:id=\"@+id/recyclerView\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\" />\n\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/activity_add_delete.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\">\n\n    <include layout=\"@layout/toolbar\"/>\n\n    <android.support.v7.widget.RecyclerView\n        android:id=\"@+id/recyclerView\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"/>\n\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/activity_all_dog.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\">\n\n    <include layout=\"@layout/toolbar\" />\n\n    <android.support.v7.widget.RecyclerView\n        android:id=\"@+id/recyclerView\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\" />\n\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/activity_async.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\">\n\n    <include layout=\"@layout/toolbar\"/>\n    <Button\n        android:textSize=\"20sp\"\n        android:layout_marginTop=\"10dp\"\n        android:id=\"@+id/btn_add_delete\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:background=\"@color/colorAccent\"\n        android:elevation=\"5dp\"\n        android:text=\"异步增、删\"\n        android:textAllCaps=\"false\" />\n    <Button\n        android:textSize=\"20sp\"\n        android:layout_marginTop=\"10dp\"\n        android:id=\"@+id/btn_update_query\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:background=\"@color/colorAccent\"\n        android:elevation=\"5dp\"\n        android:text=\"异步改、查\"\n        android:textAllCaps=\"false\" />\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/activity_async_query.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\">\n\n    <include layout=\"@layout/toolbar\"/>\n\n    <android.support.v7.widget.RecyclerView\n        android:id=\"@+id/recyclerView\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"/>\n\n\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/activity_condition_query.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\">\n\n    <include layout=\"@layout/toolbar\" />\n\n    <LinearLayout\n        android:layout_marginTop=\"10dp\"\n        android:layout_marginLeft=\"20dp\"\n        android:layout_marginRight=\"20dp\"\n        android:background=\"@drawable/stoke_bg\"\n        android:gravity=\"center\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"40dp\">\n        <TextView\n            android:textSize=\"18sp\"\n            android:gravity=\"center\"\n            android:text=\"ID\"\n            android:id=\"@+id/tv_id\"\n            android:layout_weight=\"1\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\" />\n        <View\n            android:background=\"@color/colorAccent\"\n            android:layout_width=\"1dp\"\n            android:layout_height=\"match_parent\"/>\n        <EditText\n            android:paddingLeft=\"20dp\"\n            android:hint=\"请输入ID\"\n            android:background=\"@null\"\n            android:id=\"@+id/et_id\"\n            android:layout_weight=\"3\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"match_parent\" />\n    </LinearLayout>\n    <LinearLayout\n        android:layout_marginTop=\"10dp\"\n        android:layout_marginLeft=\"20dp\"\n        android:layout_marginRight=\"20dp\"\n        android:background=\"@drawable/stoke_bg\"\n        android:gravity=\"center\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"40dp\">\n        <TextView\n            android:textSize=\"18sp\"\n            android:gravity=\"center\"\n            android:text=\"Age\"\n            android:id=\"@+id/tv_age\"\n            android:layout_weight=\"1\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\" />\n        <View\n            android:background=\"@color/colorAccent\"\n            android:layout_width=\"1dp\"\n            android:layout_height=\"match_parent\"/>\n        <EditText\n            android:paddingLeft=\"20dp\"\n            android:hint=\"请输入年龄\"\n            android:background=\"@null\"\n            android:id=\"@+id/et_age\"\n            android:layout_weight=\"3\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"match_parent\" />\n    </LinearLayout>\n    <Button\n        android:id=\"@+id/btn_query_id\"\n        android:elevation=\"10dp\"\n        android:text=\"根据Id查询\"\n        android:layout_marginTop=\"10dp\"\n        android:layout_marginLeft=\"20dp\"\n        android:layout_marginRight=\"20dp\"\n        android:background=\"@color/colorAccent\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"40dp\" />\n    <Button\n        android:textAllCaps=\"false\"\n        android:id=\"@+id/btn_query_age\"\n        android:elevation=\"10dp\"\n        android:text=\"根据Age查询\"\n        android:layout_marginTop=\"10dp\"\n        android:layout_marginLeft=\"20dp\"\n        android:layout_marginRight=\"20dp\"\n        android:background=\"@color/colorAccent\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"40dp\" />\n\n    <android.support.v7.widget.RecyclerView\n        android:id=\"@+id/recyclerView\"\n        android:layout_marginTop=\"10dp\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"/>\n\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/activity_main.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\">\n\n    <include layout=\"@layout/toolbar\" />\n\n    <Button\n        android:textSize=\"20sp\"\n        android:id=\"@+id/btn_add\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:background=\"@color/colorAccent\"\n        android:elevation=\"5dp\"\n        android:text=\"增、删\"\n        android:textAllCaps=\"false\" />\n\n\n    <Button\n        android:textSize=\"20sp\"\n        android:id=\"@+id/btn_query\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"10dp\"\n        android:background=\"@color/colorAccent\"\n        android:elevation=\"5dp\"\n        android:text=\"改、查\"\n        android:textAllCaps=\"false\" />\n\n    <Button\n        android:textSize=\"20sp\"\n        android:id=\"@+id/btn_async\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"10dp\"\n        android:background=\"@color/colorAccent\"\n        android:elevation=\"5dp\"\n        android:text=\"异步操作\"\n        android:textAllCaps=\"false\" />\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/activity_other_query.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n  android:orientation=\"vertical\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <include layout=\"@layout/toolbar\"/>\n\n    <LinearLayout\n        android:padding=\"20dp\"\n        android:orientation=\"horizontal\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\">\n        <TextView\n            android:textSize=\"18sp\"\n            android:text=\"平均年龄：\"\n            android:layout_weight=\"1\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"match_parent\" />\n        <TextView\n            android:id=\"@+id/tv_average_age\"\n            android:textSize=\"18sp\"\n            android:layout_weight=\"2\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"match_parent\" />\n\n    </LinearLayout>\n    <LinearLayout\n        android:padding=\"20dp\"\n        android:orientation=\"horizontal\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\">\n        <TextView\n            android:textSize=\"18sp\"\n            android:text=\"总年龄：\"\n            android:layout_weight=\"1\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"match_parent\" />\n        <TextView\n            android:id=\"@+id/tv_sum_age\"\n            android:textSize=\"18sp\"\n            android:layout_weight=\"2\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"match_parent\" />\n\n    </LinearLayout>\n\n    <LinearLayout\n        android:padding=\"20dp\"\n        android:orientation=\"horizontal\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\">\n        <TextView\n            android:textSize=\"18sp\"\n            android:text=\"最大年龄：\"\n            android:layout_weight=\"1\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"match_parent\" />\n        <TextView\n            android:id=\"@+id/tv_max_id\"\n            android:textSize=\"18sp\"\n            android:layout_weight=\"2\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"match_parent\" />\n\n    </LinearLayout>\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/activity_query.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\">\n\n    <include layout=\"@layout/toolbar\" />\n\n    <Button\n        android:textSize=\"20sp\"\n        android:id=\"@+id/btn_query\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:background=\"@color/colorAccent\"\n        android:elevation=\"5dp\"\n        android:text=\"改、查询全部\"\n        android:textAllCaps=\"false\" />\n\n    <Button\n        android:textSize=\"20sp\"\n        android:layout_marginTop=\"10dp\"\n        android:id=\"@+id/btn_condition_query\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:background=\"@color/colorAccent\"\n        android:elevation=\"5dp\"\n        android:text=\"条件查询\"\n        android:textAllCaps=\"false\" />\n\n    <Button\n        android:textSize=\"20sp\"\n        android:layout_marginTop=\"10dp\"\n        android:id=\"@+id/btn_other_query\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:background=\"@color/colorAccent\"\n        android:elevation=\"5dp\"\n        android:text=\"其他查询\"\n        android:textAllCaps=\"false\" />\n\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/activity_update.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\">\n\n    <include layout=\"@layout/toolbar\"/>\n\n    <EditText\n        android:id=\"@+id/et_name\"\n        android:layout_margin=\"20dp\"\n        android:background=\"@drawable/stoke_bg\"\n        android:hint=\"请输入新的Name\"\n        android:padding=\"10dp\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\" />\n\n    <Button\n        android:id=\"@+id/btn_update\"\n        android:textAllCaps=\"false\"\n        android:text=\"UpdateName\"\n        android:layout_margin=\"20dp\"\n        android:layout_width=\"match_parent\"\n        android:background=\"@color/colorAccent\"\n        android:layout_height=\"wrap_content\" />\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/activity_update_cat.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\">\n\n    <include layout=\"@layout/toolbar\"/>\n    <EditText\n        android:id=\"@+id/et_name\"\n        android:layout_margin=\"20dp\"\n        android:background=\"@drawable/stoke_bg\"\n        android:hint=\"请输入新的Name\"\n        android:padding=\"10dp\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\" />\n\n    <Button\n        android:id=\"@+id/btn_update\"\n        android:textAllCaps=\"false\"\n        android:text=\"UpdateName\"\n        android:layout_margin=\"20dp\"\n        android:layout_width=\"match_parent\"\n        android:background=\"@color/colorAccent\"\n        android:layout_height=\"wrap_content\" />\n\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/item_dog.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.v7.widget.CardView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_margin=\"10dp\"\n    android:elevation=\"5dp\"\n    app:cardCornerRadius=\"5dp\">\n\n    <RelativeLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n\n        android:background=\"@color/colorAccent\"\n        android:padding=\"10dp\">\n\n        <TextView\n            android:id=\"@+id/tv_id\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_centerVertical=\"true\"\n            android:textAllCaps=\"false\" />\n\n        <TextView\n            android:layout_centerVertical=\"true\"\n            android:layout_centerInParent=\"true\"\n            android:id=\"@+id/tv_name\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\" />\n\n        <ImageView\n            android:id=\"@+id/iv_like\"\n            android:layout_width=\"50dp\"\n            android:layout_height=\"50dp\"\n            android:layout_alignParentRight=\"true\"\n            android:layout_centerVertical=\"true\"\n            android:padding=\"10dp\"\n            android:src=\"@drawable/like_selector\" />\n\n    </RelativeLayout>\n\n</android.support.v7.widget.CardView>"
  },
  {
    "path": "app/src/main/res/layout/toolbar.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.v7.widget.Toolbar xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/toolBar\"\n    app:titleTextColor=\"@android:color/white\"\n    android:background=\"@color/colorPrimary\"\n    android:fitsSystemWindows=\"true\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\" />\n"
  },
  {
    "path": "app/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"colorPrimary\">#3F51B5</color>\n    <color name=\"colorPrimaryDark\">#303F9F</color>\n    <color name=\"colorAccent\">@android:color/holo_blue_bright</color>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"activity_horizontal_margin\">16dp</dimen>\n    <dimen name=\"activity_vertical_margin\">16dp</dimen>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">DemoRealm</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <!-- Customize your theme here. -->\n        <item name=\"colorPrimary\">@color/colorPrimary</item>\n        <item name=\"colorPrimaryDark\">@color/colorPrimaryDark</item>\n        <item name=\"colorAccent\">@color/colorAccent</item>\n        //ActionBarDrawerToggle设置颜色\n        <item name=\"colorControlNormal\">@android:color/white</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-w820dp/dimens.xml",
    "content": "<resources>\n    <!-- Example customization of dimensions originally defined in res/values/dimens.xml\n         (such as screen margins) for screens with more than 820dp of available width. This\n         would include 7\" and 10\" devices in landscape (~960dp and ~1280dp respectively). -->\n    <dimen name=\"activity_horizontal_margin\">64dp</dimen>\n</resources>\n"
  },
  {
    "path": "app/src/test/java/org/raphets/demorealm/ExampleUnitTest.java",
    "content": "package org.raphets.demorealm;\n\nimport org.junit.Test;\n\nimport static org.junit.Assert.*;\n\n/**\n * Example local unit test, which will execute on the development machine (host).\n *\n * @see <a href=\"http://d.android.com/tools/testing\">Testing documentation</a>\n */\npublic class ExampleUnitTest {\n    @Test\n    public void addition_isCorrect() throws Exception {\n        assertEquals(4, 2 + 2);\n    }\n}"
  },
  {
    "path": "build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    repositories {\n        jcenter()\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:2.2.1'\n        classpath \"io.realm:realm-gradle-plugin:2.0.2\"\n\n        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nallprojects {\n    repositories {\n        jcenter()\n    }\n}\n\ntask clean(type: Delete) {\n    delete rootProject.buildDir\n}\n"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "content": "#Mon Dec 28 10:00:20 PST 2015\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-2.14.1-all.zip\n"
  },
  {
    "path": "gradle.properties",
    "content": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\norg.gradle.jvmargs=-Xmx1536m\n\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true\n"
  },
  {
    "path": "gradlew",
    "content": "#!/usr/bin/env bash\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS=\"\"\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn ( ) {\n    echo \"$*\"\n}\n\ndie ( ) {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\nesac\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin, switch paths to Windows format before running java\nif $cygwin ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=$((i+1))\n    done\n    case $i in\n        (0) set -- ;;\n        (1) set -- \"$args0\" ;;\n        (2) set -- \"$args0\" \"$args1\" ;;\n        (3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        (4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        (5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        (6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        (7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        (8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        (9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules\nfunction splitJvmOpts() {\n    JVM_OPTS=(\"$@\")\n}\neval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS\nJVM_OPTS[${#JVM_OPTS[*]}]=\"-Dorg.gradle.appname=$APP_BASE_NAME\"\n\nexec \"$JAVACMD\" \"${JVM_OPTS[@]}\" -classpath \"$CLASSPATH\" org.gradle.wrapper.GradleWrapperMain \"$@\"\n"
  },
  {
    "path": "gradlew.bat",
    "content": "@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto init\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto init\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:init\n@rem Get command-line arguments, handling Windowz variants\n\nif not \"%OS%\" == \"Windows_NT\" goto win9xME_args\nif \"%@eval[2+2]\" == \"4\" goto 4NT_args\n\n:win9xME_args\n@rem Slurp the command line arguments.\nset CMD_LINE_ARGS=\nset _SKIP=2\n\n:win9xME_args_slurp\nif \"x%~1\" == \"x\" goto execute\n\nset CMD_LINE_ARGS=%*\ngoto execute\n\n:4NT_args\n@rem Get arguments from the 4NT Shell from JP Software\nset CMD_LINE_ARGS=%$\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "settings.gradle",
    "content": "include ':app'\n"
  }
]