Full Code of RaphetS/DemoRealm for AI

master 9fa27cfdb49b cached
67 files
84.3 KB
22.9k tokens
164 symbols
1 requests
Download .txt
Repository: RaphetS/DemoRealm
Branch: master
Commit: 9fa27cfdb49b
Files: 67
Total size: 84.3 KB

Directory structure:
gitextract__jjpfxqs/

├── .gitignore
├── .idea/
│   ├── compiler.xml
│   ├── copyright/
│   │   └── profiles_settings.xml
│   ├── encodings.xml
│   ├── gradle.xml
│   ├── misc.xml
│   ├── modules.xml
│   ├── runConfigurations.xml
│   └── vcs.xml
├── README.md
├── app/
│   ├── .gitignore
│   ├── build.gradle
│   ├── proguard-rules.pro
│   └── src/
│       ├── androidTest/
│       │   └── java/
│       │       └── org/
│       │           └── raphets/
│       │               └── demorealm/
│       │                   └── ExampleInstrumentedTest.java
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   ├── java/
│       │   │   └── org/
│       │   │       └── raphets/
│       │   │           └── demorealm/
│       │   │               ├── MyApp.java
│       │   │               ├── activity/
│       │   │               │   ├── AllDogActivity.java
│       │   │               │   ├── BaseActivity.java
│       │   │               │   ├── ConditionQueryActivity.java
│       │   │               │   ├── DogListActivity.java
│       │   │               │   ├── MainActivity.java
│       │   │               │   ├── OtherQueryActivity.java
│       │   │               │   ├── QueryActivity.java
│       │   │               │   └── UpdateActivity.java
│       │   │               ├── adapter/
│       │   │               │   ├── AsyncCatAdapter.java
│       │   │               │   ├── BaseAdapter.java
│       │   │               │   ├── BaseViewHolder.java
│       │   │               │   ├── DogAdapter.java
│       │   │               │   ├── LikeCatAdapter.java
│       │   │               │   └── LikeDogAdapter.java
│       │   │               ├── async/
│       │   │               │   ├── AddDeleteActivity.java
│       │   │               │   ├── AsyncActivity.java
│       │   │               │   ├── AsyncQueryActivity.java
│       │   │               │   └── UpdateCatActivity.java
│       │   │               ├── bean/
│       │   │               │   ├── Cat.java
│       │   │               │   └── Dog.java
│       │   │               └── util/
│       │   │                   ├── DefaultItemTouchHelpCallback.java
│       │   │                   ├── RealmHelper.java
│       │   │                   └── ToastUtil.java
│       │   └── res/
│       │       ├── drawable/
│       │       │   ├── like_selector.xml
│       │       │   └── stoke_bg.xml
│       │       ├── layout/
│       │       │   ├── activity_add.xml
│       │       │   ├── activity_add_delete.xml
│       │       │   ├── activity_all_dog.xml
│       │       │   ├── activity_async.xml
│       │       │   ├── activity_async_query.xml
│       │       │   ├── activity_condition_query.xml
│       │       │   ├── activity_main.xml
│       │       │   ├── activity_other_query.xml
│       │       │   ├── activity_query.xml
│       │       │   ├── activity_update.xml
│       │       │   ├── activity_update_cat.xml
│       │       │   ├── item_dog.xml
│       │       │   └── toolbar.xml
│       │       ├── values/
│       │       │   ├── colors.xml
│       │       │   ├── dimens.xml
│       │       │   ├── strings.xml
│       │       │   └── styles.xml
│       │       └── values-w820dp/
│       │           └── dimens.xml
│       └── test/
│           └── java/
│               └── org/
│                   └── raphets/
│                       └── demorealm/
│                           └── ExampleUnitTest.java
├── build.gradle
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
└── settings.gradle

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
*.iml
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures
.externalNativeBuild


================================================
FILE: .idea/compiler.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="CompilerConfiguration">
    <resourceExtensions />
    <wildcardResourcePatterns>
      <entry name="!?*.java" />
      <entry name="!?*.form" />
      <entry name="!?*.class" />
      <entry name="!?*.groovy" />
      <entry name="!?*.scala" />
      <entry name="!?*.flex" />
      <entry name="!?*.kt" />
      <entry name="!?*.clj" />
      <entry name="!?*.aj" />
    </wildcardResourcePatterns>
    <annotationProcessing>
      <profile default="true" name="Default" enabled="false">
        <processorPath useClasspath="true" />
      </profile>
    </annotationProcessing>
  </component>
</project>

================================================
FILE: .idea/copyright/profiles_settings.xml
================================================
<component name="CopyrightManager">
  <settings default="" />
</component>

================================================
FILE: .idea/encodings.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="Encoding">
    <file url="PROJECT" charset="UTF-8" />
  </component>
</project>

================================================
FILE: .idea/gradle.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="GradleSettings">
    <option name="linkedExternalProjectsSettings">
      <GradleProjectSettings>
        <option name="distributionType" value="LOCAL" />
        <option name="externalProjectPath" value="$PROJECT_DIR$" />
        <option name="gradleHome" value="D:\Program Files\Android\Android Studio\gradle\gradle-2.14.1" />
        <option name="modules">
          <set>
            <option value="$PROJECT_DIR$" />
            <option value="$PROJECT_DIR$/app" />
          </set>
        </option>
        <option name="resolveModulePerSourceSet" value="false" />
      </GradleProjectSettings>
    </option>
  </component>
</project>

================================================
FILE: .idea/misc.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="EntryPointsManager">
    <entry_points version="2.0" />
  </component>
  <component name="NullableNotNullManager">
    <option name="myDefaultNullable" value="android.support.annotation.Nullable" />
    <option name="myDefaultNotNull" value="android.support.annotation.NonNull" />
    <option name="myNullables">
      <value>
        <list size="4">
          <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
          <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
          <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" />
          <item index="3" class="java.lang.String" itemvalue="android.support.annotation.Nullable" />
        </list>
      </value>
    </option>
    <option name="myNotNulls">
      <value>
        <list size="4">
          <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
          <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
          <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
          <item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" />
        </list>
      </value>
    </option>
  </component>
  <component name="ProjectLevelVcsManager" settingsEditedManually="false">
    <OptionsSetting value="true" id="Add" />
    <OptionsSetting value="true" id="Remove" />
    <OptionsSetting value="true" id="Checkout" />
    <OptionsSetting value="true" id="Update" />
    <OptionsSetting value="true" id="Status" />
    <OptionsSetting value="true" id="Edit" />
    <ConfirmationsSetting value="0" id="Add" />
    <ConfirmationsSetting value="0" id="Remove" />
  </component>
  <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">
    <output url="file://$PROJECT_DIR$/build/classes" />
  </component>
  <component name="ProjectType">
    <option name="id" value="Android" />
  </component>
</project>

================================================
FILE: .idea/modules.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="ProjectModuleManager">
    <modules>
      <module fileurl="file://$PROJECT_DIR$/DemoRealm.iml" filepath="$PROJECT_DIR$/DemoRealm.iml" />
      <module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
    </modules>
  </component>
</project>

================================================
FILE: .idea/runConfigurations.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="RunConfigurationProducerService">
    <option name="ignoredProducers">
      <set>
        <option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
        <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
        <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
      </set>
    </option>
  </component>
</project>

================================================
FILE: .idea/vcs.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="VcsDirectoryMappings">
    <mapping directory="" vcs="Git" />
  </component>
</project>

================================================
FILE: README.md
================================================
##Demo是以本地收藏为应用场景的,实现了对Realm的增删改查等操作,以及异步的增删改查操作,欢迎Star、Fork
使用详情请看我的简书http://www.jianshu.com/p/28912c2f31db
##DownloadDemo
![image](https://github.com/RaphetS/DemoRealm/blob/master/Screenshot/demoURL.png)


效果图

![image](https://github.com/RaphetS/DemoRealm/blob/master/Screenshot/%E5%A2%9E%E5%88%A0%E6%9F%A5.gif)
![image](https://github.com/RaphetS/DemoRealm/blob/master/Screenshot/%E6%94%B9.gif)

![image](https://github.com/RaphetS/DemoRealm/blob/master/Screenshot/%E5%88%A0.gif)
![image](https://github.com/RaphetS/DemoRealm/blob/master/Screenshot/%E6%9D%A1%E4%BB%B6%E6%9F%A5%E8%AF%A2.gif)


![image](https://github.com/RaphetS/DemoRealm/blob/master/Screenshot/%E5%85%B6%E4%BB%96%E6%9F%A5%E8%AF%A2.gif)
![image](https://github.com/RaphetS/DemoRealm/blob/master/Screenshot/%E5%BC%82%E6%AD%A5%E5%A2%9E%E5%88%A0.gif)

![image](https://github.com/RaphetS/DemoRealm/blob/master/Screenshot/%E5%BC%82%E6%AD%A5%E6%9B%B4%E6%96%B0.gif)
![image](https://github.com/RaphetS/DemoRealm/blob/master/Screenshot/%E5%BC%82%E6%AD%A5%E5%88%A0.gif)


================================================
FILE: app/.gitignore
================================================
/build


================================================
FILE: app/build.gradle
================================================
apply plugin: 'com.android.application'
apply plugin: 'realm-android'
apply plugin: 'android-apt'

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.2"
    defaultConfig {
        applicationId "org.raphets.demorealm"
        minSdkVersion 19
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:24.2.0'
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:recyclerview-v7:24.2.0'
    compile 'com.android.support:cardview-v7:24.2.0'
    compile 'com.jakewharton:butterknife:8.4.0'
    apt 'com.jakewharton:butterknife-compiler:8.4.0'
    compile 'com.android.support:design:24.2.0'
}


================================================
FILE: app/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in D:\android\sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}


================================================
FILE: app/src/androidTest/java/org/raphets/demorealm/ExampleInstrumentedTest.java
================================================
package org.raphets.demorealm;

import android.content.Context;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;

import org.junit.Test;
import org.junit.runner.RunWith;

import static org.junit.Assert.*;

/**
 * Instrumentation test, which will execute on an Android device.
 *
 * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
 */
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
    @Test
    public void useAppContext() throws Exception {
        // Context of the app under test.
        Context appContext = InstrumentationRegistry.getTargetContext();

        assertEquals("org.raphets.demorealm", appContext.getPackageName());
    }
}


================================================
FILE: app/src/main/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="org.raphets.demorealm">

    <application
        android:name=".MyApp"
        android:allowBackup="true"
        android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".activity.MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".activity.DogListActivity" />
        <activity android:name=".activity.QueryActivity" />
        <activity android:name=".activity.AllDogActivity" />
        <activity android:name=".activity.ConditionQueryActivity" />
        <activity android:name=".activity.UpdateActivity" />
        <activity android:name=".activity.OtherQueryActivity" />
        <activity android:name=".async.AsyncActivity" />
        <activity android:name=".async.AddDeleteActivity" />
        <activity android:name=".async.AsyncQueryActivity" />
        <activity android:name=".async.UpdateCatActivity"></activity>
    </application>

</manifest>

================================================
FILE: app/src/main/java/org/raphets/demorealm/MyApp.java
================================================
package org.raphets.demorealm;

import android.app.Application;

import org.raphets.demorealm.util.RealmHelper;

import io.realm.Realm;
import io.realm.RealmConfiguration;

/**
 * Created by matou0289 on 2016/10/21.
 */

public class MyApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Realm.init(this);
        RealmConfiguration configuration=new RealmConfiguration.Builder()
                .name(RealmHelper.DB_NAME)
                .deleteRealmIfMigrationNeeded()
                .build();
        Realm.setDefaultConfiguration(configuration);
    }
}


================================================
FILE: app/src/main/java/org/raphets/demorealm/activity/AllDogActivity.java
================================================
package org.raphets.demorealm.activity;

import android.content.Intent;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.support.v7.widget.helper.ItemTouchHelper;
import android.util.Log;
import android.view.View;

import org.raphets.demorealm.R;
import org.raphets.demorealm.adapter.BaseAdapter;
import org.raphets.demorealm.adapter.LikeDogAdapter;
import org.raphets.demorealm.bean.Dog;
import org.raphets.demorealm.util.DefaultItemTouchHelpCallback;
import org.raphets.demorealm.util.RealmHelper;

import java.util.ArrayList;
import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;

/**
 *  查询所有
 */
public class AllDogActivity extends BaseActivity {
    @BindView(R.id.toolBar)
    Toolbar mToolbar;
    @BindView(R.id.recyclerView)
    RecyclerView mRecyclerView;

    private List<Dog> mDogs = new ArrayList<>();
    private LikeDogAdapter mAdapter;
    private RealmHelper mRealmHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setToolbar(mToolbar, "查询所有");

        initData();

        addListener();
    }

    private void initData() {
        mRealmHelper = new RealmHelper(this);

        mDogs = mRealmHelper.queryAllDog();

        LinearLayoutManager manager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(manager);
        mRecyclerView.setItemAnimator(new DefaultItemAnimator());

        mAdapter = new LikeDogAdapter(this, mDogs, R.layout.item_dog);
        mRecyclerView.setAdapter(mAdapter);

        setSwipeDelete();

        Snackbar.make(mRecyclerView,"滑动删除item、点击Item进入修改界面",Snackbar.LENGTH_LONG).show();

    }

    private void setSwipeDelete() {
        DefaultItemTouchHelpCallback mCallback = new DefaultItemTouchHelpCallback(new DefaultItemTouchHelpCallback.OnItemTouchCallbackListener() {
            @Override
            public void onSwiped(int adapterPosition) {
                //删除数据库数据
                mRealmHelper.deleteDog(mDogs.get(adapterPosition).getId());
                //滑动删除
                mDogs.remove(adapterPosition);
                mAdapter.notifyItemRemoved(adapterPosition);

            }

            @Override
            public boolean onMove(int srcPosition, int targetPosition) {

                return false;
            }
        });
        mCallback.setDragEnable(false);
        mCallback.setSwipeEnable(true);
        ItemTouchHelper itemTouchHelper = new ItemTouchHelper(mCallback);
        itemTouchHelper.attachToRecyclerView(mRecyclerView);
    }

    private void addListener() {
        mAdapter.setOnItemClickListener(new BaseAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
                Intent intent=new Intent(AllDogActivity.this,UpdateActivity.class);
                intent.putExtra("id",mDogs.get(position).getId());
                startActivityForResult(intent,100);
            }
        });
    }


    @Override
    public int getLayoutId() {
        return R.layout.activity_all_dog;
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (resultCode==RESULT_OK&&requestCode==100){
            mDogs.clear();
            List<Dog> dogs=mRealmHelper.queryAllDog();
            mDogs.addAll(dogs);
            mAdapter.notifyDataSetChanged();

        }
    }
}


================================================
FILE: app/src/main/java/org/raphets/demorealm/activity/BaseActivity.java
================================================
package org.raphets.demorealm.activity;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;

import butterknife.ButterKnife;

/**
 * Created by matou0289 on 2016/10/20.
 */

public abstract class BaseActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(getLayoutId());

        ButterKnife.bind(this);
    }

    public abstract int getLayoutId();

    protected void setToolbar(Toolbar toolbar,String title){
        toolbar.setTitle(title);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(true);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
    }
}


