Эмулятор Android не может публиковать сообщения на локальном веб-сайте

Я пытаюсь создать приложение .net maui, которое может публиковать сообщения на веб-сайте, который я использую для размещения XAMPP/Apache. При использовании блока try catch единственное сообщение об ошибке, которое я получаю, — это сбой соединения, и даже проверка журналов ошибок в xampp показывает, что попытки подключения не было.

Я пробовал добавлять/изменять что-то в файлах .conf, а также менять IP-адрес в URL-адресе, но прогресс 0.

Ниже приведен код моего приложения .net maui.

using System;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;


namespace AppSiteTest;

public class ApiService
{
    private readonly HttpClient _httpClient;

    public ApiService()
    {
        _httpClient = new HttpClient();
    }
//post method used in second clicked event
    public async Task<string> SendPostRequestAsync(string url, object data)
    {
        var jsonData = JsonSerializer.Serialize(data);
        var content = new StringContent(jsonData, Encoding.UTF8, "application/json");

        var response = await _httpClient.PostAsync(url, content);

        if (response.IsSuccessStatusCode)
        {
            var responseString = await response.Content.ReadAsStringAsync();
            return responseString;
        }

        return null;
    }
}









public partial class MainPage : ContentPage
{
    private readonly ApiService _apiService;



    private int rowCount = 0;
    private int columnCount = 0;

    private string _photoPath;
    public string PhotoPath
    {
        get => _photoPath;
        set
        {
            _photoPath = value;
            OnPropertyChanged(nameof(PhotoPath));
        }
    }

    public MainPage()
    {
        InitializeComponent();
        BindingContext = this;
        photo_grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(100) });
        _apiService = new ApiService();
    }
//ignore this clicked event
    public async void Button_Clicked(object sender, EventArgs args)
    {
        if (MediaPicker.Default.IsCaptureSupported)
        {
            FileResult photo = await MediaPicker.Default.CapturePhotoAsync();

            if (photo != null)
            {
                // save the file into local storage
                string localFilePath = Path.Combine(FileSystem.CacheDirectory, photo.FileName);

                using Stream sourceStream = await photo.OpenReadAsync();
                using FileStream localFileStream = File.OpenWrite(localFilePath);

                await sourceStream.CopyToAsync(localFileStream);

                if (PhotoPath != null)
                {
                    photo_grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(75) });
                    columnCount++;

                    var gridPhoto = new Image
                    {
                        Source = PhotoPath,
                        BackgroundColor = Colors.AliceBlue,
                        HorizontalOptions = LayoutOptions.Center,
                        VerticalOptions = LayoutOptions.Center
                    };


                    photo_grid.Add(gridPhoto, columnCount, rowCount);

                }

                PhotoPath = localFilePath;
            }
        }

    }
//attempt to post begins
    public async void btn_Post_Clicked(object sender, EventArgs args)
    {
        upload_status.Text = "Trying to connect";
        var url = "http://10.0.2.2/GuppyTown_CISP316/php/submit.php";
        var data = new { fname = "John", lname = "Smith", email = "[email protected]", phone = "000-000-0000", tip = "From .net Maui" };
        upload_status.Text = "data and url loaded";
        try
        {
            var response = await _apiService.SendPostRequestAsync(url, data);
            upload_status.Text = response ?? "No response from server";
        }
        catch (HttpRequestException httpEx)
        {
            upload_status.Text = $"Request error: {httpEx.Message} {url}";
        }
        catch (Exception e)
        {
            upload_status.Text = $"General error: {e.Message}";
        }
    }


}




вы пытались подключиться к URL-адресу Chrome в эмуляторе?

Jason 12.07.2024 02:09

Я успешно подключился к веб-сайту из эмулятора, используя как 10.0.2.2, так и локальный IP-адрес моего компьютера.

Habibi 12.07.2024 02:28

Верно ли, что вы имеете в виду следующее: когда вы запускаете систему (на основе Мауи) на своем смартфоне, она выходит из строя?

Ken Lee 12.07.2024 03:09

Я имел в виду, что моя проблема в том, что когда я запускаю свое приложение (на основе Maui) и активирую метод щелчка btn_Post_Clicked, оно должно публиковать данные на моем сайте и добавлять их в базу данных, но это не так. Я могу публиковать сообщения со своего веб-сайта на своем php, но каждый раз, когда я пытаюсь опубликовать сообщение из приложения на основе Мауи, он просто говорит, что соединение не удалось.

Habibi 12.07.2024 03:14

Android также требует подключения https, если вы явно не разрешите это.

Jason 12.07.2024 04:10

Это проблема с C#, с PHP, с самим HTTP, с XAMPP?

Nico Haase 12.07.2024 10:14

@Хабиби, ты тестируешь это на реальном устройстве?

H.A.H. 12.07.2024 12:20

@KenLee Во время тестирования я решил все, от брандмауэра до антивируса, но безрезультатно.

Habibi 13.07.2024 04:27

@Джейсон Можете ли вы объяснить мне, что это значит, поскольку я хорошо знаю .net maui и android в целом

Habibi 13.07.2024 04:27

@NicoHaase Я не совсем уверен, мне кажется, это проблема с http, поскольку я не могу ни подключиться, ни найти источник проблемы.

Habibi 13.07.2024 04:27

@Х.А.Х. нет, я использую Android Studio в качестве эмулятора, но я постараюсь получить реальное устройство для тестирования

Habibi 13.07.2024 04:27
google.com/…
Jason 13.07.2024 05:11

@Джейсон, это сработало отлично, и теперь мое приложение может публиковать сообщения! На данный момент я добавил заполнитель для ответа, но не могли бы вы добавить ответ, чтобы я мог принять ваш?

Habibi 13.07.2024 06:24
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
13
84
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не знаю, как отметить ответ, но Джейсон помог мне, поскольку в итоге мне пришлось добавить (UsesClearTextTraffic = True) в файл MainApplication.cs, найденный в разделе «Платформы»> «Android», пока я занимаюсь отладкой и тестированием. Спасибо вам всем!

Другие вопросы по теме