Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 截击如何回应?_C#_Visual Studio_Xamarin_Xamarin.android_Android Volley - Fatal编程技术网

C# 截击如何回应?

C# 截击如何回应?,c#,visual-studio,xamarin,xamarin.android,android-volley,C#,Visual Studio,Xamarin,Xamarin.android,Android Volley,请让我知道我需要在哪里用C#用截击写“OnResponse” 我将Android studio中的代码转换为c#,c使用凌空库。然后,我在Xamarin中打开了发送请求和接收响应的代码。 下面是转换后的C#的代码片段。但是,代码不识别“OnResponse”函数。我需要一个在c#中使用Volley成功实现“OnResponse”的示例 public void GetAndPostReqquest(string url, int requestedCode, JSONObject @obj

请让我知道我需要在哪里用C#用截击写“OnResponse”

我将Android studio中的代码转换为c#,c使用凌空库。然后,我在Xamarin中打开了发送请求和接收响应的代码。 下面是转换后的C#的代码片段。但是,代码不识别“OnResponse”函数。我需要一个在c#中使用Volley成功实现“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;
        }

    }
public void getandpostrequest(字符串url、int-requestedCode、JSONObject@object、iserversponse-jsonResponse)
{
int method=Request.equestMethodConsts.Get;
开关(请求代码)
{
个案职位:
方法=Request.equestMethodConsts.Post;
打破
案件付诸表决:
方法=Request.equestMethodConsts.Put;
打破
}
如果(!IsInternetAvailable())
{
jsonResponse.RequestFinishedWithError(MContext.GetString(App8.Droid.Resource.String.internet连接不可用));
返回;
}
jsonResponse.RequestStarted();
JsonObjectRequest=新的JsonObjectRequest(方法、url、@object、Llistener、EerrorListener){
私有void OnResponse(JSONObject响应)
{
IDictionary headers=新字典();
字符串凭据=UNAME+“:”+PWD;
string auth=“Basic”+Convert.ToBase64String(credentials.ToCharArray(0,credentials.Length));
标题[“授权”]=auth;
标题[“内容类型”]=“应用程序/json;字符集=utf-8”;
//返回标题;
}
}

要在代码上使用截击,您需要做一些小的更改

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

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

应该是这样的:

public class MainActivity : Activity, Response.IListener, Response.IErrorListener
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);
这将要求您通过向活动添加两种方法来完成这些接口的实现:
public void OnErrorResponse(截击错误p0)
public void OnResponse(对象p0)

OnResponse
方法中,您将添加逻辑

在使用
OnResponse
对象之前,您需要将在
OnResponse
中接收到的
对象强制转换为
JSONObject
对象

活动
定义稍后应如下所示:

public class MainActivity : Activity, Response.IListener, Response.IErrorListener
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);
您的请求将按如下方式更新:

public class MainActivity : Activity, Response.IListener, Response.IErrorListener
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类是在另一个文件中编写的,我无权更改体系结构。因此,我一直在寻找如何在单独的c#类中实现这个功能,即您正确建议的“OnResponse”函数(然后在activity类中调用它)?没错@humbledog。您可以在另一个类上实现OnResponse,并在从该外部类创建JsonObjectRequest对象时传入该类的实例,我不能像“JsonObjectRequest request=new JsonObjectRequest(方法,url,@;对象,this,this);”这样调用.你有什么建议吗?它帮助我解决了问题。