釣りを与えるよりも、人に魚を与える、目的は、特定のプロジェクトを開発するためにあなたを教えることが、学習能力を学ぶことではありません。私は多分、神がBogeの礎石大きな成長経路があり、あなたが必要と周りのお友達やクラスメートと共有したいと考えています。。。
QQ技術グループとの対話:ESP8266&32物事はスプレーしないで好きではない、グループ番号622 368 884を開発
まず、あなたはArduinoのベースの開発技術ESP8266を知りたい場合
まず、基本
第二に、ネットワークの記事
- 記事へのESP8266ネットワークの開発の旅①ESP8266のために素敵なArduinoのコア
- ESP8266開発ジャーニー記事②ESP8266ネットワークの動作モードとESP8266WiFiライブラリ
- 記事へのESP8266ネットワーク開発の旅③ソフトAP - ESP8266WiFiAPライブラリを使用します
- 駅④記事へのESP8266ネットワークの開発の旅 - ESP8266WiFiSTAライブラリを使用
- 記事へのESP8266ネットワークの開発の旅⑤スキャンのWiFi - 利用ESP8266WiFiScanライブラリー
- ライブラリの基礎ピース⑥ESP8266WiFiGeneric--にESP8266ネットワークの開発の旅
- 記事へのESP8266ネットワークの開発の旅⑦TCPサーバー&クライアントのTCP
- 記事へのESP8266ネットワークの開発の旅⑧SmartConfig--キー流通ネットワーク
- 記事へのESP8266ネットワークの開発の旅⑨のHttpClientは - ESP8266HTTPClientライブラリを使用します
- ESP8266開発ジャーニー記事⑩UDPネットワークサービス
- ネットワーク開発の記事ESP8266⑪WebServerのツアー - ESP8266WebServerライブラリを使用します
- ESP8266ネットワークの開発の旅⑫記事ドメインネームサービス--ESP8266mDNSライブラリー
- SPIFFS⑬記事へのESP8266ネットワークの開発の旅 - ESP8266フラッシュファイルシステム
- 記事へのESP8266ネットワーク開発の旅⑭ウェブ配信ネットワーク
- 記事へのESP8266ネットワークの開発の旅⑮真のドメインネームサービス--DNSServer
- ESP8266開発の旅⑯ワイヤレスネットワークの記事--OTA更新ファームウェアのアップデート
第三に、出願書類
第四に、高度な作品
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.まとめ
要するに、専門家はスプレーしないでください。