C# Volley, как получить OnResponse?

Пожалуйста, дайте мне знать, где мне нужно написать «OnResponse» на C#, используя Volley.

Я преобразовал код из студии Android в С#, который использует библиотеку Volley. Затем я открыл код в Xamarin для отправки запроса и получения ответа. Я добавил пакет Nuget Volley (Xamarin.Bindings.Volley). Ниже приведен фрагмент кода преобразованного кода C#. Однако код не распознает функцию «OnResponse». Мне нужен пример успешной реализации OnResponse в С# с использованием Volley.

    public void GetAndPostReqquest(string url, int requestedCode, JSONObject @object, IServerResponse jsonResponse)
    {
        int method = Request.equestMethodConsts.Get;
        switch (requestedCode)
        {
            case POST:
                method = Request.equestMethodConsts.Post;
                break;
            case PUT:
                method = Request.equestMethodConsts.Put;
                break;

        }


        if (!IsInternetAvailable())
        {
            jsonResponse.RequestFinishedWithError(MContext.GetString(App8.Droid.Resource.String.internet_connection_is_not_available));
            return;
        }


        jsonResponse.RequestStarted();


        JsonObjectRequest request = new JsonObjectRequest(method, url, @object, Llistener, EerrorListener) { 

        private void OnResponse(JSONObject response)
        {
            IDictionary<string, string> headers = new Dictionary<string, string>();
            string credentials = UNAME + ":" + PWD;
            string auth = "Basic " + Convert.ToBase64String(credentials.ToCharArray(0, credentials.Length));
            headers["Authorization"] = auth;
            headers["Content-Type"] = "application/json; charset=utf-8";
            //return headers;
        }

    }
Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
608
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Чтобы использовать Volley в своем коде, вам нужно будет внести несколько небольших изменений.

Во-первых, я бы посоветовал вам изменить используемый вами пакет Nugget с Xamarin.Bindings.Volley на Xamarin.Android.Volley. Тот, который вы сейчас используете, устарел (2017), а тот, который я предлагаю, не только актуален, но и поддерживается Xamarin, поэтому есть вероятность, что он всегда будет обновляться.

В Activity, где выполняется ваш код, вам нужно будет реализовать два интерфейса, которые являются частью пространства имен Volley, а именно: Response.IListener и Response.IErrorListener

Это должно выглядеть так:

public class MainActivity : Activity, Response.IListener, Response.IErrorListener

Для этого вам потребуется завершить реализацию этих интерфейсов, добавив два метода: public void OnErrorResponse(VolleyError p0) и public void OnResponse(Object p0) в класс Деятельность.

В методе OnResponse вы добавите свою логику.

Вам нужно будет преобразовать Object, полученное в OnResponse, в объект JSONObject, прежде чем использовать его.

Позже определение Activity должно выглядеть так:

public class MainActivity : Activity, Response.IListener, Response.IErrorListener
{
    public void OnErrorResponse(VolleyError p0)
    {
    }

    public void OnResponse(Object p0)
    {
        if (p0 is JSONObject response)
        {
            // Do your logic here with response
        }
    }

   /......

}

Ваш запрос будет обновлен следующим образом:

JsonObjectRequest request = new JsonObjectRequest(method, url, @object, this, this);

Надеюсь это поможет.-

это работает до некоторой степени. Однако мой класс запроса С# написан в другом файле, и у меня нет полномочий изменять архитектуру.

humbledog 30.05.2019 08:00

Итак, я искал, как реализовать эту вещь, т.е. функцию «OnResponse», как вы правильно предложили, в отдельном классе С# (а затем вызвать ее в классе активности)?

humbledog 30.05.2019 08:10

Правильно @humbledog. Вы можете реализовать OnResponse в другом классе и передать экземпляр этого класса при создании объекта JsonObjectRequest.

pinedax 30.05.2019 08:21

из этого внешнего класса я не могу вызывать как «JsonObjectRequest request = new JsonObjectRequest (метод, URL, &#64;объект, это, это);». У вас есть предложение?

humbledog 30.05.2019 09:25

Мое неправильное форматирование, это будет "@" вместо "&#64;" в комментарии выше. "&#64;" это код HTML для по курсу, который не был отражен выше.

humbledog 30.05.2019 09:33

Это помогло мне решить проблему.

humbledog 31.05.2019 08:10

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