示例Realm Butterknife

时间:2017-06-07 11:56:04

标签: android realm butterknife

我想知道是否有人有任何使用领域和黄油刀的例子。是否可以将两者结合使用?

到目前为止,我所尝试的是以下内容,但我不确定它是否正确。有人告诉我使用ExecuteTransaction,但我不确定它是否合适。

public class MainFragmentActivity extends FragmentActivity {

    MainFragmentAdaptor mMainFragmentAdaptor;
    ViewPager mViewPager;
    Player player;
    Realm realm;

    @BindView(R.id.et_character_name)
    EditText et_character_name;

    @OnTextChanged(R.id.et_character_name)
    protected void onTextChanged(CharSequence text) {
        String name = text.toString();
        player.setName(name);

        try {
            realm.executeTransaction(new Realm.Transaction() {
                @Override
                public void execute(Realm realm) {

                    realm.copyToRealmOrUpdate(player);
                    player.setCurrentHP(37);
                }
            });
        } catch (Exception e) {
            Log.e("REALM SET PLAYER ERROR", e.toString());
        }
    }

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

        realm = Realm.getDefaultInstance();
        setContentView(R.layout.activity_main_fragment);
        mViewPager = (ViewPager) findViewById(R.id.viewpager);
        mViewPager.setAdapter(mMainFragmentAdaptor);

        try {
            realm.executeTransaction(new Realm.Transaction() {
                @Override
                public void execute(Realm realm) {
                    player = realm.createObject(Player.class);
                    player.setCurrentHP(37);
                }
            });
        } catch (Exception e) {
            Log.e("REALM SET PLAYER ERROR", e.toString());
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        if (realm != null) { // guard against weird low-budget phones
            realm.close();
            realm = null;
        }
    }
}

2 个答案:

答案 0 :(得分:2)

  

是否可以将两者结合使用?

是。两者都是相互独立的。

  

我被告知要使用ExecuteTransaction,但我不确定它   合适的。

在大多数情况下,您应该使用executeTransaction(),因为它会为您处理错误。使用beginTransaction()的唯一原因通常是您希望进行一些自定义错误处理。*

有关详情,请参阅 link

答案 1 :(得分:1)

使用ButterKnifeRealm绝对没问题。两者都有不同的用途。

领域 领域移动平台是应用程序的数据层。与数据库一样,Realms中的数据可以被查询和过滤,互连和持久化

Butterknife 轻量级库,可将视图注入Android组件。它使用注释处理。

根据Christian Melchior身为Realm的Android Tech Lead, executeTransaction()相当于

try {
    realm.beginTransaction();
    // body of executeTransaction
    realm.commitTransaction();
} catch(Exception e) { 
    if(realm.isInTransaction()) {
         realm.cancelTransaction();
    }
    throw new RuntimeException(e);
}

因为executeTransaction()它处理开发人员的错误,所以beginTransaction()用于自定义错误处理(如果需要)。