楽しいこと⑤MQTTサービスのOneNETプラットフォーム - OneNetインテリジェントライト+ MVPフレームワーク

釣りを与えるよりも、人に魚を与える、目的は、特定のプロジェクトを開発するためにあなたを教えることが、学習能力を学ぶことではありません。私は多分、神がBogeの礎石大きな成長経路があり、あなたが必要と周りのお友達やクラスメートと共有したいと考えています。

QQ技術グループとの対話:ESP8266&32物事はスプレーしないで好きではない、グループ番号622 368 884を開発

まず、あなたはArduinoのベースの開発技術ESP8266を知りたい場合

まず、基本

  1. ESP8266の世界にESP8266開発の基礎①の旅
  2. ESP8266開発の基礎ツアー②どのようESP8266にArduinoの開発環境をインストールするには
  3. ESP8266開発の旅の基礎知識③ESP8266とArduinoの開発ノート
  4. ESP8266開発の旅の基礎④ESP8266とEEPROM
  5. ESP8266開発の旅の基礎⑤ESP8266 SPIとI2C通信通信
  6. ESP8266開発の旅の基礎⑥ティッカー - ESP8266定期的なライブラリ

第二に、ネットワークの記事

  1. 記事へのESP8266ネットワークの開発の旅①ESP8266のために素敵なArduinoのコア
  2. ESP8266開発ジャーニー記事②ESP8266ネットワークの動作モードとESP8266WiFiライブラリ
  3. 記事へのESP8266ネットワーク開発の旅③ソフトAP - ESP8266WiFiAPライブラリを使用します
  4. 駅④記事へのESP8266ネットワークの開発の旅 - ESP8266WiFiSTAライブラリを使用
  5. 記事へのESP8266ネットワークの開発の旅⑤スキャンのWiFi - 利用ESP8266WiFiScanライブラリー
  6. ライブラリの基礎ピース⑥ESP8266WiFiGeneric--にESP8266ネットワークの開発の旅
  7. 記事へのESP8266ネットワークの開発の旅⑦TCPサーバー&クライアントのTCP
  8. 記事へのESP8266ネットワークの開発の旅⑧SmartConfig--キー流通ネットワーク
  9. 記事へのESP8266ネットワークの開発の旅⑨のHttpClientは - ESP8266HTTPClientライブラリを使用します
  10. ESP8266開発ジャーニー記事⑩UDPネットワークサービス
  11. ネットワーク開発の記事ESP8266⑪WebServerのツアー - ESP8266WebServerライブラリを使用します
  12. ESP8266ネットワークの開発の旅⑫記事ドメインネームサービス--ESP8266mDNSライブラリー
  13. SPIFFS⑬記事へのESP8266ネットワークの開発の旅 - ESP8266フラッシュファイルシステム
  14. 記事へのESP8266ネットワーク開発の旅⑭ウェブ配信ネットワーク
  15. 記事へのESP8266ネットワークの開発の旅⑮真のドメインネームサービス--DNSServer
  16. ESP8266開発の旅⑯ワイヤレスネットワークの記事--OTA更新ファームウェアのアップデート

第三に、出願書類

  1. ESP8266開発の旅アプリケーションピース①LANアプリケーション - クールRGBライト
  2. ESP8266開発アプリケーションピースの旅②OLEDディスプレイ画面の天気
  3. ESP8266開発アプリケーションピース③ツアーLiteの車のWiFi

第四に、高度な作品

  1. ESP8266開発の旅高度な記事①コードの最適化 - ESP8266メモリ管理
  2. ESP8266開発の旅高度な記事がESP8266構成の場合のArduino IDEチャット②
  3. ESP8266開発の旅高度な記事は、ESP8266のFlashチャット③
  4. ESP8266開発の旅高度な記事④一般的な問題 - 問題を解決するための
  5. ESP8266開発の旅高度な記事⑤コード規格 - 美しいとして記事を書くように
  6. ESP8266開発の旅高度な記事⑥ESP固有のAPIの説明

1.はじめに

    前回の記事では楽しい事④OneNET MQTTサービスプラットフォーム-リモートコントロールLED(デバイスの自己登録)+アンドロイドアプリ制御、ブロガーは、完全なアプリケーションMQTT契約OneNetインテリジェントランプを提供しています。だから、ここブロガーの開発と展開を容易にするために、簡単に元のデザイン。

