<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                * 在項目中,除了EventBus,還有RxJava、GreenDao和ButterKnife這3個庫被頻繁使用。 ### RxJava * * * * * * 在項目中,IflySynthesizer、LingjuAudioPlayer均使用了RxJava對業務方法進行了封裝,而對于網絡請求、加載數據庫數據等耗時操作同樣使用了RxJava進行子/主線程的線程切換。 以加載鬧鐘記錄為例: ~~~ private void loadData() { Flowable.create(new FlowableOnSubscribe<Object>() { @Override public void subscribe(FlowableEmitter<Object> e) throws Exception { reset(); //TODO io線程加載數據庫數據 ... e.onNext(0); } }, BackpressureStrategy.BUFFER) .subscribeOn(Schedulers.io()) //執行訂閱(subscribe())所在線程 .doOnSubscribe(new Consumer<Subscription>() { @Override public void accept(Subscription subscription) throws Exception { //顯示加載進度條 mCpbLoad.setVisibility(View.VISIBLE); } }) .subscribeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread()) //響應訂閱(Sbscriber)所在線程 .subscribe(new Consumer<Object>() { @Override public void accept(Object o) throws Exception { /* 回到主線程,隱藏進度條,刷新列表 */ mCpbLoad.setVisibility(View.GONE); mAdapter.notifyDataSetChanged(); } }); } ~~~ ### GreenDao * * * * * * GreenDao是一個簡化SQLite數據庫創建和維護的輕量級的庫。完成初始化配置之后只需要通過注解即可建表,通過該庫提供的增刪該查方法即可一句話操作數據庫。 * 項目中創建的記錄實體類放在`com.lingju.model`包下,而對應的數據操作對象則放在`com.lingju.model.dao`包下。 以鬧鐘記錄為例: 1. 新建一個實體類使用@entity設置表名和@Id設置主鍵ID ~~~ @Entity(nameInDb = "t_alarm") public class AlarmClock { @Id(autoincrement = true) private Long id; private int rtime; private int frequency; private int valid; private String ring; private String path; private Date created; private String item; //鬧鐘類型 private boolean repeat; //是否重復 private Date rdate; //以下與服務器同步標記 private String sid; //服務器記錄id,該記錄的唯一標示 private long timestamp; //時間戳,記錄的時效性標記 private int recyle; //0:有效, 1:回收 private boolean synced = true; //false表示未同步,待更新 } ~~~ 2. 定義完該類并封裝好屬性后,Rebuild Project即可完成數據庫表的創建。 ![](https://box.kancloud.cn/099b10a4cd872d17d0ff440db4b964b2_358x307.png) 3. 創建dao,封裝數據訪問方法 ~~~ //獲取鬧鐘dao對象 mClockDao = DaoManager.get().getDaoSession().getAlarmClockDao(); /** * 插入一條鬧鐘記錄 **/ public boolean insertAlarm(AlarmClock alarm) { if (alarm.getId() != null) alarm = findAlarmById(alarm.getId()); alarm.setRecyle(0); return mClockDao.insertOrReplace(alarm) > 0; } /** * 刪除一條鬧鐘記錄 **/ public void deleteAlarm(AlarmClock alarm) { alarm = findAlarmById(alarm.getId()); alarm.setRecyle(1); mClockDao.update(alarm); } /** * 修改一條鬧鐘記錄 **/ public void updateAlarm(AlarmClock alarm) { AlarmClock realAlarm = findAlarmById(alarm.getId()); alarm.setTimestamp(realAlarm.getTimestamp()); alarm.setRecyle(0); mClockDao.update(alarm); } /** * 查詢所有鬧鐘記錄 **/ public List<AlarmClock> findAllAlarm() { return mClockDao.queryBuilder().where(AlarmClockDao.Properties.Recyle.eq(0)).list(); } ~~~ ### ButterKnife * * * * * * ButterKnife是專門為Android View設計的綁定注解,專業解決各種findViewById和setOnClickListener。建議與AS插件Android ButterKnife Zelezny配合使用,大大省略了上述兩種問題的無意義的代碼編寫時間。 以MainActivity為例: ~~~ public class MainActivity extends BaseActivity implements IAdditionAssist.AssistView { @BindView(R.id.index_text_editext) EditText editText; @BindView(R.id.index_bottom_box) FrameLayout bottomBox; @BindView(R.id.index_body) FrameLayout body; @BindView(R.id.index_chat_list_box) FrameLayout bodyChatList; @BindView(R.id.main_content_box) FrameLayout mMainContentBox; @BindView(R.id.index_text_input_box) LinearLayout mIndexTextInputBox; @BindView(R.id.fl_guide) FrameLayout mFlGuide; ... @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //資源綁定 ButterKnife.bind(this); ... } //監聽器綁定 @OnClick(R.id.index_text_send_bt) void sendMsg2Robot() { ... } } ~~~ 注意,在非Activity中使用綁定要使用`ButterKnife.bind(Object, View)`;多個點擊監聽綁定使用@OnClick({resId, resId, resId...})。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看