================================================
FILE: app/src/main/java/org/raphets/demorealm/activity/ConditionQueryActivity.java
================================================
package org.raphets.demorealm.activity;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import org.raphets.demorealm.R;
import org.raphets.demorealm.adapter.LikeDogAdapter;
import org.raphets.demorealm.bean.Dog;
import org.raphets.demorealm.util.RealmHelper;

import java.util.ArrayList;
import java.util.List;

import butterknife.BindView;
import butterknife.OnClick;


/**
 * 条件查询
 */
public class ConditionQueryActivity extends BaseActivity {
    @BindView(R.id.et_id)
    EditText etId;
    @BindView(R.id.et_age)
    EditText etAge;
    @BindView(R.id.recyclerView)
    RecyclerView mRecyclerView;
    @BindView(R.id.toolBar)
    Toolbar mToolbar;

    private RealmHelper mRealmHelper;
    private List<Dog> mDogs = new ArrayList<>();
    private LikeDogAdapter mAdapter;

    @Override
    public int getLayoutId() {
        return R.layout.activity_condition_query;
    }

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setToolbar(mToolbar, "条件查询");
        initData();
    }


    @OnClick({R.id.btn_query_id, R.id.btn_query_age})
    void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn_query_id:
                queryById();
                break;
            case R.id.btn_query_age:
                queryByAge();
                break;
            default:
                break;
        }

    }

    private void initData() {
        mRealmHelper = new RealmHelper(this);
        mAdapter = new LikeDogAdapter(this, mDogs, R.layout.item_dog);

        LinearLayoutManager manager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(manager);
        mRecyclerView.setItemAnimator(new DefaultItemAnimator());
        mRecyclerView.setAdapter(mAdapter);
    }

    private void queryById() {
        String id = etId.getText().toString().trim();
        if (TextUtils.isEmpty(id)) {
            Toast.makeText(ConditionQueryActivity.this, "请输入Id", Toast.LENGTH_SHORT).show();
            return;
        }

        mDogs.clear();
        Dog dog = mRealmHelper.queryDogById(id);
        if (dog != null) {
            mDogs.add(dog);

        } else {
            Toast.makeText(ConditionQueryActivity.this, "查询结果为空", Toast.LENGTH_SHORT).show();
        }
        mAdapter.notifyDataSetChanged();

    }

    private void queryByAge() {
        String age = etAge.getText().toString().trim();
        if (TextUtils.isEmpty(age)) {
            Toast.makeText(ConditionQueryActivity.this, "请输入age", Toast.LENGTH_SHORT).show();
            return;
        }

        mDogs.clear();
        List<Dog> dogs = mRealmHelper.queryDobByAge(Integer.parseInt(age));
        if (dogs!=null) {
            mDogs.addAll(dogs);

        }else {
            Toast.makeText(ConditionQueryActivity.this, "查询结果为空", Toast.LENGTH_SHORT).show();

        }
        mAdapter.notifyDataSetChanged();
    }

}


================================================
FILE: app/src/main/java/org/raphets/demorealm/activity/DogListActivity.java
================================================
package org.raphets.demorealm.activity;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;

import org.raphets.demorealm.R;
import org.raphets.demorealm.adapter.DogAdapter;
import org.raphets.demorealm.bean.Dog;

import java.util.ArrayList;
import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;

public class DogListActivity extends BaseActivity {
    @BindView(R.id.toolBar)
    Toolbar mToolbar;
    @BindView(R.id.recyclerView)
    RecyclerView mRecyclerView;


    private List<Dog> mDogs = new ArrayList<>();
    private DogAdapter mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setToolbar(mToolbar, "查询");

        initData();

        initRecyclerView();
    }

    @Override
    public int getLayoutId() {
        return R.layout.activity_add;
    }


    private void initRecyclerView() {
        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(layoutManager);
        mAdapter = new DogAdapter(this, mDogs, R.layout.item_dog);
        mRecyclerView.setAdapter(mAdapter);
    }


    private void initData() {
        Dog dog1 = new Dog();
        dog1.setName("John");
        dog1.setAge(1);
        dog1.setId("001");

        Dog dog2 = new Dog();
        dog2.setName("Kate");
        dog2.setAge(2);
        dog2.setId("002");

        Dog dog3 = new Dog();
        dog3.setName("Amy");
        dog3.setAge(2);
        dog3.setId("003");

        Dog dog4 = new Dog();
        dog4.setName("Kim");
        dog4.setAge(3);
        dog4.setId("004");

        Dog dog5 = new Dog();
        dog5.setName("Mary");
        dog5.setAge(1);
        dog5.setId("005");


        Dog dog6 = new Dog();
        dog6.setName("Michael");
        dog6.setAge(2);
        dog6.setId("006");

        Dog dog7 = new Dog();
        dog7.setName("James");
        dog7.setAge(3);
        dog7.setId("007");

        Dog dog8 = new Dog();
        dog8.setName("Paul");
        dog8.setAge(1);
        dog8.setId("008");

        Dog dog9 = new Dog();
        dog9.setName("Lily");
        dog9.setAge(1);
        dog9.setId("009");

        mDogs.add(dog1);
        mDogs.add(dog2);
        mDogs.add(dog3);
        mDogs.add(dog4);
        mDogs.add(dog5);
        mDogs.add(dog6);
        mDogs.add(dog7);
        mDogs.add(dog8);
        mDogs.add(dog9);
    }
}


================================================
FILE: app/src/main/java/org/raphets/demorealm/activity/MainActivity.java
================================================
package org.raphets.demorealm.activity;

import android.content.Intent;
import android.support.annotation.Nullable;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.View;
import org.raphets.demorealm.R;
import org.raphets.demorealm.async.AsyncActivity;

import butterknife.BindView;
import butterknife.OnClick;
import io.realm.Realm;

/**
 * 主界面
 */
public class MainActivity extends BaseActivity {
    @BindView(R.id.toolBar)
    Toolbar mToolbar;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mToolbar.setTitle("DemoRealm");
        setSupportActionBar(mToolbar);

    }

    @Override
    public int getLayoutId() {
        return R.layout.activity_main;
    }



    @OnClick({R.id.btn_add,  R.id.btn_query,R.id.btn_async})
    void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn_add:
                startActivity(new Intent(MainActivity.this,DogListActivity.class));
                break;
            case R.id.btn_query:
                startActivity(new Intent(MainActivity.this,QueryActivity.class));
                break;
            case R.id.btn_async:
                startActivity(new Intent(MainActivity.this,AsyncActivity.class));

                break;
            default:
                break;
        }
    }
}


================================================
FILE: app/src/main/java/org/raphets/demorealm/activity/OtherQueryActivity.java
================================================
package org.raphets.demorealm.activity;

import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.widget.TextView;

import org.raphets.demorealm.R;
import org.raphets.demorealm.bean.Dog;
import org.raphets.demorealm.util.RealmHelper;

import butterknife.BindView;
import io.realm.Realm;
import io.realm.RealmResults;

/**
 * 其他查询
 */
public class OtherQueryActivity extends BaseActivity {
    @BindView(R.id.toolBar)
    Toolbar mToolbar;

    @BindView(R.id.tv_average_age)
    TextView tvAverage;//平均年龄
    @BindView(R.id.tv_sum_age)
    TextView tvSumAge;//总年龄
    @BindView(R.id.tv_max_id)
    TextView tvMaxId;

    private Realm mRealm;

    @Override
    public int getLayoutId() {
        return R.layout.activity_other_query;
    }

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setToolbar(mToolbar,"其他查询");

        mRealm=Realm.getDefaultInstance();

        getAverageAge();

        getSumAge();

        getMaxId();
    }

    /**
     *  查询平均年龄
     */
    private void getAverageAge() {
         double avgAge=  mRealm.where(Dog.class).findAll().average("age");
        tvAverage.setText(avgAge+"岁");
    }

    /**
     *  查询总年龄
     */
    private void getSumAge() {
      Number sum=  mRealm.where(Dog.class).findAll().sum("age");
        int sumAge=sum.intValue();
        tvSumAge.setText(sumAge+"岁");
    }

    /**
     *  查询最大年龄
     */
    private void getMaxId(){
      Number max=  mRealm.where(Dog.class).findAll().max("age");
        int maxAge=max.intValue();
        tvMaxId.setText(maxAge+"岁");
    }
}


================================================
FILE: app/src/main/java/org/raphets/demorealm/activity/QueryActivity.java
================================================
package org.raphets.demorealm.activity;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.View;

import org.raphets.demorealm.R;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

/**
 *  查、改
 */
public class QueryActivity extends BaseActivity {
    @BindView(R.id.toolBar)
    Toolbar mToolbar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setToolbar(mToolbar,"改、查");
    }

    @Override
    public int getLayoutId() {
        return R.layout.activity_query;
    }

    @OnClick({R.id.btn_query, R.id.btn_condition_query,R.id.btn_other_query})
    void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn_query:
                startActivity(new Intent(QueryActivity.this,AllDogActivity.class));
                break;
            case R.id.btn_condition_query:
                startActivity(new Intent(QueryActivity.this,ConditionQueryActivity.class));
                break;
            case R.id.btn_other_query:
                startActivity(new Intent(QueryActivity.this,OtherQueryActivity.class));
                break;
            default:
                break;

        }

    }
}


