我有以下代码:
protected void onCreate(Bundle savedInstanceState) {
RecyclerView recyclerView;
DeviceAdapter deviceAdapter;
List<Device> deviceList;
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Context context = this;
g.IP = cf.getIP(this);
g.subNet = g.IP.substring(0, g.IP.lastIndexOf(".") + 1);
deviceList = new ArrayList<>();
recyclerView = findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
for(int i = 1; i < 256; i++) {
if(cf.isUp(g.subNet + i, 80)) {
deviceList.add(new Device(g.subNet + i, "PAUSED", "N/A"));
}
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
deviceAdapter = new DeviceAdapter(context, deviceList);
recyclerView.setAdapter(deviceAdapter);
}
}.execute();
}
检查主机是否在线,如果其端口80处于打开状态,则在扫描结束时将其全部添加到RecyclerView
。
我想知道如何添加:
deviceAdapter = new DeviceAdapter(context, deviceList);
recyclerView.setAdapter(deviceAdapter);
到doInBackground()
if语句,如下所示:
@Override
protected Void doInBackground(Void... params) {
for(int i = 1; i < 256; i++) {
if(cf.isUp(g.subNet + i, 80)) {
deviceList.add(new Device(g.subNet + i, "UP", "OPEN"));
deviceAdapter = new DeviceAdapter(context, deviceList);
recyclerView.setAdapter(deviceAdapter);
}
}
return null;
}
但没有让我的应用程序崩溃,以便RecyclerView
在新项目添加到deviceList<>
时立即更新,而不是在任务完成时更新。
答案 0 :(得分:0)
您的应用程序崩溃,因为只有主线程可以处理<?php
session_start();
/* Attempt MySQL server connection. Assuming you are running MySQL
server with default setting (user 'root' with no password) */
$link = mysqli_connect("localhost", "root", "root") or die(mysqli_error($db));
mysqli_select_db($link, "keepers")
or die(mysqli_error($link));
// Check connection
if($link === false)
{
die("ERROR: Could not connect. " . mysqli_connect_error());
}
// Escape user inputs for security
if (isset($_POST['submit']))
{
$name = mysqli_real_escape_string($link, $_REQUEST['keepername']);
$password = mysqli_real_escape_string($link, $_REQUEST['password']);
$password2 = mysqli_real_escape_string($link, $_REQUEST['password2']);
$email = mysqli_real_escape_string($link, $_REQUEST['accountemail']);
$shop = mysqli_real_escape_string($link, $_REQUEST['shopname']);
$area = mysqli_real_escape_string($link, $_REQUEST['area']);
$address = mysqli_real_escape_string($link, $_REQUEST['address']);
$town = mysqli_real_escape_string($link, $_REQUEST['town']);
$postcode = mysqli_real_escape_string($link, $_REQUEST['postcode']);
$landline = mysqli_real_escape_string($link, $_REQUEST['landline']);
$mobile = mysqli_real_escape_string($link, $_REQUEST['mobile']);
$shopemail = mysqli_real_escape_string($link, $_REQUEST['shopemail']);
$description = mysqli_real_escape_string($link, $_REQUEST['description']);
//Error Handlers
//Check for empty fields
if (empty($name) || empty($password) || empty($email) || empty($shop) ||
empty($area) || empty($address) || empty($town) || empty($postcode) ||
empty($shopemail) || empty($description))
{
header("Location: keeperregister.php?signup=empty");
exit();
}
else
{
if ($password != $password2)
{
header("Location: keeperregister.php?signup=passwordnotmatch");
exit();
}
else
{
if (empty($landline) && empty($mobile))
{
header("Location: keeperregister.php?signup=bothnumbersnotentered");
exit();
}
else
{
$sql = "SELECT * FROM keepers WHERE keeper_email = '$email'";
$results = mysqli_query($link, $sql) or die (mysqli_error($link));
$resultCheck = mysqli_num_rows($results);
if ($resultCheck > 0)
{
header("Location: keeperregister.php?signup=usertaken");
exit();
}
else
{
$hashedPwd = password_hash($password, PASSWORD_DEFAULT);
//Insert the user into the database
$sqlinsert = "INSERT INTO keepers VALUES ('NULL','$name', '$hashedPwd', '$email', '$shop', '$area' ,'$address' ,'$town' ,'$postcode' ,'$landline' ,'$mobile' ,'$shopemail', '$description')";
if(mysqli_query($link, $sqlinsert))
{
header("Location: registerlogin.php?");
exit();
}
else
{
echo "ERROR: Could not able to execute $sqlinsert. " . mysqli_error($link);
}
}
}
}
}
// close connection
mysqli_close($link);
}
else
{
header("Location: keeperregister.php");
exit();
}
等UI元素。所以你需要做的是创建一个监听器,只要你<?php
session_start();
if (isset($_POST['submit']))
{
/* Attempt MySQL server connection. Assuming you are running MySQL
server with default setting (user 'root' with no password) */
$link = mysqli_connect("localhost", "root", "root") or die(mysqli_error($db));
mysqli_select_db($link, "keepers")
or die(mysqli_error($link));
// Check connection
if($link === false)
{
die("ERROR: Could not connect. " . mysqli_connect_error());
}
$name = mysqli_real_escape_string($_POST['keepername']);
//$password = mysqli_real_escape_string($link, $_REQUEST['password']);
$sql = "SELECT * FROM keepers WHERE keeper_name = '$name'";
$result = mysqli_query($link, $sql);
$resultCheck = mysqli_num_rows($result);
if ($resultCheck < 1)
{
header("Location: keeperlogin.php?login=error");
exit();
}
else
{
if ($row = mysqli_fetch_assoc($result))
{
//Log in the user here
$_SESSION['u_id'] = $row['ID'];
$_SESSION['u_name'] = $row['keeper_name'];
$_SESSION['u_keeperemail'] = $row['keeper_email'];
$_SESSION['u_shopname'] = $row['shop_name'];
$_SESSION['u_area'] = $row['area'];
$_SESSION['u_address'] = $row['address'];
$_SESSION['u_town'] = $row['town/city'];
$_SESSION['u_postcode'] = $row['postcode'];
$_SESSION['u_landline'] = $row['phone number'];
$_SESSION['u_mobile'] = $row['mobile number'];
$_SESSION['u_shopemail'] = $row['shop_email'];
$_SESSION['u_produce'] = $row['produce'];
header("Location: accountmanagement.php?login=success");
exit();
}
else
{
header("Location: keeperlogin.php?login=error");
exit();
}
}
}
?>
找到一个新设备就会被调用。
示例:
RecyclerView
然后,在RecyclerView所在的Activity或Fragment中,您将实现此侦听器接口,例如:
AsyncTask
添加新添加的设备后,不要忘记在适配器中调用public interface OnDeviceFoundListener {
void onDeviceFound(Device device);
}
@Override
protected void doInBackground(Void... params) {
for (int i = 1; i < 256; i++) {
if (cf.isUp(g.subNet + 1, 80)) {
listener.onDeviceFound(new Device(g.subNet + 1, "UP", "OPEN"));
}
}
}
方法。