执行一任务中Activity的解析
ESP8266App无线配置硬件连接网络的的解析.
源码连接地址,
请查看readme文件.
告诉自己每天认真的学习,充电!过好每一天.
我们执行异步任务的类是: EsptouchDemoActivity
new EsptouchAsyncTask3().execute(apSsid, apBssid, apPassword,
isSsidHiddenStr, taskResultCountStr); // 参数 apssid apbssid appassword no 1;
开始分析这个异步任务
参数说明,是哪个参数分别是在doInBackground中使用到的, 和设置进度条使用到的, 最后是在onPostExecuter中使用到的,是一个集合;
我们看看这个接口 : IEsptouchResult 里面有四个方法:第一个方法是 是否继续进行下一步 第二个方法是检查这个任务是不是用户自己关闭的; 第三个方法是: 获取设备的bssid 第四个方法是获取设备的 ip地址.
private class EsptouchAsyncTask3 extends AsyncTask<String, Void, List<IEsptouchResult>> {
private ProgressDialog mProgressDialog;
private IEsptouchTask mEsptouchTask;
private final Object mLock = new Object();
@Override
protected void onPreExecute() { // 准备工作
异步任务的第一个方法,其实就是展示对话框,直接不看,有一点就是有队task的是不是空的判断,非空直接打断
}
@Override // 异步任务的最后返回的结果 没什么可看的,最重要的在上面
protected void onPostExecute(List<IEsptouchResult> result) {
IEsptouchResult firstResult = result.get(0);
Log.d(TAG, "onPostExecute: ");
if (!firstResult.isCancelled()) {// isCancelled 表示是不是客户关闭的 这里不是客户关闭的
// int count = 0;
// final int maxDisplayCount = 5;
if (firstResult.isSuc()) {
try {
if(str_ssid_FLAG.equals(str_ssid)){ //
if(!str_pass_FLAG.equals(str_pass)){ // dubug不走
if(str_ssid.length()>0 && str_pass.length()>0 && index!=-1){
ssid_list.set(index, str_ssid);
pass_list.set(index, str_pass);
writeSSID(FAVOSSIDPATH);
writePASS(FAVOPASSPATH);
}
}
}else{
if(str_ssid.length()>0 && str_pass.length()>0){
ssid_list.add(str_ssid);
pass_list.add(str_pass);
writeSSID(FAVOSSIDPATH);
writePASS(FAVOPASSPATH);
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
new AlertDialog.Builder(EsptouchDemoActivity.this)
.setIcon(android.R.drawable.ic_dialog_info)
.setTitle("提示")
.setMessage("配置成功!")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.dismiss();
finish();
}
}).show();
} else {
str_ssid = null;
str_pass = null;
new AlertDialog.Builder(EsptouchDemoActivity.this)
.setIcon(android.R.drawable.ic_dialog_info)
.setTitle("提示")
.setMessage("配置失败,请重试!")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.dismiss();
}
}).show();
}
}
}
}
上面的是准备的方法和最后的返回的方法; 我们单独将 doInBackground 分出来设置一下子
@Override // 关键方法
protected List<IEsptouchResult> doInBackground(String... params) {
int taskResultCount = -1; // 初始化默认的值 最后赋值为1
synchronized (mLock) {
// 获取传递过来的参数
String apSsid = params[0]; // ssid
String apBssid = params[1]; // bssid
String apPassword = params[2]; // 密码
String isSsidHiddenStr = params[3]; // no
String taskResultCountStr = params[4]; // 1
boolean isSsidHidden = false;
if (isSsidHiddenStr.equals("YES")) { // 不会执行
isSsidHidden = true;
}
taskResultCount = Integer.parseInt(taskResultCountStr); //1 实质就是讲转化的string 转化为int 结果就是我们选择的1
mEsptouchTask = new EsptouchTask(apSsid, apBssid, apPassword, //传递参数
isSsidHidden, EsptouchDemoActivity.this);
mEsptouchTask.setEsptouchListener(myListener); // 这是参数类型 IEsptouchListener 这个接口里面只有一个方法就是添加 IEsptouchResult的方法;
}
List<IEsptouchResult> resultList = mEsptouchTask.executeForResults(taskResultCount); //
return resultList;
}
我们看到首先是将参数传递到EsptouchTask中:
public EsptouchTask(String apSsid, String apBssid, String apPassword,
boolean isSsidHidden, Context context) {
_mParameter = new EsptouchTaskParameter();
_mEsptouchTask = new __EsptouchTask(apSsid, apBssid, apPassword,
context, _mParameter, isSsidHidden);
}
EsptouchTaskParameter我们看过,里面定义了很多的常量和方法,不细看了
再一次将参数传递过去__EsptouchTask:
public __EsptouchTask(String apSsid, String apBss