================================================
FILE: app/src/main/java/org/raphets/demorealm/activity/UpdateActivity.java
================================================
package org.raphets.demorealm.activity;

import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import org.raphets.demorealm.R;
import org.raphets.demorealm.util.RealmHelper;

import butterknife.BindView;
import butterknife.OnClick;

public class UpdateActivity extends BaseActivity {
    @BindView(R.id.toolBar)
    Toolbar mToolbar;
    @BindView(R.id.et_name)
    EditText etName;

    private RealmHelper mRealmHelper;
    private String mId;

    @Override
    public int getLayoutId() {
        return R.layout.activity_update;
    }

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setToolbar(mToolbar, "改");

        initData();
    }

    private void initData() {
        mRealmHelper=new RealmHelper(this);
        mId=getIntent().getStringExtra("id");
    }

    @OnClick(R.id.btn_update)
    void onClick(View v) {
        String name=etName.getText().toString().trim();
        if (TextUtils.isEmpty(name)){
            Toast.makeText(UpdateActivity.this,"请输入名称",Toast.LENGTH_SHORT).show();
            return;
        }

        mRealmHelper.updateDog(mId,name);

        setResult(RESULT_OK);
        finish();
    }
}


================================================
FILE: app/src/main/java/org/raphets/demorealm/adapter/AsyncCatAdapter.java
================================================
package org.raphets.demorealm.adapter;

import android.content.Context;
import android.os.AsyncTask;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

import org.raphets.demorealm.R;
import org.raphets.demorealm.bean.Cat;
import org.raphets.demorealm.bean.Dog;
import org.raphets.demorealm.util.ToastUtil;

import java.util.List;

import io.realm.Realm;
import io.realm.RealmAsyncTask;
import io.realm.RealmChangeListener;
import io.realm.RealmModel;

/**
 * Created by RaphetS on 2016/10/21.
 */

public class AsyncCatAdapter extends BaseAdapter<Cat> {
    private Realm mRealm;
    private Context mContext;
    private RealmAsyncTask addTask;
    private RealmAsyncTask deleteTask;

    public AsyncCatAdapter(Context context, List<Cat> mDatas, int mLayoutId) {
        super(context, mDatas, mLayoutId);
        mContext=context;
        mRealm=Realm.getDefaultInstance();
    }

    @Override
    protected void convert(Context mContext, BaseViewHolder holder, final Cat cat) {
        holder.setText(R.id.tv_id,cat.getId())
                .setText(R.id.tv_name,cat.getName());
        final ImageView imageView=holder.getView(R.id.iv_like);
        if (isLiked(cat.getId())){
            imageView.setSelected(true);
        }else {
            imageView.setSelected(false);
        }

        holder.setOnClickListener(R.id.iv_like, new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (imageView.isSelected()){
                    deleteCat(cat.getId(),imageView);
                }else {
                    addCat(cat,imageView);
                }

            }
        });

    }


    private boolean isLiked( String id){
      Cat cat=  mRealm.where(Cat.class).equalTo("id",id).findFirst();
        if (cat==null){
            return false;
        }else {
            return  true;
        }
    }

    private void addCat(final Cat cat, final ImageView imageView) {
        addTask=  mRealm.executeTransactionAsync(new Realm.Transaction() {
            @Override
            public void execute(Realm realm) {
                realm.copyToRealm(cat);
            }
        }, new Realm.Transaction.OnSuccess() {
            @Override
            public void onSuccess() {
                ToastUtil.showShortToast(mContext,"收藏成功");
                imageView.setSelected(true);
            }
        }, new Realm.Transaction.OnError() {
            @Override
            public void onError(Throwable error) {
                ToastUtil.showShortToast(mContext,"收藏失败");

            }
        });

    }

    private void deleteCat(final String id, final ImageView imageView){
     deleteTask=   mRealm.executeTransactionAsync(new Realm.Transaction() {
            @Override
            public void execute(Realm realm) {
                Cat cat=realm.where(Cat.class).equalTo("id",id).findFirst();
                cat.deleteFromRealm();

            }
        }, new Realm.Transaction.OnSuccess() {
            @Override
            public void onSuccess() {
                ToastUtil.showShortToast(mContext,"取消收藏成功");
                imageView.setSelected(false);
            }
        }, new Realm.Transaction.OnError() {
            @Override
            public void onError(Throwable error) {
                ToastUtil.showShortToast(mContext,"取消收藏失败");

            }
        });

    }

    public void CancelTask(){
        if (addTask!=null&&!addTask.isCancelled()){
            addTask.cancel();
        }
        if (deleteTask!=null&&!deleteTask.isCancelled()){
            deleteTask.cancel();
        }
    }

}


================================================
FILE: app/src/main/java/org/raphets/demorealm/adapter/BaseAdapter.java
================================================
package org.raphets.demorealm.adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;


import java.util.List;

/**
 * Created by RaphetS on 2016/9/28.
 * 普通的万能Adapter
 * 支持onItemClick
 * 支持onLongItemClick
 */
public abstract class BaseAdapter<T> extends RecyclerView.Adapter<BaseViewHolder> {
    private Context mContext;
    private List<T> mDatas;
    private int mLayoutId;
    private OnItemClickListener mItemClickListener;
    private onLongItemClickListener mLongItemClickListener;

    public BaseAdapter(Context mContext, List<T> mDatas, int mLayoutId) {
        this.mContext = mContext;
        this.mDatas = mDatas;
        this.mLayoutId = mLayoutId;
    }

    public void updateData(List<T> data) {
        mDatas.clear();
        mDatas.addAll(data);
        notifyDataSetChanged();
    }

    public void addAll(List<T> data) {
        mDatas.addAll(data);
        notifyDataSetChanged();
    }


    @Override
    public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(mContext).inflate(mLayoutId, parent, false);
        BaseViewHolder holder = new BaseViewHolder(view);
        return holder;
    }

    @Override
    public int getItemCount() {
        return mDatas.size();
    }


    @Override
    public void onBindViewHolder(BaseViewHolder holder, final int position) {
        convert(mContext, holder, mDatas.get(position));
        if (mItemClickListener != null) {
            holder.mItemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    mItemClickListener.onItemClick(v, position);
                }
            });
        }
        if (mLongItemClickListener != null) {
            holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    mLongItemClickListener.onLongItemClick(v, position);
                    return true;
                }
            });
        }
    }

    protected abstract void convert(Context mContext, BaseViewHolder holder, T t);


    public    interface OnItemClickListener {
        void onItemClick(View view, int position);
    }

    public    interface onLongItemClickListener {
        void onLongItemClick(View view, int postion);
    }

    public void setOnItemClickListener(OnItemClickListener listener) {
        this.mItemClickListener = listener;
    }

    public void setonLongItemClickListener(onLongItemClickListener listener) {
        this.mLongItemClickListener = listener;
    }
}

================================================
FILE: app/src/main/java/org/raphets/demorealm/adapter/BaseViewHolder.java
================================================
package org.raphets.demorealm.adapter;

import android.annotation.SuppressLint;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.support.v7.widget.RecyclerView;
import android.text.SpannableStringBuilder;
import android.util.SparseArray;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.widget.Checkable;
import android.widget.ImageView;
import android.widget.TextView;

public class BaseViewHolder extends RecyclerView.ViewHolder {
    SparseArray<View> mViews;
    View mItemView;

    public BaseViewHolder(View itemView) {
        super(itemView);
        mItemView = itemView;
        mViews = new SparseArray<>();
    }


    public <T extends View> T getView(int viewId) {
        View view = mViews.get(viewId);
        if (view == null) {
            view = mItemView.findViewById(viewId);
            mViews.put(viewId, view);
        }
        return (T) view;
    }

    public BaseViewHolder setText(int viewId, int resId) {
        TextView textView = getView(viewId);
        textView.setText(resId);
        return this;
    }


    public BaseViewHolder setText(int viewId, String text) {
        TextView textView = getView(viewId);
        textView.setText(text);
        return this;
    }

    public BaseViewHolder setText(int viewId, SpannableStringBuilder text) {
        TextView textView = getView(viewId);
        textView.setText(text);
        return this;
    }

    public BaseViewHolder setImageResource(int viewId, int resId) {
        ImageView view = getView(viewId);
        view.setImageResource(resId);
        return this;
    }

    public BaseViewHolder setImageBitmap(int viewId, Bitmap bitmap) {
        ImageView view = getView(viewId);
        view.setImageBitmap(bitmap);
        return this;
    }

    public BaseViewHolder setImageDrawable(int viewId, Drawable drawable) {
        ImageView view = getView(viewId);
        view.setImageDrawable(drawable);
        return this;
    }

    public BaseViewHolder setBackgroundColor(int viewId, int color) {
        View view = getView(viewId);
        view.setBackgroundColor(color);
        return this;
    }

    public BaseViewHolder setBackgroundResource(int viewId, int backgroundRes) {
        View view = getView(viewId);
        view.setBackgroundResource(backgroundRes);
        return this;
    }

    public BaseViewHolder setTextColor(int viewId, int textColor) {
        TextView view = getView(viewId);
        view.setTextColor(textColor);
        return this;
    }


    @SuppressLint("NewApi")
    public BaseViewHolder setAlpha(int viewId, float value) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            getView(viewId).setAlpha(value);
        } else {
            // Pre-honeycomb hack to set Alpha value
            AlphaAnimation alpha = new AlphaAnimation(value, value);
            alpha.setDuration(0);
            alpha.setFillAfter(true);
            getView(viewId).startAnimation(alpha);
        }
        return this;
    }

    public BaseViewHolder setVisible(int viewId, int visible) {
        View view = getView(viewId);
        view.setVisibility(visible);
        return this;
    }


    public BaseViewHolder setTag(int viewId, Object tag) {
        View view = getView(viewId);
        view.setTag(tag);
        return this;
    }

    public BaseViewHolder setTag(int viewId, int key, Object tag) {
        View view = getView(viewId);
        view.setTag(key, tag);
        return this;
    }

    public BaseViewHolder setChecked(int viewId, boolean checked) {
        Checkable view = (Checkable) getView(viewId);
        view.setChecked(checked);
        return this;
    }

    /**
     * 关于事件监听
     */
    public BaseViewHolder setOnClickListener(int viewId, View.OnClickListener listener) {

        View view = getView(viewId);
        view.setOnClickListener(listener);
        return this;
    }

    public BaseViewHolder setOnTouchListener(int viewId, View.OnTouchListener listener) {
        View view = getView(viewId);
        view.setOnTouchListener(listener);
        return this;
    }

    public BaseViewHolder setOnLongClickListener(int viewId, View.OnLongClickListener listener) {
        View view = getView(viewId);
        view.setOnLongClickListener(listener);
        return this;
    }
}

================================================
FILE: app/src/main/java/org/raphets/demorealm/adapter/DogAdapter.java
================================================
package org.raphets.demorealm.adapter;

import android.content.Context;
import android.view.View;
import android.widget.ImageView;

import org.raphets.demorealm.R;
import org.raphets.demorealm.bean.Dog;
import org.raphets.demorealm.util.RealmHelper;

import java.util.List;

import io.realm.Realm;

/**
 * Created by matou0289 on 2016/10/20.
 */

public class DogAdapter extends BaseAdapter<Dog> {

    private RealmHelper mRealmHleper;

    public DogAdapter(Context mContext, List<Dog> mDatas, int mLayoutId) {
        super(mContext, mDatas, mLayoutId);
        mRealmHleper = new RealmHelper(mContext);
    }

    @Override
    protected void convert(Context mContext, BaseViewHolder holder, final Dog dog) {
        holder.setText(R.id.tv_name, dog.getName())
                .setText(R.id.tv_id, dog.getId());

        final ImageView iv = holder.getView(R.id.iv_like);

        if (mRealmHleper.isDogExist(dog.getId())) {
            iv.setSelected(true);
        } else {
            iv.setSelected(false);
        }


        iv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (iv.isSelected()) {
                    iv.setSelected(false);
                    mRealmHleper.deleteDog(dog.getId());

                } else {
                    iv.setSelected(true);
                    mRealmHleper.addDog(dog);
                }
            }
        });


    }

}