2.ソースコードをダウンロードしてください

  • 技術交流グループグループファイルのダウンロードをBloggerに移動します:
    ここに画像を挿入説明

3.ソースコード解析

3.1アプリケーション開発ツール

  • Androidのメーカー、公式認定ツール、独自の環境とAS Javaツールを設定し、ブロガーは、現在最新のバージョンに属します。

3.2コードの全体構造

  • ダウンロード元は、Androidメーカートップダウン導入した後、次の構造を参照してください:
    ここに画像を挿入説明
    ブロガーは便宜上ここに開発、3つの分離モジュールを:
  • app_common、そのような様々なツールとして一般に共通モジュール、(ツール印刷ログ時刻形式変換ツール)
    ここに画像を挿入説明
  • (後の準備金を拡大するために、ここで使用されていない)app_ormlib、データベースサービス
    ここに画像を挿入説明
  • パッケージベースアクティビティクラス、recyclerview、MVP、広く使用される設計フレームワークを含むapp_widget、UI用い、ベースアセンブリ、Iは
    ここに画像を挿入説明
  • アプリ:これは私たちの主な事業のコードです。
    ここに画像を挿入説明

3.3 MVP分析枠組み

  • MVPと呼ばれているものについては、ブロガーはここで話すことはありませんが、自分のBaiduのしてください。次のコードは、メインMVPのためのフレームワークを構成する
    ここに画像を挿入説明
    データの処理に焦点を当て:モデル
    ビュー:ページ表示に焦点
    プレゼンター:モデルとビューの間の関係を調整するために呼び出します
  • 次に、コードベースのビジネスMVPアーキテクチャを見てみましょう。
    ここに画像を挿入説明
    名前で、すばやく正確サービスに対応知ることができます。
  • MQTT設定ページ:OneNetConfigXXXX
  • メインページのリスト:MainXXXXX
  • アプリケーションのページで:AboutMeXXXX
  • XXXXXXX:ページを拡大

次に、我々は理解MVP作業を容易にするため、説明するページを選択します。

3.4メインコントロールメインページの解析

3.4.1 MVP契約

/**
 * mvp 主页面协议 presenter层
 */
public interface IMainContract {
    // model层
    interface IMainModel extends IBaseModel {
        void loadData(Context context, ICallBack<List<OneNetDeviceModel>> callBack);
        void updateDeviceDetail(Context context,OneNetDeviceModel model, ICallBack<String> callBack);
    }
    //view层
    interface IMainView extends IBaseView {
        void showLoading(String loadmsg);
        void dismissLoading(OnDismissCallbackListener callback);
        void refreshList(List<OneNetDeviceModel> list);
    }
}

3.4.2モデル層 - データ処理

  • 私たちは、主な関連するコードを懸念しています:
public class MainModel implements IMainContract.IMainModel {

    SimpleTask task;
    //获取设备列表
    @Override
    public void loadData(Context context, final ICallBack<List<OneNetDeviceModel>> callBack) {

        if(task != null && task.getStatus()== AsyncTask.Status.RUNNING){
            task.cancel(true);
        }
        task = new SimpleTask() {

            GetOneNetDeviceListEntity entity;

            @Override
            protected void onPreExecute() {
                entity = new GetOneNetDeviceListEntity();
            }

            @Override
            protected Object doInBackground(String... strings) {
                return entity.request();
            }

            @Override
            protected void onPostExecute(Object o) {
                String result = (String) o;
                if("200".equals(result)){
                   if(entity.data != null && entity.data.devices.size()!=0) {
                       List<OneNetDeviceModel> list = new ArrayList<>();
                       for(OneNetDeviceModel model:entity.data.devices){
                           if(!model.getId().equals(PreferenceUtil.getInstance().getDeviceId())){
                               list.add(model);
                           }
                       }

                       callBack.onSuccess(list);
                   }
                }else {
                    callBack.onFaild(result);
                }
            }
        };
        task.startTask();
    }

//更新设备信息
    @Override
    public void updateDeviceDetail(Context context, final OneNetDeviceModel model, final ICallBack<String> callBack) {
        if(task != null && task.getStatus()== AsyncTask.Status.RUNNING){
            task.cancel(true);
        }
        task = new SimpleTask() {

            UpdateOneNetDeviceDetailEntity entity;

            @Override
            protected void onPreExecute() {
                entity = new UpdateOneNetDeviceDetailEntity(model.getId());
            }

            @Override
            protected Object doInBackground(String... strings) {
                return entity.request(model);
            }

            @Override
            protected void onPostExecute(Object o) {
                String result = (String) o;
                if("200".equals(result)){
                    callBack.onSuccess("更新成功");
                }else {
                    callBack.onFaild(result);
                }
            }
        };
        task.startTask();
    }
}

