如何从UploadValuesAsync获取结果 - WebClient C#

时间:2016-07-16 08:34:16

标签: c# php android web-services

我正在使用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

0 个答案:

没有答案