================================================
FILE: app/src/main/java/org/raphets/demorealm/adapter/LikeCatAdapter.java
================================================
package org.raphets.demorealm.adapter;

import android.content.Context;
import android.view.View;

import org.raphets.demorealm.R;
import org.raphets.demorealm.bean.Cat;

import java.util.List;

/**
 * Created by RaphetS on 2016/10/21.
 */

public class LikeCatAdapter extends BaseAdapter<Cat> {

    public LikeCatAdapter(Context mContext, List<Cat> mDatas, int mLayoutId) {
        super(mContext, mDatas, mLayoutId);
    }

    @Override
    protected void convert(Context mContext, BaseViewHolder holder, Cat cat) {
        holder.setText(R.id.tv_name, cat.getName())
                .setText(R.id.tv_id,cat.getId())
                .setVisible(R.id.iv_like, View.INVISIBLE);
    }
}


================================================
FILE: app/src/main/java/org/raphets/demorealm/adapter/LikeDogAdapter.java
================================================
package org.raphets.demorealm.adapter;

import android.content.Context;
import android.view.View;
import android.widget.ImageView;

import org.raphets.demorealm.R;
import org.raphets.demorealm.bean.Dog;

import java.util.List;

/**
 * Created by matou0289 on 2016/10/20.
 */

public class LikeDogAdapter extends BaseAdapter<Dog> {

    public LikeDogAdapter(Context mContext, List<Dog> mDatas, int mLayoutId) {
        super(mContext, mDatas, mLayoutId);
    }

    @Override
    protected void convert(Context mContext, BaseViewHolder holder, Dog dog) {
        holder.setText(R.id.tv_name, dog.getName())
                .setText(R.id.tv_id,dog.getId())
                .setVisible(R.id.iv_like, View.INVISIBLE);

    }
}


================================================
FILE: app/src/main/java/org/raphets/demorealm/async/AddDeleteActivity.java
================================================
package org.raphets.demorealm.async;

import android.support.annotation.Nullable;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;

import org.raphets.demorealm.R;
import org.raphets.demorealm.activity.BaseActivity;
import org.raphets.demorealm.adapter.AsyncCatAdapter;
import org.raphets.demorealm.bean.Cat;

import java.util.ArrayList;
import java.util.List;

import butterknife.BindView;

public class AddDeleteActivity extends BaseActivity {
    @BindView(R.id.toolBar)
    Toolbar mToolbar;
    @BindView(R.id.recyclerView)
    RecyclerView mRecyclerView;

    private List<Cat> mCats=new ArrayList<>();
    private String[] letters=new String[]{"A","B","C","D","E","F","G","H","I","J","K","M","N","U","X","Y","Z"};
    private String[] letters1=new String[]{"a","c","u","p","q","y"};
    private AsyncCatAdapter mAdapter;

    @Override
    public int getLayoutId() {
        return R.layout.activity_add_delete;
    }

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setToolbar(mToolbar,"异步增、删");
        initData();
        setRecyclerView();
    }

    private void setRecyclerView() {
        LinearLayoutManager manager=new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(manager);
        mAdapter=new AsyncCatAdapter(this,mCats,R.layout.item_dog);
        mRecyclerView.setAdapter(mAdapter);
    }

    private void initData() {
        for (int i=0;i<15;i++){
            Cat cat=new Cat();
            String name=letters[i]+letters1[i%5]+letters1[i%3];
            cat.setName(name);
            cat.setAge(i%4);
            cat.setId("10"+i);
            mCats.add(cat);
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mAdapter.CancelTask();
    }
}


================================================
FILE: app/src/main/java/org/raphets/demorealm/async/AsyncActivity.java
================================================
package org.raphets.demorealm.async;

import android.content.Intent;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.View;

import org.raphets.demorealm.R;
import org.raphets.demorealm.activity.BaseActivity;

import butterknife.BindView;
import butterknife.OnClick;

public class AsyncActivity extends BaseActivity {
    @BindView(R.id.toolBar)
    Toolbar mToolbar;

    @Override
    public int getLayoutId() {
        return R.layout.activity_async;
    }

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setToolbar(mToolbar,"异步操作");
    }

    @OnClick({R.id.btn_add_delete,R.id.btn_update_query})
    void onClick(View view){
        switch (view.getId()){
            case R.id.btn_add_delete:
                startActivity(new Intent(AsyncActivity.this,AddDeleteActivity.class));
                break;
            case R.id.btn_update_query:
                startActivity(new Intent(AsyncActivity.this,AsyncQueryActivity.class));

                break;
            default:
                break;

        }

    }
}


================================================
FILE: app/src/main/java/org/raphets/demorealm/async/AsyncQueryActivity.java
================================================
package org.raphets.demorealm.async;

import android.content.Intent;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.support.v7.widget.helper.ItemTouchHelper;
import android.util.Log;
import android.view.View;

import org.raphets.demorealm.R;
import org.raphets.demorealm.activity.BaseActivity;
import org.raphets.demorealm.adapter.BaseAdapter;
import org.raphets.demorealm.adapter.LikeCatAdapter;
import org.raphets.demorealm.bean.Cat;
import org.raphets.demorealm.util.DefaultItemTouchHelpCallback;
import org.raphets.demorealm.util.ToastUtil;

import java.util.ArrayList;
import java.util.List;

import butterknife.BindView;
import io.realm.Realm;
import io.realm.RealmAsyncTask;
import io.realm.RealmChangeListener;
import io.realm.RealmResults;

public class AsyncQueryActivity extends BaseActivity {
    @BindView(R.id.toolBar)
    Toolbar mToolbar;
    @BindView(R.id.recyclerView)
    RecyclerView mRecyclerView;

    private Realm mRealm;
    private List<Cat> mCats=new ArrayList<>();
    private LikeCatAdapter mAdapter;
    private RealmResults<Cat> cats;
    private RealmAsyncTask deleteTask;

    @Override
    public int getLayoutId() {
        return R.layout.activity_async_query;
    }

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setToolbar(mToolbar,"异步查、改");
        mRealm=Realm.getDefaultInstance();

        initRecyclerView();

        getData();

        addListener();
    }

    private void initRecyclerView() {
        LinearLayoutManager manager=new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(manager);
        mRecyclerView.setItemAnimator(new DefaultItemAnimator());
        mAdapter=new LikeCatAdapter(this,mCats,R.layout.item_dog);
        mRecyclerView.setAdapter(mAdapter);
        setSwipeDelete();
    }


    private void getData() {
        cats=mRealm.where(Cat.class).findAllAsync();
        cats.addChangeListener(new RealmChangeListener<RealmResults<Cat>>() {
            @Override
            public void onChange(RealmResults<Cat> element) {
                Log.i("TAG","111111111");
               element= element.sort("id");
                List<Cat> datas=mRealm.copyFromRealm(element);
                mCats.clear();
               mCats.addAll(datas);
                mAdapter.notifyDataSetChanged();
            }
        });
    }

    private void addListener() {
        mAdapter.setOnItemClickListener(new BaseAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
                Intent intent=new Intent(AsyncQueryActivity.this,UpdateCatActivity.class);
                intent.putExtra("id",mCats.get(position).getId());
                startActivityForResult(intent,100);
            }
        });
    }



    private void setSwipeDelete() {
        DefaultItemTouchHelpCallback mCallback = new DefaultItemTouchHelpCallback(new DefaultItemTouchHelpCallback.OnItemTouchCallbackListener() {
            @Override
            public void onSwiped(int adapterPosition) {
                deleteCat(mCats.get(adapterPosition).getId());
                mCats.remove(adapterPosition);
                mAdapter.notifyItemRemoved(adapterPosition);
            }

            @Override
            public boolean onMove(int srcPosition, int targetPosition) {

                return false;
            }
        });
        mCallback.setDragEnable(false);
        mCallback.setSwipeEnable(true);
        ItemTouchHelper itemTouchHelper = new ItemTouchHelper(mCallback);
        itemTouchHelper.attachToRecyclerView(mRecyclerView);
    }

    private void deleteCat(final String id) {

      deleteTask=  mRealm.executeTransactionAsync(new Realm.Transaction() {

            @Override
            public void execute(Realm realm) {
                Cat cat=realm.where(Cat.class).equalTo("id",id).findFirst();

                if (cat!=null){
                   cat.deleteFromRealm();
               }

            }
        }, new Realm.Transaction.OnSuccess() {
            @Override
            public void onSuccess() {
                ToastUtil.showShortToast(AsyncQueryActivity.this,"删除成功");
            }
        }, new Realm.Transaction.OnError() {
            @Override
            public void onError(Throwable error) {
                ToastUtil.showShortToast(AsyncQueryActivity.this,"删除失败");

            }
        });

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode==RESULT_OK&&requestCode==100){
            mCats.clear();
            getData();
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        cats.removeChangeListeners();
        if (deleteTask!=null&&!deleteTask.isCancelled()){
            deleteTask.cancel();
        }
    }
}


================================================
FILE: app/src/main/java/org/raphets/demorealm/async/UpdateCatActivity.java
================================================
package org.raphets.demorealm.async;

import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;

import org.raphets.demorealm.R;
import org.raphets.demorealm.activity.BaseActivity;
import org.raphets.demorealm.bean.Cat;
import org.raphets.demorealm.util.ToastUtil;

import butterknife.BindView;
import butterknife.OnClick;
import io.realm.Realm;
import io.realm.RealmAsyncTask;

public class UpdateCatActivity extends BaseActivity {
    @BindView(R.id.toolBar)
    Toolbar mToolbar;
    @BindView(R.id.et_name)
    EditText etName;

    private Realm mRealm;
    private String mId;
    private RealmAsyncTask updateTask;

    @Override
    public int getLayoutId() {
        return R.layout.activity_update_cat;
    }

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        initData();

    }

    private void initData() {
        setToolbar(mToolbar,"异步更新");
        mId=getIntent().getStringExtra("id");
        mRealm=Realm.getDefaultInstance();
    }

    @OnClick(R.id.btn_update)
    void onClick(View view){
        final String name=etName.getText().toString().trim();
        if (TextUtils.isEmpty(name)){
            ToastUtil.showShortToast(UpdateCatActivity.this,"请输入新的Name");
            return;
        }

     updateTask=   mRealm.executeTransactionAsync(new Realm.Transaction() {
            @Override
            public void execute(Realm realm) {
                Cat cat=realm.where(Cat.class).equalTo("id",mId).findFirst();
                cat.setName(name);
            }
        }, new Realm.Transaction.OnSuccess() {
            @Override
            public void onSuccess() {
                ToastUtil.showShortToast(UpdateCatActivity.this,"更新成功");
                setResult(RESULT_OK);
                finish();
            }
        }, new Realm.Transaction.OnError() {
            @Override
            public void onError(Throwable error) {
                ToastUtil.showShortToast(UpdateCatActivity.this,"失败成功");

            }
        });

    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (updateTask!=null&&!updateTask.isCancelled()){
            updateTask.cancel();
        }
    }
}


================================================
FILE: app/src/main/java/org/raphets/demorealm/bean/Cat.java
================================================
package org.raphets.demorealm.bean;

import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey;

/**
 * Created by RaphetS on 2016/10/21.
 */

public class Cat extends RealmObject {
    private String name;
    private int age;
    @PrimaryKey
    private String id;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
}


================================================
FILE: app/src/main/java/org/raphets/demorealm/bean/Dog.java
================================================
package org.raphets.demorealm.bean;

import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey;

/**
 * Created by matou0289 on 2016/10/20.
 */

public class Dog extends RealmObject {
    private String name;
    private int age;
    @PrimaryKey
    private String id;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
}


================================================
FILE: app/src/main/java/org/raphets/demorealm/util/DefaultItemTouchHelpCallback.java
================================================
package org.raphets.demorealm.util;

import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;


public class DefaultItemTouchHelpCallback extends ItemTouchHelper.Callback {

    /**
     * Item操作的回调
     */
    private OnItemTouchCallbackListener onItemTouchCallbackListener;