3.4.3ビューレイヤ処理-UI

/**
 * @author wty
 * @Description 控制页面
 **/
public class MainActivity extends BaseActivity<MainPresenter> implements IMainContract.IMainView {

    @Bind(R.id.listview)
    XRecyclerView listview;

    DeviceListAdapter adapter;


    public static void startActivity(Activity activity) {
        Intent intent = new Intent(activity, MainActivity.class);
        activity.startActivity(intent);
    }

    @Override
    public MainPresenter getPresenter() {
        return new MainPresenter();
    }

    @Override
    public void onInitView(Bundle savedInstanceState) {
        /**
         * 第一个参数是服务器地址
         * 第二个参数是用户名
         * 第三个参数是密码
         * 第四个参数是客户端ID
         * 第五个参数是主题
         **/
        MqttManager
                .getInstance()
                .creatConnect(
                        AppConstant.RequestUrl.ONENET_MQTT,
                        PreferenceUtil.getInstance().getProductId(),
                        PreferenceUtil.getInstance().getApiKey(),
                        PreferenceUtil.getInstance().getDeviceId(),
                        "esp8266");

        getDefaultNavigation().setTitle("OneNet智能灯");
        getDefaultNavigation().getLeftButton().setButton("配置", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                OneNetMqttConfigActivity.startActivity(MainActivity.this);
                finish();
            }
        });
        getDefaultNavigation().getRightButton().setButton("关于应用", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AboutActivity.startActivity(MainActivity.this);
            }
        });

        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        listview.setLayoutManager(layoutManager);
        listview.setPullRefreshEnabled(false);
        listview.setLoadingMoreEnabled(false);
        List<OneNetDeviceModel> data = new ArrayList<>();
        adapter = new DeviceListAdapter(this,data,mPresenter);
        listview.setAdapter(adapter);

        mPresenter.refreshList(MainActivity.this);
    }

    @Override
    protected boolean isEnableStatusBar() {
        return true;
    }

    @Override
    protected List<String> validate() {
        List<String> list = super.validate();
        return list;
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        MqttManager.release();
    }

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

    @Override
    public void refreshList(List<OneNetDeviceModel> list) {
        adapter.retsetData(list);
    }
}

3.4.4プレゼンター層 - 中間層コーディネーション

/**
 * 主页面 presenter
 */
public class MainPresenter extends BasePresenter<IMainContract.IMainView> {

    private IMainContract.IMainModel mMainModel;

    public MainPresenter(){
        mMainModel = new MainModel();
    }

    public void refreshList(Context context){
        mView.showLoading("获取设备列表中...");

        mMainModel.loadData(context, new ICallBack<List<OneNetDeviceModel>>() {
            @Override
            public void onSuccess(final List<OneNetDeviceModel> list) {
                mView.refreshList(list);
                mView.dismissLoading();
            }

            @Override
            public void onFaild(String msg) {
                mView.dismissLoading(new OnDismissCallbackListener(msg, SweetAlertDialog.ERROR_TYPE));
            }
        });
    }

    public void updateDeviceDetail(final Context context, OneNetDeviceModel model){
        mView.showLoading("更新设备信息中...");

        mMainModel.updateDeviceDetail(context,model, new ICallBack<String>() {
            @Override
            public void onSuccess(final String result) {
                mView.dismissLoading();
                refreshList(context);
            }

            @Override
            public void onFaild(String msg) {
                mView.dismissLoading(new OnDismissCallbackListener(msg, SweetAlertDialog.ERROR_TYPE));
            }
        });
    }
}

基本的には、各ページには、それを分析するためにMVPのデザインのアイデアに基づいて非常に簡単です。

4.まとめ

要するに、専門家はスプレーしないでください。

おすすめ

転載: www.cnblogs.com/danpianjicainiao/p/11756791.html