Attempt to invoke virtual method 'void com.gizwits.gizwifisdk.api.GizWifiDevice

软硬兼施虾米 2017-09-25 10:02:14

public class GosScheduleListActivity extends GosControlModuleBaseActivity implements OnClickListener {

private SlideListView slideListview;

private GosScheduleListAdapter mAdapter;

private GosScheduleSiteTool siteTool;

private DbUtils dbUtils;

private TextView tvNoRule;

private View diverTop;

private View diverBottom;

private ImageView ivAdd;

private ImageView ivBack;
private Toast mToast;
public enum handler_key {

/** 在云端删除 */
DELETE,

/** 在云端设置 */
SET,

/** 在云端设置 失败 */
FAIL,
}

@SuppressLint("HandlerLeak")
Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
handler_key key = handler_key.values()[msg.what];
switch (key) {
case DELETE:
upDateListViewUI();
break;

case SET:
upDateListViewUI();
MyToast(R.string.site_schedule_success);
break;
case FAIL:
upDateListViewUI();
MyToast(R.string.site_schedule_fail);
break;
default:
break;
}
};
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_comd_schedule_list);
initDate();
initView();
initEvent();
}

@Override
protected void onResume() {
super.onResume();
reflashDateOnSiteOrLocal();
}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.iv_apm_add:
// 点击添加按钮进入编辑界面
Intent intent = new Intent(this, GosScheduleEditDateAcitivty.class);
intent.putExtra("position", -1);
startActivity(intent);
break;
case R.id.iv_schedule_back:
finish();
break;
default:
break;
}

}

//////////////////////////////////////////////////////////////
////////////////////////////////////////////
// 注意这里的代码要移动到gosapplication中
private void initDate() {
siteTool = new GosScheduleSiteTool(this, mDevice, spf.getString("Token", ""));
DbUtils.DaoConfig config = new DaoConfig(this);
config.setDbName("gizwits");
config.setDbVersion(1); // db版本
dbUtils = DbUtils.create(config);// db还有其他的一些构造方法,比如含有更新表版本的监听器的DbUtils
try {
// 创建一张表
dbUtils.createTableIfNotExist(GosScheduleData.class);
} catch (DbException e) {
e.printStackTrace();
}
GosScheduleData.setSiteTool(siteTool);
GosScheduleData.setDbUtils(dbUtils);
GosScheduleData.setContext(getApplicationContext());
setProgressDialog(getResources().getString(R.string.site_setting_time), true, false);
}

private void initEvent() {
ivAdd.setOnClickListener(this);
ivBack.setOnClickListener(this);
}

private void initView() {
slideListview = (SlideListView) findViewById(R.id.slide_listView);
slideListview.initSlideMode(SlideListView.MOD_RIGHT);

tvNoRule = (TextView) findViewById(R.id.tv_no_rule);
diverTop = (View) findViewById(R.id.vw_list_top_divider);
diverBottom = (View) findViewById(R.id.vw_list_bottom_divider);
ivAdd = (ImageView) findViewById(R.id.iv_apm_add);
ivBack = (ImageView) findViewById(R.id.iv_schedule_back);
}

private void UpDataUI() {
if (scheduleDates.size() > 0) {
tvNoRule.setVisibility(View.GONE);
slideListview.setVisibility(View.VISIBLE);
diverTop.setVisibility(View.VISIBLE);
diverBottom.setVisibility(View.VISIBLE);
} else {
tvNoRule.setVisibility(View.VISIBLE);
slideListview.setVisibility(View.GONE);
diverTop.setVisibility(View.GONE);
diverBottom.setVisibility(View.GONE);
}
mAdapter = new GosScheduleListAdapter(scheduleDates, this, tbListener, deleListener);
slideListview.setAdapter(mAdapter);
slideListview.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// 点击栏目进入编辑
Intent intent = new Intent(GosScheduleListActivity.this, GosScheduleEditDateAcitivty.class);
intent.putExtra("position", position);
startActivity(intent);
}
});
}

// 用户点击删除按钮
private DeleteButtonClickListener deleListener = new DeleteButtonClickListener() {

@Override
public void onclick(View v) {

final int positon = (Integer) v.getTag();
final GosScheduleData tempDate = scheduleDates.get(positon);
// 删除时候先判断该栏目是否已经在云端删除,如果已经在云端删除,则直接删除数据库
if (tempDate.isDeleteOnsite()) {
deleInDateBaseAndUpdateUI(positon, tempDate);
} else {
// 在云端存在,则同时删除云端与数据库
siteTool.deleteTimeOnSite(tempDate.getRuleID(), new OnResponListener() {

@Override
public void OnRespon(int result, String arg0) {
if (result == 0) {
deleInDateBaseAndUpdateUI(positon, tempDate);
}

}
});
}

}

private void deleInDateBaseAndUpdateUI(final int positon, final GosScheduleData tempDate) {
// 删除数据库
try {
dbUtils.delete(tempDate);
} catch (DbException e) {
e.printStackTrace();
}
// 删除列表
scheduleDates.remove(positon);
upDateListViewUI();
slideListview.slideBack();
}

};

