【发布时间】:2015-05-18 16:41:43
【问题描述】:
我正在制作一个应用作为项目的一部分,该项目连接到网络上的设备(特定设备)。单击调用AsyncTask 的按钮后,该按钮消失且不可单击。
我正在使用这个库中的 ButtonRectangle 类:https://github.com/navasmdc/MaterialDesignLibrary
相关代码:
// ...
int numAdded = addResultsToDatabase(items);
if(!deviceInitTask.isCancelled() && numAdded > 0) {
String devices = "device";
if(numAdded > 1) {
devices = "devices";
}
Toast.makeText(NewLocalDeviceScanResultsActivity.this,
"Added " + NumberToWords.convert(numAdded) + " " + devices,
Toast.LENGTH_LONG).show();
// go to device list activity
Intent intent = new Intent(NewLocalDeviceScanResultsActivity.this, DeviceListActivity.class);
startActivity(intent);
finish();
}
else {
// button disappears
}
// ...
以上代码位于ButtonRectangle 对象上的匿名OnClickListener 内。 addResultsToDatabase方法如下:
// ...
List<String[]> devices = new ArrayList<>();
for(int i = 0; i < items.size(); i++) {
ScanResultsRecyclerViewAdapter.ListItem item = items.get(i);
if(item.isSelected()) {
String[] device = new String[4];
device[0] = item.getDescription().trim();
device[1] = item.getHost().trim();
device[2] = item.getLoginUsername().trim();
device[3] = item.getLoginPassword().trim();
devices.add(device);
}
}
// try connecting and get results
deviceInitTask = new LocalDeviceInitTask(this, devices);
deviceInitTask.execute();
// ...
DeviceInitTask 只是尝试连接到设备,使用提供的用户名和密码登录,如果成功则返回身份验证令牌和过期。如果无法连接,则从任务中调用 this.cancel(true) 并显示 Toast。
请注意,我正在对此进行测试,以便登录失败,所以numAdded == 0。
我不知道是什么原因造成的。上面的代码运行后,按钮仍然有View.VISIBLE。 button.invalidate() 不起作用。
到目前为止,唯一有效的方法显然是重新创建活动,但这并不理想,因为用户输入丢失了,这不是一个好的做法。
有什么建议吗?
=======================
编辑:所以现在不是为每个设备运行一个单独的AsyncTask,而是在一个任务中完成所有连接,结果由onPostExecute而不是task.get()处理。最终结果是一样的——按钮消失了。
=======================
更新:我在调试模式下单步执行了代码,发现在创建 DefaultHttpClient 对象 (org.apache.http.impl.client) 后按钮消失了。我要走进那个班级,看看我能不能弄清楚它到底发生在哪里。
【问题讨论】:
-
我认为您没有正确使用 AsyncTask。您需要使用 AsyncTask 在 onPostExecute 回调中获取您的登录详细信息
-
尝试实现您自己的自定义 AsyncTask,而不是从 get() 调用结果。在 doInBackground 中执行您的后台任务,并根据结果更改 onPostExecute 中按钮的可见性。
-
@hoomi,你真的很准确......我会试试看它是否有效。
-
@Kieran 你解决了吗?
-
@nahwarang,是的,现在刚刚完成重构并对其进行了测试,并且发生了完全相同的事情。尽管根本没有调用任何操作,但刚刚翻转的按钮消失了! (见编辑)
标签: java android android-asynctask android-button