【问题标题】:C# Volley how to get OnResponse?C# Volley 如何获得 OnResponse?
【发布时间】:2019-05-27 18:52:17
【问题描述】:

请让我知道我需要在哪里使用 Volley 在 C# 中编写“OnResponse”。

我将代码从 Android Studio 转换为使用 Volley 库的 c#。然后我在 Xamarin 中打开代码发送请求并接收响应。我添加了 Volley Nuget 包 (Xamarin.Bindings.Volley)。 以下是转换后的 C# 的代码 sn-p。但是,该代码无法识别“OnResponse”功能。我需要一个使用 Volley 在 c# 中成功实现“OnResponse”的示例。

    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;
        }

    }

【问题讨论】:

    标签: c# visual-studio xamarin xamarin.android android-volley


    【解决方案1】:

    要在您的代码中使用 Volley,您需要进行一些小的更改。

    首先,我建议您将正在使用的 Nugget 包从 Xamarin.Bindings.Volley 更改为 Xamarin.Android.Volley。您当前使用的那个已经过时(2017 年),而我建议的那个不仅是最新的,而且由 Xamarin 维护,所以它很可能会一直更新。

    在您的代码正在执行的Activity 中,您需要使其实现两个属于Volley 命名空间的接口,它们是:Response.IListenerResponse.IErrorListener

    应该是这样的:

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

    这将需要您通过在Activity类中添加两个方法:public void OnErrorResponse(VolleyError p0)public void OnResponse(Object p0) 来完成这些接口的实现

    OnResponse 方法中是您要添加逻辑的地方。

    在使用之前,您需要将OnResponse 中收到的Object 转换为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);
    

    希望这会有所帮助。-

    【讨论】:

    • 这在某种程度上是有效的。但是,我的 c# Request 类写在不同的文件中,我无权更改架构。
    • 所以,我一直在寻找如何实现这个东西,即您正确建议的函数“OnResponse”在一个单独的 c# 类中(然后在活动类中调用它)?
    • 没错@humbledog。您可以在另一个类上实现 OnResponse,并在创建 JsonObjectRequest 对象时传入该类的实例
    • 从那个外部类,我不能像“JsonObjectRequest request = new JsonObjectRequest(method, url, @object, this, this);”那样调用。你有什么建议吗?
    • 它帮助我解决了问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多