Пожалуйста, дайте мне знать, где мне нужно написать «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;
}
}
Чтобы использовать 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);
Надеюсь это поможет.-
Итак, я искал, как реализовать эту вещь, т.е. функцию «OnResponse», как вы правильно предложили, в отдельном классе С# (а затем вызвать ее в классе активности)?
Правильно @humbledog. Вы можете реализовать OnResponse в другом классе и передать экземпляр этого класса при создании объекта JsonObjectRequest.
из этого внешнего класса я не могу вызывать как «JsonObjectRequest request = new JsonObjectRequest (метод, URL, @объект, это, это);». У вас есть предложение?
Мое неправильное форматирование, это будет "@" вместо "@" в комментарии выше. "@" это код HTML для по курсу, который не был отражен выше.
Это помогло мне решить проблему.
это работает до некоторой степени. Однако мой класс запроса С# написан в другом файле, и у меня нет полномочий изменять архитектуру.