    /**
     * 是否可以拖拽
     */
    private boolean isCanDrag = true;
    /**
     * 是否可以被滑动
     */
    private boolean isCanSwipe = true;

    public DefaultItemTouchHelpCallback(OnItemTouchCallbackListener onItemTouchCallbackListener) {
        this.onItemTouchCallbackListener = onItemTouchCallbackListener;
    }

    /**
     * 设置Item操作的回调,去更新UI和数据源
     *
     * @param onItemTouchCallbackListener
     */
    public void setOnItemTouchCallbackListener(OnItemTouchCallbackListener onItemTouchCallbackListener) {
        this.onItemTouchCallbackListener = onItemTouchCallbackListener;
    }

    /**
     * 设置是否可以被拖拽
     *
     * @param canDrag 是true,否false
     */
    public void setDragEnable(boolean canDrag) {
        isCanDrag = canDrag;
    }

    /**
     * 设置是否可以被滑动
     *
     * @param canSwipe 是true,否false
     */
    public void setSwipeEnable(boolean canSwipe) {
        isCanSwipe = canSwipe;
    }

    /**
     * 当Item被长按的时候是否可以被拖拽
     *
     * @return
     */
    @Override
    public boolean isLongPressDragEnabled() {
        return isCanDrag;
    }

    /**
     * Item是否可以被滑动(H:左右滑动,V:上下滑动)
     *
     * @return
     */
    @Override
    public boolean isItemViewSwipeEnabled() {
        return isCanSwipe;
    }

    /**
     * 当用户拖拽或者滑动Item的时候需要我们告诉系统滑动或者拖拽的方向
     *
     * @param recyclerView
     * @param viewHolder
     * @return
     */
    @Override
    public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
        RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
        if (layoutManager instanceof GridLayoutManager) {// GridLayoutManager
            // flag如果值是0,相当于这个功能被关闭
            int dragFlag = ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT | ItemTouchHelper.UP | ItemTouchHelper.DOWN;
            int swipeFlag = 0;
            // create make
            return makeMovementFlags(dragFlag, swipeFlag);
        } else if (layoutManager instanceof LinearLayoutManager) {// linearLayoutManager
            LinearLayoutManager linearLayoutManager = (LinearLayoutManager) layoutManager;
            int orientation = linearLayoutManager.getOrientation();

            int dragFlag = 0;
            int swipeFlag = 0;

            // 为了方便理解,相当于分为横着的ListView和竖着的ListView
            if (orientation == LinearLayoutManager.HORIZONTAL) {// 如果是横向的布局
                swipeFlag = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
                dragFlag = ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
            } else if (orientation == LinearLayoutManager.VERTICAL) {// 如果是竖向的布局,相当于ListView
                dragFlag = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
                swipeFlag = ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
            }
            return makeMovementFlags(dragFlag, swipeFlag);
        }
        return 0;
    }

    /**
     * 当Item被拖拽的时候被回调
     *
     * @param recyclerView     recyclerView
     * @param srcViewHolder    拖拽的ViewHolder
     * @param targetViewHolder 目的地的viewHolder
     * @return
     */
    @Override
    public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder srcViewHolder, RecyclerView.ViewHolder targetViewHolder) {
        if (onItemTouchCallbackListener != null) {
            return onItemTouchCallbackListener.onMove(srcViewHolder.getAdapterPosition(), targetViewHolder.getAdapterPosition());
        }
        return false;
    }

    @Override
    public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
        if (onItemTouchCallbackListener != null) {
            onItemTouchCallbackListener.onSwiped(viewHolder.getAdapterPosition());
        }
    }

    public interface OnItemTouchCallbackListener {
        /**
         * 当某个Item被滑动删除的时候
         *
         * @param adapterPosition item的position
         */
        void onSwiped(int adapterPosition);

        /**
         * 当两个Item位置互换的时候被回调
         *
         * @param srcPosition    拖拽的item的position
         * @param targetPosition 目的地的Item的position
         * @return 开发者处理了操作应该返回true,开发者没有处理就返回false
         */
        boolean onMove(int srcPosition, int targetPosition);
    }
}


================================================
FILE: app/src/main/java/org/raphets/demorealm/util/RealmHelper.java
================================================
package org.raphets.demorealm.util;

import android.content.Context;

import org.raphets.demorealm.bean.Dog;

import java.util.List;

import io.realm.Realm;
import io.realm.RealmConfiguration;
import io.realm.RealmResults;
import io.realm.Sort;

/**
 * Created by matou0289 on 2016/10/20.
 */

public class RealmHelper {
    public static final String DB_NAME = "myRealm.realm";
    private Realm mRealm;


    public RealmHelper(Context context) {

        mRealm = Realm.getDefaultInstance();
    }

    /**
     * add (增)
     */
    public void addDog(final Dog dog) {
        mRealm.beginTransaction();
        mRealm.copyToRealm(dog);
        mRealm.commitTransaction();

    }

    /**
     * delete (删)
     */
    public void deleteDog(String id) {
        Dog dog = mRealm.where(Dog.class).equalTo("id", id).findFirst();
        mRealm.beginTransaction();
        dog.deleteFromRealm();
        mRealm.commitTransaction();

    }

    /**
     * update (改)
     */
    public void updateDog(String id, String newName) {
        Dog dog = mRealm.where(Dog.class).equalTo("id", id).findFirst();
        mRealm.beginTransaction();
        dog.setName(newName);
        mRealm.commitTransaction();
    }

    /**
     * query (查询所有)
     */
    public List<Dog> queryAllDog() {
        RealmResults<Dog> dogs = mRealm.where(Dog.class).findAll();
        /**
         * 对查询结果,按Id进行排序,只能对查询结果进行排序
         */
        //增序排列
        dogs=dogs.sort("id");
//        //降序排列
//        dogs=dogs.sort("id", Sort.DESCENDING);
        return mRealm.copyFromRealm(dogs);
    }

    /**
     * query (根据Id(主键)查)
     */
    public Dog queryDogById(String id) {
        Dog dog = mRealm.where(Dog.class).equalTo("id", id).findFirst();

        return dog;
    }


    /**
     * query (根据age查)
     */
    public List<Dog> queryDobByAge(int age) {
        RealmResults<Dog> dogs = mRealm.where(Dog.class).equalTo("age", age).findAll();

        return mRealm.copyFromRealm(dogs);
    }

    public boolean isDogExist(String id){
        Dog dog=mRealm.where(Dog.class).equalTo("id",id).findFirst();
        if (dog==null){
            return false;
        }else {
            return  true;
        }
    }

    public Realm getRealm(){

        return mRealm;
    }

    public void close(){
        if (mRealm!=null){
            mRealm.close();
        }
    }
}


================================================
FILE: app/src/main/java/org/raphets/demorealm/util/ToastUtil.java
================================================
package org.raphets.demorealm.util;

import android.content.Context;
import android.widget.Toast;

/**
 * Created by RaphetS on 2016/10/21.
 */

public class ToastUtil {
    private  static Toast mToast;

    public static void showShortToast(Context context,String msg){
        if (mToast==null){
            mToast=Toast.makeText(context,msg,Toast.LENGTH_SHORT);
        }
        mToast.setText(msg);
        mToast.show();
    }
}


================================================
FILE: app/src/main/res/drawable/like_selector.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/icon_like" android:state_selected="true" />
    <item android:drawable="@drawable/icon_unlike" android:state_selected="false" />

</selector>

================================================
FILE: app/src/main/res/drawable/stoke_bg.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke android:color="@color/colorAccent"
        android:width="1dp"/>
</shape>

================================================
FILE: app/src/main/res/layout/activity_add.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <include layout="@layout/toolbar"/>
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>


================================================
FILE: app/src/main/res/layout/activity_add_delete.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <include layout="@layout/toolbar"/>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>


================================================
FILE: app/src/main/res/layout/activity_all_dog.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <include layout="@layout/toolbar" />

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>


================================================
FILE: app/src/main/res/layout/activity_async.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <include layout="@layout/toolbar"/>
    <Button
        android:textSize="20sp"
        android:layout_marginTop="10dp"
        android:id="@+id/btn_add_delete"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/colorAccent"
        android:elevation="5dp"
        android:text="异步增、删"
        android:textAllCaps="false" />
    <Button
        android:textSize="20sp"
        android:layout_marginTop="10dp"
        android:id="@+id/btn_update_query"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/colorAccent"
        android:elevation="5dp"
        android:text="异步改、查"
        android:textAllCaps="false" />
</LinearLayout>


================================================
FILE: app/src/main/res/layout/activity_async_query.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <include layout="@layout/toolbar"/>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>


</LinearLayout>


================================================
FILE: app/src/main/res/layout/activity_condition_query.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <include layout="@layout/toolbar" />

    <LinearLayout
        android:layout_marginTop="10dp"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:background="@drawable/stoke_bg"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="40dp">
        <TextView
            android:textSize="18sp"
            android:gravity="center"
            android:text="ID"
            android:id="@+id/tv_id"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content" />
        <View
            android:background="@color/colorAccent"
            android:layout_width="1dp"
            android:layout_height="match_parent"/>
        <EditText
            android:paddingLeft="20dp"
            android:hint="请输入ID"
            android:background="@null"
            android:id="@+id/et_id"
            android:layout_weight="3"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
    </LinearLayout>
    <LinearLayout
        android:layout_marginTop="10dp"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:background="@drawable/stoke_bg"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="40dp">
        <TextView
            android:textSize="18sp"
            android:gravity="center"
            android:text="Age"
            android:id="@+id/tv_age"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content" />
        <View
            android:background="@color/colorAccent"
            android:layout_width="1dp"
            android:layout_height="match_parent"/>
        <EditText
            android:paddingLeft="20dp"
            android:hint="请输入年龄"
            android:background="@null"
            android:id="@+id/et_age"
            android:layout_weight="3"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
    </LinearLayout>
    <Button
        android:id="@+id/btn_query_id"
        android:elevation="10dp"
        android:text="根据Id查询"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:background="@color/colorAccent"
        android:layout_width="match_parent"
        android:layout_height="40dp" />
    <Button
        android:textAllCaps="false"
        android:id="@+id/btn_query_age"
        android:elevation="10dp"
        android:text="根据Age查询"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:background="@color/colorAccent"
        android:layout_width="match_parent"
        android:layout_height="40dp" />

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_marginTop="10dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>


================================================
FILE: app/src/main/res/layout/activity_main.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <include layout="@layout/toolbar" />

    <Button
        android:textSize="20sp"
        android:id="@+id/btn_add"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/colorAccent"
        android:elevation="5dp"
        android:text="增、删"
        android:textAllCaps="false" />


    <Button
        android:textSize="20sp"
        android:id="@+id/btn_query"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:background="@color/colorAccent"
        android:elevation="5dp"
        android:text="改、查"
        android:textAllCaps="false" />

    <Button
        android:textSize="20sp"
        android:id="@+id/btn_async"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:background="@color/colorAccent"
        android:elevation="5dp"
        android:text="异步操作"
        android:textAllCaps="false" />
</LinearLayout>


================================================
FILE: app/src/main/res/layout/activity_other_query.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <include layout="@layout/toolbar"/>

    <LinearLayout
        android:padding="20dp"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:textSize="18sp"
            android:text="平均年龄:"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
        <TextView
            android:id="@+id/tv_average_age"
            android:textSize="18sp"
            android:layout_weight="2"
            android:layout_width="0dp"
            android:layout_height="match_parent" />

    </LinearLayout>
    <LinearLayout
        android:padding="20dp"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:textSize="18sp"
            android:text="总年龄:"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
        <TextView
            android:id="@+id/tv_sum_age"
            android:textSize="18sp"
            android:layout_weight="2"
            android:layout_width="0dp"
            android:layout_height="match_parent" />

    </LinearLayout>

    <LinearLayout
        android:padding="20dp"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:textSize="18sp"
            android:text="最大年龄:"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
        <TextView
            android:id="@+id/tv_max_id"
            android:textSize="18sp"
            android:layout_weight="2"
            android:layout_width="0dp"
            android:layout_height="match_parent" />

    </LinearLayout>
</LinearLayout>


