我正在使用Xamarin Android应用程序,我有一个类,有很多方法可以与Web服务进行交互。这些方法中的每一个都应返回一些内容(true / false以确定数据库事务是否已完成或数据库中的某些其他数据)。例如,我有一个方法:
public bool AddNewUser(User user)
{
WebClient client = new WebClient();
Uri url = new Uri(web + "AddNewUser.php");
NameValueCollection parameters = new NameValueCollection();
bool result = false;
parameters.Add("FirstName", user.FirstName);
parameters.Add("LastName", user.LastName);
parameters.Add("Email", user.Email);
parameters.Add("MobileNumber", user.MobileNumber);
client.UploadValuesAsync(url, parameters);
client.UploadValuesCompleted += (object sender, UploadValuesCompletedEventArgs e) =>
{
if (Encoding.UTF8.GetString(e.Result) == "true")
{
result = true;
}
};
return result;
}
此方法将结果返回true或false(如果事务已完成或事务未完成)。
这是我的PHP文件:
<?php
require_once(dirname(__FILE__).'/Connection.php');
if(isset($_POST['FirstName']) && isset($_POST['LastName']) && isset($_POST['Email']) && isset($_POST['MobileNumber']))
{
$firstName = $_POST['FirstName'];
$lastName = $_POST['LastName'];
$email = $_POST['Email'];
$mobileNumber = $_POST['MobileNumber'];
$connection = new Connection();
$connection->GetConnection();
if(!$connection->conn)
{
echo 'Error: '.mysqli_connect_error();
}
else
{
$sql = 'INSERT INTO tb_user(name,lastname,mail,phone) VALUES ("'.$firstName.'","'.$lastName.'","'.$email.'","'.$mobileNumber.'")';
$result = mysqli_query($connection->conn,$sql);
if(!$result)
{
echo 'Error: '.mysqli_error($connection->conn);
}
else
{
echo true;
}
}
}
?>
但是应用程序崩溃时没有错误,也没有添加用户。现在,我想知道我做错了什么。
提前谢谢。
更新
UploadValuesCompletedEventArgs中的错误等于null。那么我的PHP文件出了什么问题?
更新2: 所以,我只使用了UploadValues而不是UploadValuesAsync,如下所示:
WebClient client = new WebClient();
Uri url = new Uri(web + "AddNewUser.php");
NameValueCollection parameters = new NameValueCollection();
bool result = false;
parameters.Add("FirstName", user.FirstName);
parameters.Add("LastName", user.LastName);
parameters.Add("Email", user.Email);
parameters.Add("MobileNumber",user.MobileNumber);
byte[] r = client.UploadValues(url,parameters);
if (Encoding.UTF8.GetString(r) == "true")
{
result = true;
}
return result;
在android设备日志记录中写入此错误:
致命的例外:主要 java.lang.RuntimeException:java.lang.reflect.InvocationTargetException