// 用户点击关闭按钮
private ToggleButtonClickListener tbListener = new ToggleButtonClickListener() {

@Override
public void onclick(View v) {

final GosScheduleData tempDate = scheduleDates.get((Integer) v.getTag());

if (v.isSelected()) {
// 打开状态变关闭
deleRuleOnSite(tempDate);

} else {
// 关闭状态变打开
setRuleOnSite(tempDate);
}

}

};

private void reflashDateOnSiteOrLocal() {

// 该用户是否第一次进入该页面,第一次进入则将其数据写入本地
if (spf.getBoolean("isFisrstLoad" + spf.getString("Uid", ""), true)) {
// 显示等待栏
setProgressDialog(getResources().getString(R.string.reflashing_data), true, false);
progressDialog.show();

siteTool.getTimeOnSite(new OnResponseGetDeviceDate() {
@Override
public void onReceviceDate(List<ConcurrentHashMap<String, Object>> dataList) {
progressDialog.cancel();
if (dataList != null) {
spf.edit().putBoolean("isFisrstLoad" + spf.getString("Uid", ""), false).commit();
writeToLocalDatabase(dataList);
getDateFromDateBaseAndInitDate();
UpDataUI();
} else {
MyToast(R.string.updata_fail);
finish();
}
}
});
} else {
// 从本地数据库获取数据并赋值给存储的列表scheduleDates
getDateFromDateBaseAndInitDate();
}


// 更新ui
UpDataUI();
}

/**
* Description:点击关闭按钮,在云端删除规则
*
* @param tempDate
*/
private void deleRuleOnSite(GosScheduleData tempDate) {

progressDialog.show();

tempDate.deleteOnSite(handler);
}

/**
* Description:点击打开按钮,在云端创建规则
*
* @param scheduleData
*/
protected void setRuleOnSite(GosScheduleData scheduleData) {

progressDialog.show();

// 先判断有没有重复周数
if (scheduleData.getRepeat().equals("none")) {
// 没有重复周数,当前时间晚于数据库记录时间,即数据库时间已经无效,需要设置为明天
if (scheduleData.isLocalTimeLaterThanSiteTime()) {
if (scheduleData.isTvTimeLaterThanLocalTime()) {
// 当前栏显示时间是否比当前的时间晚,是的话设置为今天,这个判断是防止多天后更改定时预约出错
scheduleData.setDateTimeToToday(scheduleData.getTvTime());
} else {
scheduleData.setDateTimeToTomorrow(scheduleData.getTvTime());
}
} else {
// 当前时间早于数据库记录时间,即数据库时间已经有效,可以直接设置
}
}
scheduleData.setOnSite(handler);
}

private void getDateFromDateBaseAndInitDate() {
String uid = spf.getString("Uid", "");
String did = mDevice.getDid();
try {
scheduleDates.clear();
scheduleDates = dbUtils.findAll(
Selector.from(GosScheduleData.class).where("uid", "=", uid).and(WhereBuilder.b("did", "=", did)));
} catch (DbException e) {
e.printStackTrace();
}
for (GosScheduleData i : scheduleDates) {
i.setViewContent();
}
}

/**
* Description:将云端信息写入到本地数据库
*
* @param dataList
*/
@SuppressWarnings("unchecked")
protected void writeToLocalDatabase(List<ConcurrentHashMap<String, Object>> dataList) {

String uid = spf.getString("Uid", "");

for (ConcurrentHashMap<String, Object> map : dataList) {
String date = (String) map.get("date");
String time = (String) map.get("time");
String repeat = (String) map.get("repeat");
String ruleID = (String) map.get("ruleID");
String did = (String) map.get("did");
ConcurrentHashMap<String, Object> dataMap = (ConcurrentHashMap<String, Object>) map.get("dataMap");
Boolean onOff = (Boolean) dataMap.get("Power_Switch");
GosScheduleData newDate = new GosScheduleData();
newDate.setUid(uid);
newDate.setDid(did);
newDate.setDate(date);
newDate.setTime(time);
newDate.setRepeat(repeat);
setUserPickRepeat(time, repeat, newDate);
newDate.setRuleID(ruleID);
newDate.setOnOff(onOff);
newDate.setDeleteOnsite(false);

try {
dbUtils.save(newDate);
} catch (DbException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}


}




代码如上,各位老铁,求解决之法
...全文
454 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
雨焰 2017-09-25
  • 打赏
  • 举报
回复
你的代码太长了,不过根据你的提示,你看看是不是某个变量是null

80,337

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