================================================
FILE: app/src/main/res/layout/activity_query.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <include layout="@layout/toolbar" />

    <Button
        android:textSize="20sp"
        android:id="@+id/btn_query"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/colorAccent"
        android:elevation="5dp"
        android:text="改、查询全部"
        android:textAllCaps="false" />

    <Button
        android:textSize="20sp"
        android:layout_marginTop="10dp"
        android:id="@+id/btn_condition_query"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/colorAccent"
        android:elevation="5dp"
        android:text="条件查询"
        android:textAllCaps="false" />

    <Button
        android:textSize="20sp"
        android:layout_marginTop="10dp"
        android:id="@+id/btn_other_query"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/colorAccent"
        android:elevation="5dp"
        android:text="其他查询"
        android:textAllCaps="false" />

</LinearLayout>


================================================
FILE: app/src/main/res/layout/activity_update.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <include layout="@layout/toolbar"/>

    <EditText
        android:id="@+id/et_name"
        android:layout_margin="20dp"
        android:background="@drawable/stoke_bg"
        android:hint="请输入新的Name"
        android:padding="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/btn_update"
        android:textAllCaps="false"
        android:text="UpdateName"
        android:layout_margin="20dp"
        android:layout_width="match_parent"
        android:background="@color/colorAccent"
        android:layout_height="wrap_content" />
</LinearLayout>


================================================
FILE: app/src/main/res/layout/activity_update_cat.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <include layout="@layout/toolbar"/>
    <EditText
        android:id="@+id/et_name"
        android:layout_margin="20dp"
        android:background="@drawable/stoke_bg"
        android:hint="请输入新的Name"
        android:padding="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/btn_update"
        android:textAllCaps="false"
        android:text="UpdateName"
        android:layout_margin="20dp"
        android:layout_width="match_parent"
        android:background="@color/colorAccent"
        android:layout_height="wrap_content" />

</LinearLayout>


================================================
FILE: app/src/main/res/layout/item_dog.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="10dp"
    android:elevation="5dp"
    app:cardCornerRadius="5dp">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        android:background="@color/colorAccent"
        android:padding="10dp">

        <TextView
            android:id="@+id/tv_id"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:textAllCaps="false" />

        <TextView
            android:layout_centerVertical="true"
            android:layout_centerInParent="true"
            android:id="@+id/tv_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <ImageView
            android:id="@+id/iv_like"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:padding="10dp"
            android:src="@drawable/like_selector" />

    </RelativeLayout>

</android.support.v7.widget.CardView>

================================================
FILE: app/src/main/res/layout/toolbar.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolBar"
    app:titleTextColor="@android:color/white"
    android:background="@color/colorPrimary"
    android:fitsSystemWindows="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />


================================================
FILE: app/src/main/res/values/colors.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">@android:color/holo_blue_bright</color>
</resources>


================================================
FILE: app/src/main/res/values/dimens.xml
================================================
<resources>
    <!-- Default screen margins, per the Android Design guidelines. -->
    <dimen name="activity_horizontal_margin">16dp</dimen>
    <dimen name="activity_vertical_margin">16dp</dimen>
</resources>


================================================
FILE: app/src/main/res/values/strings.xml
================================================
<resources>
    <string name="app_name">DemoRealm</string>
</resources>


================================================
FILE: app/src/main/res/values/styles.xml
================================================
<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        //ActionBarDrawerToggle设置颜色
        <item name="colorControlNormal">@android:color/white</item>
    </style>

</resources>


================================================
FILE: app/src/main/res/values-w820dp/dimens.xml
================================================
<resources>
    <!-- Example customization of dimensions originally defined in res/values/dimens.xml
         (such as screen margins) for screens with more than 820dp of available width. This
         would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). -->
    <dimen name="activity_horizontal_margin">64dp</dimen>
</resources>


================================================
FILE: app/src/test/java/org/raphets/demorealm/ExampleUnitTest.java
================================================
package org.raphets.demorealm;

import org.junit.Test;

import static org.junit.Assert.*;

/**
 * Example local unit test, which will execute on the development machine (host).
 *
 * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
 */
public class ExampleUnitTest {
    @Test
    public void addition_isCorrect() throws Exception {
        assertEquals(4, 2 + 2);
    }
}

================================================
FILE: build.gradle
================================================
// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.1'
        classpath "io.realm:realm-gradle-plugin:2.0.2"

        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}


================================================
FILE: gradle/wrapper/gradle-wrapper.properties
================================================
#Mon Dec 28 10:00:20 PST 2015
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip


================================================
FILE: gradle.properties
================================================
# Project-wide Gradle settings.

# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.

# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html

# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx1536m

# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true


================================================
FILE: gradlew
================================================
#!/usr/bin/env bash

##############################################################################
##
##  Gradle start up script for UN*X
##
##############################################################################

# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""

APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`

# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"

warn ( ) {
    echo "$*"
}

die ( ) {
    echo
    echo "$*"
    echo
    exit 1
}

# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
case "`uname`" in
  CYGWIN* )
    cygwin=true
    ;;
  Darwin* )
    darwin=true
    ;;
  MINGW* )
    msys=true
    ;;
esac

# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
    ls=`ls -ld "$PRG"`
    link=`expr "$ls" : '.*-> \(.*\)$'`
    if expr "$link" : '/.*' > /dev/null; then
        PRG="$link"
    else
        PRG=`dirname "$PRG"`"/$link"
    fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null

CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar

# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
        # IBM's JDK on AIX uses strange locations for the executables
        JAVACMD="$JAVA_HOME/jre/sh/java"
    else
        JAVACMD="$JAVA_HOME/bin/java"
    fi
    if [ ! -x "$JAVACMD" ] ; then
        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
    fi
else
    JAVACMD="java"
    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi

# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
    MAX_FD_LIMIT=`ulimit -H -n`
    if [ $? -eq 0 ] ; then
        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
            MAX_FD="$MAX_FD_LIMIT"
        fi
        ulimit -n $MAX_FD
        if [ $? -ne 0 ] ; then
            warn "Could not set maximum file descriptor limit: $MAX_FD"
        fi
    else
        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
    fi
fi

# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi

# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
    JAVACMD=`cygpath --unix "$JAVACMD"`

    # We build the pattern for arguments to be converted via cygpath
    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
    SEP=""
    for dir in $ROOTDIRSRAW ; do
        ROOTDIRS="$ROOTDIRS$SEP$dir"
        SEP="|"
    done
    OURCYGPATTERN="(^($ROOTDIRS))"
    # Add a user-defined pattern to the cygpath arguments
    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
    fi
    # Now convert the arguments - kludge to limit ourselves to /bin/sh
    i=0
    for arg in "$@" ; do
        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option

        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
        else
            eval `echo args$i`="\"$arg\""
        fi
        i=$((i+1))
    done
    case $i in
        (0) set -- ;;
        (1) set -- "$args0" ;;
        (2) set -- "$args0" "$args1" ;;
        (3) set -- "$args0" "$args1" "$args2" ;;
        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
    esac
fi

# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
function splitJvmOpts() {
    JVM_OPTS=("$@")
}
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"

exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"


================================================
FILE: gradlew.bat
================================================
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem  Gradle startup script for Windows
@rem
@rem ##########################################################################

@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal

@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=

set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%

@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome

set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init

echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.

goto fail

:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe

if exist "%JAVA_EXE%" goto init

echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.

goto fail

:init
@rem Get command-line arguments, handling Windowz variants

if not "%OS%" == "Windows_NT" goto win9xME_args
if "%@eval[2+2]" == "4" goto 4NT_args

:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2

:win9xME_args_slurp
if "x%~1" == "x" goto execute

set CMD_LINE_ARGS=%*
goto execute

:4NT_args
@rem Get arguments from the 4NT Shell from JP Software
set CMD_LINE_ARGS=%$

:execute
@rem Setup the command line

set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar

@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%

:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd

:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1

:mainEnd
if "%OS%"=="Windows_NT" endlocal

:omega


================================================
FILE: settings.gradle
================================================
include ':app'
Download .txt
gitextract__jjpfxqs/

├── .gitignore
├── .idea/
│   ├── compiler.xml
│   ├── copyright/
│   │   └── profiles_settings.xml
│   ├── encodings.xml
│   ├── gradle.xml
│   ├── misc.xml
│   ├── modules.xml
│   ├── runConfigurations.xml
│   └── vcs.xml
├── README.md
├── app/
│   ├── .gitignore
│   ├── build.gradle
│   ├── proguard-rules.pro
│   └── src/
│       ├── androidTest/
│       │   └── java/
│       │       └── org/
│       │           └── raphets/
│       │               └── demorealm/
│       │                   └── ExampleInstrumentedTest.java
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   ├── java/
│       │   │   └── org/
│       │   │       └── raphets/
│       │   │           └── demorealm/
│       │   │               ├── MyApp.java
│       │   │               ├── activity/
│       │   │               │   ├── AllDogActivity.java
│       │   │               │   ├── BaseActivity.java
│       │   │               │   ├── ConditionQueryActivity.java
│       │   │               │   ├── DogListActivity.java
│       │   │               │   ├── MainActivity.java
│       │   │               │   ├── OtherQueryActivity.java
│       │   │               │   ├── QueryActivity.java
│       │   │               │   └── UpdateActivity.java
│       │   │               ├── adapter/
│       │   │               │   ├── AsyncCatAdapter.java
│       │   │               │   ├── BaseAdapter.java
│       │   │               │   ├── BaseViewHolder.java
│       │   │               │   ├── DogAdapter.java
│       │   │               │   ├── LikeCatAdapter.java
│       │   │               │   └── LikeDogAdapter.java
│       │   │               ├── async/
│       │   │               │   ├── AddDeleteActivity.java
│       │   │               │   ├── AsyncActivity.java
│       │   │               │   ├── AsyncQueryActivity.java
│       │   │               │   └── UpdateCatActivity.java
│       │   │               ├── bean/
│       │   │               │   ├── Cat.java
│       │   │               │   └── Dog.java
│       │   │               └── util/
│       │   │                   ├── DefaultItemTouchHelpCallback.java
│       │   │                   ├── RealmHelper.java
│       │   │                   └── ToastUtil.java
│       │   └── res/
│       │       ├── drawable/
│       │       │   ├── like_selector.xml
│       │       │   └── stoke_bg.xml
│       │       ├── layout/
│       │       │   ├── activity_add.xml
│       │       │   ├── activity_add_delete.xml
│       │       │   ├── activity_all_dog.xml
│       │       │   ├── activity_async.xml
│       │       │   ├── activity_async_query.xml
│       │       │   ├── activity_condition_query.xml
│       │       │   ├── activity_main.xml
│       │       │   ├── activity_other_query.xml
│       │       │   ├── activity_query.xml
│       │       │   ├── activity_update.xml
│       │       │   ├── activity_update_cat.xml
│       │       │   ├── item_dog.xml
│       │       │   └── toolbar.xml
│       │       ├── values/
│       │       │   ├── colors.xml
│       │       │   ├── dimens.xml
│       │       │   ├── strings.xml
│       │       │   └── styles.xml
│       │       └── values-w820dp/
│       │           └── dimens.xml
│       └── test/
│           └── java/
│               └── org/
│                   └── raphets/
│                       └── demorealm/
│                           └── ExampleUnitTest.java
├── build.gradle
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
Download .txt
SYMBOL INDEX (164 symbols across 26 files)

FILE: app/src/androidTest/java/org/raphets/demorealm/ExampleInstrumentedTest.java
  class ExampleInstrumentedTest (line 17) | @RunWith(AndroidJUnit4.class)
    method useAppContext (line 19) | @Test

FILE: app/src/main/java/org/raphets/demorealm/MyApp.java
  class MyApp (line 14) | public class MyApp extends Application {
    method onCreate (line 15) | @Override

FILE: app/src/main/java/org/raphets/demorealm/activity/AllDogActivity.java
  class AllDogActivity (line 31) | public class AllDogActivity extends BaseActivity {
    method onCreate (line 41) | @Override
    method initData (line 52) | private void initData() {
    method setSwipeDelete (line 70) | private void setSwipeDelete() {
    method addListener (line 94) | private void addListener() {
    method getLayoutId (line 106) | @Override
    method onActivityResult (line 111) | @Override

FILE: app/src/main/java/org/raphets/demorealm/activity/BaseActivity.java
  class BaseActivity (line 15) | public abstract class BaseActivity extends AppCompatActivity {
    method onCreate (line 16) | @Override
    method getLayoutId (line 24) | public abstract int getLayoutId();
    method setToolbar (line 26) | protected void setToolbar(Toolbar toolbar,String title){

FILE: app/src/main/java/org/raphets/demorealm/activity/ConditionQueryActivity.java
  class ConditionQueryActivity (line 29) | public class ConditionQueryActivity extends BaseActivity {
    method getLayoutId (line 43) | @Override
    method onCreate (line 48) | @Override
    method onClick (line 56) | @OnClick({R.id.btn_query_id, R.id.btn_query_age})
    method initData (line 71) | private void initData() {
    method queryById (line 81) | private void queryById() {
    method queryByAge (line 100) | private void queryByAge() {

FILE: app/src/main/java/org/raphets/demorealm/activity/DogListActivity.java
  class DogListActivity (line 19) | public class DogListActivity extends BaseActivity {
    method onCreate (line 29) | @Override
    method getLayoutId (line 40) | @Override
    method initRecyclerView (line 46) | private void initRecyclerView() {
    method initData (line 54) | private void initData() {

FILE: app/src/main/java/org/raphets/demorealm/activity/MainActivity.java
  class MainActivity (line 18) | public class MainActivity extends BaseActivity {
    method onCreate (line 22) | @Override
    method getLayoutId (line 31) | @Override
    method onClick (line 38) | @OnClick({R.id.btn_add,  R.id.btn_query,R.id.btn_async})

FILE: app/src/main/java/org/raphets/demorealm/activity/OtherQueryActivity.java
  class OtherQueryActivity (line 20) | public class OtherQueryActivity extends BaseActivity {
    method getLayoutId (line 33) | @Override
    method onCreate (line 38) | @Override
    method getAverageAge (line 55) | private void getAverageAge() {
    method getSumAge (line 63) | private void getSumAge() {
    method getMaxId (line 72) | private void getMaxId(){

FILE: app/src/main/java/org/raphets/demorealm/activity/QueryActivity.java
  class QueryActivity (line 18) | public class QueryActivity extends BaseActivity {
    method onCreate (line 21) | @Override
    method getLayoutId (line 27) | @Override
    method onClick (line 32) | @OnClick({R.id.btn_query, R.id.btn_condition_query,R.id.btn_other_query})

FILE: app/src/main/java/org/raphets/demorealm/activity/UpdateActivity.java
  class UpdateActivity (line 18) | public class UpdateActivity extends BaseActivity {
    method getLayoutId (line 27) | @Override
    method onCreate (line 32) | @Override
    method initData (line 40) | private void initData() {
    method onClick (line 45) | @OnClick(R.id.btn_update)

FILE: app/src/main/java/org/raphets/demorealm/adapter/AsyncCatAdapter.java
  class AsyncCatAdapter (line 25) | public class AsyncCatAdapter extends BaseAdapter<Cat> {
    method AsyncCatAdapter (line 31) | public AsyncCatAdapter(Context context, List<Cat> mDatas, int mLayoutI...
    method convert (line 37) | @Override
    method isLiked (line 63) | private boolean isLiked( String id){
    method addCat (line 72) | private void addCat(final Cat cat, final ImageView imageView) {
    method deleteCat (line 94) | private void deleteCat(final String id, final ImageView imageView){
    method CancelTask (line 118) | public void CancelTask(){

FILE: app/src/main/java/org/raphets/demorealm/adapter/BaseAdapter.java
  class BaseAdapter (line 18) | public abstract class BaseAdapter<T> extends RecyclerView.Adapter<BaseVi...
    method BaseAdapter (line 25) | public BaseAdapter(Context mContext, List<T> mDatas, int mLayoutId) {
    method updateData (line 31) | public void updateData(List<T> data) {
    method addAll (line 37) | public void addAll(List<T> data) {
    method onCreateViewHolder (line 43) | @Override
    method getItemCount (line 50) | @Override
    method onBindViewHolder (line 56) | @Override
    method convert (line 78) | protected abstract void convert(Context mContext, BaseViewHolder holde...
    type OnItemClickListener (line 81) | public    interface OnItemClickListener {
      method onItemClick (line 82) | void onItemClick(View view, int position);
    type onLongItemClickListener (line 85) | public    interface onLongItemClickListener {
      method onLongItemClick (line 86) | void onLongItemClick(View view, int postion);
    method setOnItemClickListener (line 89) | public void setOnItemClickListener(OnItemClickListener listener) {
    method setonLongItemClickListener (line 93) | public void setonLongItemClickListener(onLongItemClickListener listene...

FILE: app/src/main/java/org/raphets/demorealm/adapter/BaseViewHolder.java
  class BaseViewHolder (line 16) | public class BaseViewHolder extends RecyclerView.ViewHolder {
    method BaseViewHolder (line 20) | public BaseViewHolder(View itemView) {
    method getView (line 27) | public <T extends View> T getView(int viewId) {
    method setText (line 36) | public BaseViewHolder setText(int viewId, int resId) {
    method setText (line 43) | public BaseViewHolder setText(int viewId, String text) {
    method setText (line 49) | public BaseViewHolder setText(int viewId, SpannableStringBuilder text) {
    method setImageResource (line 55) | public BaseViewHolder setImageResource(int viewId, int resId) {
    method setImageBitmap (line 61) | public BaseViewHolder setImageBitmap(int viewId, Bitmap bitmap) {
    method setImageDrawable (line 67) | public BaseViewHolder setImageDrawable(int viewId, Drawable drawable) {
    method setBackgroundColor (line 73) | public BaseViewHolder setBackgroundColor(int viewId, int color) {
    method setBackgroundResource (line 79) | public BaseViewHolder setBackgroundResource(int viewId, int background...
    method setTextColor (line 85) | public BaseViewHolder setTextColor(int viewId, int textColor) {
    method setAlpha (line 92) | @SuppressLint("NewApi")
    method setVisible (line 106) | public BaseViewHolder setVisible(int viewId, int visible) {
    method setTag (line 113) | public BaseViewHolder setTag(int viewId, Object tag) {
    method setTag (line 119) | public BaseViewHolder setTag(int viewId, int key, Object tag) {
    method setChecked (line 125) | public BaseViewHolder setChecked(int viewId, boolean checked) {
    method setOnClickListener (line 134) | public BaseViewHolder setOnClickListener(int viewId, View.OnClickListe...
    method setOnTouchListener (line 141) | public BaseViewHolder setOnTouchListener(int viewId, View.OnTouchListe...
    method setOnLongClickListener (line 147) | public BaseViewHolder setOnLongClickListener(int viewId, View.OnLongCl...

FILE: app/src/main/java/org/raphets/demorealm/adapter/DogAdapter.java
  class DogAdapter (line 19) | public class DogAdapter extends BaseAdapter<Dog> {
    method DogAdapter (line 23) | public DogAdapter(Context mContext, List<Dog> mDatas, int mLayoutId) {
    method convert (line 28) | @Override

FILE: app/src/main/java/org/raphets/demorealm/adapter/LikeCatAdapter.java
  class LikeCatAdapter (line 15) | public class LikeCatAdapter extends BaseAdapter<Cat> {
    method LikeCatAdapter (line 17) | public LikeCatAdapter(Context mContext, List<Cat> mDatas, int mLayoutI...
    method convert (line 21) | @Override

FILE: app/src/main/java/org/raphets/demorealm/adapter/LikeDogAdapter.java
  class LikeDogAdapter (line 16) | public class LikeDogAdapter extends BaseAdapter<Dog> {
    method LikeDogAdapter (line 18) | public LikeDogAdapter(Context mContext, List<Dog> mDatas, int mLayoutI...
    method convert (line 22) | @Override

FILE: app/src/main/java/org/raphets/demorealm/async/AddDeleteActivity.java
  class AddDeleteActivity (line 19) | public class AddDeleteActivity extends BaseActivity {
    method getLayoutId (line 30) | @Override
    method onCreate (line 35) | @Override
    method setRecyclerView (line 43) | private void setRecyclerView() {
    method initData (line 50) | private void initData() {
    method onDestroy (line 61) | @Override

FILE: app/src/main/java/org/raphets/demorealm/async/AsyncActivity.java
  class AsyncActivity (line 16) | public class AsyncActivity extends BaseActivity {
    method getLayoutId (line 20) | @Override
    method onCreate (line 25) | @Override
    method onClick (line 31) | @OnClick({R.id.btn_add_delete,R.id.btn_update_query})

FILE: app/src/main/java/org/raphets/demorealm/async/AsyncQueryActivity.java
  class AsyncQueryActivity (line 32) | public class AsyncQueryActivity extends BaseActivity {
    method getLayoutId (line 44) | @Override
    method onCreate (line 49) | @Override
    method initRecyclerView (line 62) | private void initRecyclerView() {
    method getData (line 72) | private void getData() {
    method addListener (line 87) | private void addListener() {
    method setSwipeDelete (line 100) | private void setSwipeDelete() {
    method deleteCat (line 121) | private void deleteCat(final String id) {
    method onActivityResult (line 149) | @Override
    method onDestroy (line 158) | @Override

FILE: app/src/main/java/org/raphets/demorealm/async/UpdateCatActivity.java
  class UpdateCatActivity (line 21) | public class UpdateCatActivity extends BaseActivity {
    method getLayoutId (line 31) | @Override
    method onCreate (line 36) | @Override
    method initData (line 44) | private void initData() {
    method onClick (line 50) | @OnClick(R.id.btn_update)
    method onDestroy (line 82) | @Override

FILE: app/src/main/java/org/raphets/demorealm/bean/Cat.java
  class Cat (line 10) | public class Cat extends RealmObject {
    method getName (line 16) | public String getName() {
    method setName (line 20) | public void setName(String name) {
    method getAge (line 24) | public int getAge() {
    method setAge (line 28) | public void setAge(int age) {
    method getId (line 32) | public String getId() {
    method setId (line 36) | public void setId(String id) {

FILE: app/src/main/java/org/raphets/demorealm/bean/Dog.java
  class Dog (line 10) | public class Dog extends RealmObject {
    method getName (line 16) | public String getName() {
    method setName (line 20) | public void setName(String name) {
    method getAge (line 24) | public int getAge() {
    method setAge (line 28) | public void setAge(int age) {
    method getId (line 32) | public String getId() {
    method setId (line 36) | public void setId(String id) {

FILE: app/src/main/java/org/raphets/demorealm/util/DefaultItemTouchHelpCallback.java
  class DefaultItemTouchHelpCallback (line 9) | public class DefaultItemTouchHelpCallback extends ItemTouchHelper.Callba...
    method DefaultItemTouchHelpCallback (line 25) | public DefaultItemTouchHelpCallback(OnItemTouchCallbackListener onItem...
    method setOnItemTouchCallbackListener (line 34) | public void setOnItemTouchCallbackListener(OnItemTouchCallbackListener...
    method setDragEnable (line 43) | public void setDragEnable(boolean canDrag) {
    method setSwipeEnable (line 52) | public void setSwipeEnable(boolean canSwipe) {
    method isLongPressDragEnabled (line 61) | @Override
    method isItemViewSwipeEnabled (line 71) | @Override
    method getMovementFlags (line 83) | @Override
    method onMove (line 120) | @Override
    method onSwiped (line 128) | @Override
    type OnItemTouchCallbackListener (line 135) | public interface OnItemTouchCallbackListener {
      method onSwiped (line 141) | void onSwiped(int adapterPosition);
      method onMove (line 150) | boolean onMove(int srcPosition, int targetPosition);

FILE: app/src/main/java/org/raphets/demorealm/util/RealmHelper.java
  class RealmHelper (line 18) | public class RealmHelper {
    method RealmHelper (line 23) | public RealmHelper(Context context) {
    method addDog (line 31) | public void addDog(final Dog dog) {
    method deleteDog (line 41) | public void deleteDog(String id) {
    method updateDog (line 52) | public void updateDog(String id, String newName) {
    method queryAllDog (line 62) | public List<Dog> queryAllDog() {
    method queryDogById (line 77) | public Dog queryDogById(String id) {
    method queryDobByAge (line 87) | public List<Dog> queryDobByAge(int age) {
    method isDogExist (line 93) | public boolean isDogExist(String id){
    method getRealm (line 102) | public Realm getRealm(){
    method close (line 107) | public void close(){

FILE: app/src/main/java/org/raphets/demorealm/util/ToastUtil.java
  class ToastUtil (line 10) | public class ToastUtil {
    method showShortToast (line 13) | public static void showShortToast(Context context,String msg){

FILE: app/src/test/java/org/raphets/demorealm/ExampleUnitTest.java
  class ExampleUnitTest (line 12) | public class ExampleUnitTest {
    method addition_isCorrect (line 13) | @Test
Condensed preview — 67 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (97K chars).
[
  {
    "path": ".gitignore",
    "chars": 118,
    "preview": "*.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",
    "chars": 686,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"CompilerConfiguration\">\n    <resourceExt"
  },
  {
    "path": ".idea/copyright/profiles_settings.xml",
    "chars": 74,
    "preview": "<component name=\"CopyrightManager\">\n  <settings default=\"\" />\n</component>"
  },
  {
    "path": ".idea/encodings.xml",
    "chars": 159,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"Encoding\">\n    <file url=\"PROJECT\" chars"
  },
  {
    "path": ".idea/gradle.xml",
    "chars": 722,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"GradleSettings\">\n    <option name=\"linke"
  },
  {
    "path": ".idea/misc.xml",
    "chars": 2226,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"EntryPointsManager\">\n    <entry_points v"
  },
  {
    "path": ".idea/modules.xml",
    "chars": 355,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ProjectModuleManager\">\n    <modules>\n   "
  },
  {
    "path": ".idea/runConfigurations.xml",
    "chars": 564,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"RunConfigurationProducerService\">\n    <o"
  },
  {
    "path": ".idea/vcs.xml",
    "chars": 167,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"VcsDirectoryMappings\">\n    <mapping dire"
  },
  {
    "path": "README.md",
    "chars": 1033,
    "preview": "##Demo是以本地收藏为应用场景的,实现了对Realm的增删改查等操作,以及异步的增删改查操作,欢迎Star、Fork\n使用详情请看我的简书http://www.jianshu.com/p/28912c2f31db\n##DownloadD"
  },
  {
    "path": "app/.gitignore",
    "chars": 7,
    "preview": "/build\n"
  },
  {
    "path": "app/build.gradle",
    "chars": 1186,
    "preview": "apply plugin: 'com.android.application'\napply plugin: 'realm-android'\napply plugin: 'android-apt'\n\nandroid {\n    compile"
  },
  {
    "path": "app/proguard-rules.pro",
    "chars": 645,
    "preview": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in D:"
  },
  {
    "path": "app/src/androidTest/java/org/raphets/demorealm/ExampleInstrumentedTest.java",
    "chars": 746,
    "preview": "package org.raphets.demorealm;\n\nimport android.content.Context;\nimport android.support.test.InstrumentationRegistry;\nimp"
  },
  {
    "path": "app/src/main/AndroidManifest.xml",
    "chars": 1323,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package="
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/MyApp.java",
    "chars": 610,
    "preview": "package org.raphets.demorealm;\n\nimport android.app.Application;\n\nimport org.raphets.demorealm.util.RealmHelper;\n\nimport "
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/activity/AllDogActivity.java",
    "chars": 3770,
    "preview": "package org.raphets.demorealm.activity;\n\nimport android.content.Intent;\nimport android.support.design.widget.Snackbar;\ni"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/activity/BaseActivity.java",
    "chars": 1080,
    "preview": "package org.raphets.demorealm.activity;\n\nimport android.os.Bundle;\nimport android.support.annotation.Nullable;\nimport an"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/activity/ConditionQueryActivity.java",
    "chars": 3274,
    "preview": "package org.raphets.demorealm.activity;\n\nimport android.os.Bundle;\nimport android.support.annotation.Nullable;\nimport an"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/activity/DogListActivity.java",
    "chars": 2608,
    "preview": "package org.raphets.demorealm.activity;\n\nimport android.support.v7.app.AppCompatActivity;\nimport android.os.Bundle;\nimpo"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/activity/MainActivity.java",
    "chars": 1395,
    "preview": "package org.raphets.demorealm.activity;\n\nimport android.content.Intent;\nimport android.support.annotation.Nullable;\nimpo"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/activity/OtherQueryActivity.java",
    "chars": 1741,
    "preview": "package org.raphets.demorealm.activity;\n\nimport android.support.annotation.Nullable;\nimport android.support.v7.app.AppCo"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/activity/QueryActivity.java",
    "chars": 1357,
    "preview": "package org.raphets.demorealm.activity;\n\nimport android.content.Intent;\nimport android.support.v7.app.AppCompatActivity;"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/activity/UpdateActivity.java",
    "chars": 1445,
    "preview": "package org.raphets.demorealm.activity;\n\nimport android.support.annotation.Nullable;\nimport android.support.v7.app.AppCo"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/adapter/AsyncCatAdapter.java",
    "chars": 3638,
    "preview": "package org.raphets.demorealm.adapter;\n\nimport android.content.Context;\nimport android.os.AsyncTask;\nimport android.view"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/adapter/BaseAdapter.java",
    "chars": 2763,
    "preview": "package org.raphets.demorealm.adapter;\n\nimport android.content.Context;\nimport android.support.v7.widget.RecyclerView;\ni"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/adapter/BaseViewHolder.java",
    "chars": 4392,
    "preview": "package org.raphets.demorealm.adapter;\n\nimport android.annotation.SuppressLint;\nimport android.graphics.Bitmap;\nimport a"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/adapter/DogAdapter.java",
    "chars": 1458,
    "preview": "package org.raphets.demorealm.adapter;\n\nimport android.content.Context;\nimport android.view.View;\nimport android.widget."
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/adapter/LikeCatAdapter.java",
    "chars": 688,
    "preview": "package org.raphets.demorealm.adapter;\n\nimport android.content.Context;\nimport android.view.View;\n\nimport org.raphets.de"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/adapter/LikeDogAdapter.java",
    "chars": 724,
    "preview": "package org.raphets.demorealm.adapter;\n\nimport android.content.Context;\nimport android.view.View;\nimport android.widget."
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/async/AddDeleteActivity.java",
    "chars": 1941,
    "preview": "package org.raphets.demorealm.async;\n\nimport android.support.annotation.Nullable;\nimport android.os.Bundle;\nimport andro"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/async/AsyncActivity.java",
    "chars": 1244,
    "preview": "package org.raphets.demorealm.async;\n\nimport android.content.Intent;\nimport android.support.annotation.Nullable;\nimport "
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/async/AsyncQueryActivity.java",
    "chars": 5248,
    "preview": "package org.raphets.demorealm.async;\n\nimport android.content.Intent;\nimport android.support.annotation.Nullable;\nimport "
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/async/UpdateCatActivity.java",
    "chars": 2433,
    "preview": "package org.raphets.demorealm.async;\n\nimport android.support.annotation.Nullable;\nimport android.support.v7.app.AppCompa"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/bean/Cat.java",
    "chars": 645,
    "preview": "package org.raphets.demorealm.bean;\n\nimport io.realm.RealmObject;\nimport io.realm.annotations.PrimaryKey;\n\n/**\n * Create"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/bean/Dog.java",
    "chars": 647,
    "preview": "package org.raphets.demorealm.bean;\n\nimport io.realm.RealmObject;\nimport io.realm.annotations.PrimaryKey;\n\n/**\n * Create"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/util/DefaultItemTouchHelpCallback.java",
    "chars": 4575,
    "preview": "package org.raphets.demorealm.util;\n\nimport android.support.v7.widget.GridLayoutManager;\nimport android.support.v7.widge"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/util/RealmHelper.java",
    "chars": 2360,
    "preview": "package org.raphets.demorealm.util;\n\nimport android.content.Context;\n\nimport org.raphets.demorealm.bean.Dog;\n\nimport jav"
  },
  {
    "path": "app/src/main/java/org/raphets/demorealm/util/ToastUtil.java",
    "chars": 436,
    "preview": "package org.raphets.demorealm.util;\n\nimport android.content.Context;\nimport android.widget.Toast;\n\n/**\n * Created by Rap"
  },
  {
    "path": "app/src/main/res/drawable/like_selector.xml",
    "chars": 288,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item a"
  },
  {
    "path": "app/src/main/res/drawable/stoke_bg.xml",
    "chars": 191,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <stroke an"
  },
  {
    "path": "app/src/main/res/layout/activity_add.xml",
    "chars": 462,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    andr"
  },
  {
    "path": "app/src/main/res/layout/activity_add_delete.xml",
    "chars": 462,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    andr"
  },
  {
    "path": "app/src/main/res/layout/activity_all_dog.xml",
    "chars": 464,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    andr"
  },
  {
    "path": "app/src/main/res/layout/activity_async.xml",
    "chars": 1012,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    andr"
  },
  {
    "path": "app/src/main/res/layout/activity_async_query.xml",
    "chars": 463,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    andr"
  },
  {
    "path": "app/src/main/res/layout/activity_condition_query.xml",
    "chars": 3403,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    andr"
  },
  {
    "path": "app/src/main/res/layout/activity_main.xml",
    "chars": 1315,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    andr"
  },
  {
    "path": "app/src/main/res/layout/activity_other_query.xml",
    "chars": 2211,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n  androi"
  },
  {
    "path": "app/src/main/res/layout/activity_query.xml",
    "chars": 1337,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    andr"
  },
  {
    "path": "app/src/main/res/layout/activity_update.xml",
    "chars": 873,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    andr"
  },
  {
    "path": "app/src/main/res/layout/activity_update_cat.xml",
    "chars": 873,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    andr"
  },
  {
    "path": "app/src/main/res/layout/item_dog.xml",
    "chars": 1442,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.v7.widget.CardView xmlns:android=\"http://schemas.android.com/apk"
  },
  {
    "path": "app/src/main/res/layout/toolbar.xml",
    "chars": 431,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.v7.widget.Toolbar xmlns:android=\"http://schemas.android.com/apk/"
  },
  {
    "path": "app/src/main/res/values/colors.xml",
    "chars": 232,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"colorPrimary\">#3F51B5</color>\n    <color name=\"color"
  },
  {
    "path": "app/src/main/res/values/dimens.xml",
    "chars": 211,
    "preview": "<resources>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"activity_horizontal"
  },
  {
    "path": "app/src/main/res/values/strings.xml",
    "chars": 72,
    "preview": "<resources>\n    <string name=\"app_name\">DemoRealm</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/styles.xml",
    "chars": 485,
    "preview": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.NoActionBar\">"
  },
  {
    "path": "app/src/main/res/values-w820dp/dimens.xml",
    "chars": 358,
    "preview": "<resources>\n    <!-- Example customization of dimensions originally defined in res/values/dimens.xml\n         (such as s"
  },
  {
    "path": "app/src/test/java/org/raphets/demorealm/ExampleUnitTest.java",
    "chars": 399,
    "preview": "package org.raphets.demorealm;\n\nimport org.junit.Test;\n\nimport static org.junit.Assert.*;\n\n/**\n * Example local unit tes"
  },
  {
    "path": "build.gradle",
    "chars": 620,
    "preview": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    r"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "chars": 233,
    "preview": "#Mon Dec 28 10:00:20 PST 2015\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_"
  },
  {
    "path": "gradle.properties",
    "chars": 730,
    "preview": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will o"
  },
  {
    "path": "gradlew",
    "chars": 4971,
    "preview": "#!/usr/bin/env bash\n\n##############################################################################\n##\n##  Gradle start "
  },
  {
    "path": "gradlew.bat",
    "chars": 2314,
    "preview": "@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem "
  },
  {
    "path": "settings.gradle",
    "chars": 15,
    "preview": "include ':app'\n"
  }
]

// ... and 1 more files (download for full content)

About this extraction

This page contains the full source code of the RaphetS/DemoRealm GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 67 files (84.3 KB), approximately 22.9k tokens, and a symbol index with 164 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!