Xamarin System.NullReferenceException:当我尝试使用 Api Rest 时出现“对象引用未设置为对象的实例”。

Xamarin System.NullReferenceException: 'Object reference not set to an instance of an object.' appears when I try to use Api Rest

提问人:JorgeTP 提问时间:5/18/2022 最后编辑:JorgeTP 更新时间:5/20/2022 访问量:1815

问:

我不明白为什么当我尝试登录时,程序返回System.NullReferenceException,当我执行检查以防止输入的值为null时

模型如下:

using Newtonsoft.Json;

namespace StockingApp.Models
{
public class LoginModel
{
    [JsonProperty("email")]
    public string Email { get; set; }

    [JsonProperty("password")]
    public string Password { get; set; }
  }
}

以下是我用于登录的代码:

private async void loginButton_Clicked(object sender, EventArgs e)
    {
        LoginModel log = new LoginModel
        {
            Email = txtEmail.Text,
            Password = txtPassword.Text
        };

        if (txtEmail.Text != null | txtPassword.Text != null)
        {
            Uri RequestUri = new Uri("The url of the Api");

            var client = new HttpClient();
            var json = JsonConvert.SerializeObject(log);
            var contentJson = new StringContent(json, Encoding.UTF8, "application/json");
            //this is the line that causes the exception
            var response = await client.PostAsync(RequestUri, contentJson);

            if (response.IsSuccessStatusCode)
            {
                await DisplayAlert("Iniciar Sesión", "El inicio de sesión se realizó correctamente", "Ok");
            }
            else
            {
                await DisplayAlert("Error", "Los datos introducidos son incorrectos", "Ok");
            }
        }
        else
        {
            await DisplayAlert("Error", "Faltan datos por introducir", "Ok");
        }
    }

这是导致异常的行,我不明白为什么响应为空

var response = await client.PostAsync(RequestUri, contentJson);

这是 Xaml 和 Xaml 的外观:它的外观

<ContentPage.Content>
    <StackLayout Spacing="5" Padding="10" VerticalOptions="Center">
    <Entry x:Name="txtEmail" Placeholder="{translator:Translate prompt_email}" Style="{StaticResource entryStyles}"/>
    <Entry x:Name="txtPassword" Placeholder="{translator:Translate prompt_password}" Style="{StaticResource entryStyles}" IsPassword="True"/>
    <Button x:Name="loginButton" Text="{translator:Translate title_activity_login}" Style="{StaticResource buttonStyles}" Clicked="loginButton_Clicked"/>
    <Label  Text="{translator:Translate tit_contacto}" HorizontalTextAlignment="Center"/>
    <Label x:Name="link" Margin="20" HorizontalOptions="Center">
        <Label.FormattedText>
            <FormattedString>
                <Span Text="www.atecresa.com"  TextColor="GreenYellow" TextDecorations="Underline">
                    <Span.GestureRecognizers>
                        <TapGestureRecognizer Command="{Binding TapCommand}"
                                      CommandParameter="https://atecresa.com" NumberOfTapsRequired="1"/>
                    </Span.GestureRecognizers>
                </Span>
            </FormattedString>
        </Label.FormattedText>
    </Label>
</StackLayout>
</ContentPage.Content>

这是登录的招摇:api 的 Swagger

我对 Postman 进行了检查,并且 api 工作正常: Postman 检查

API REST Xamarin Xamarin.Forms NullReferenceException

评论

0赞 Jason 5/18/2022
请不要将代码或错误作为图像发布。花点时间在帖子正文中发布格式正确的相关代码
0赞 JorgeTP 5/18/2022
@Jason 好吧,我改一下
0赞 Jason 5/18/2022
伟大!现在,哪条特定线路导致了异常?堆栈跟踪应显示行号,或者你可以单步执行调试器中的代码以找到它。
0赞 JorgeTP 5/18/2022
@Jason我刚刚编辑了问题以指定导致异常的行
1赞 Jason 5/18/2022
该行上的任何内容似乎都不能为 null - 堆栈跟踪显示什么?实际异常是否发生在该方法中?

答:

1赞 Kenny Lim 5/19/2022 #1

也许试试这个

if (txtEmail.Text != null && txtPassword.Text != null)
2赞 Samir El-Kharrat 5/20/2022 #2

我有一个类似的错误,我只是将 url 的 http 更改为 https。我认为这就是问题所在。