【问题标题】:Override method implemented in anonymous class not recognized在匿名类中实现的覆盖方法无法识别
【发布时间】:2014-10-18 20:17:25
【问题描述】:

我有以下代码,取自本教程:http://developer.android.com/training/volley/simple.html

        final TextView mResponse = (TextView) findViewById(R.id.response);
        RequestQueue queue = Volley.newRequestQueue(this);
        String url = "http://www.example.com/";

// Request a string response from the provided URL.
        StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
                new Response.Listener() {
                    @Override
                    public void onResponse(String response) {
                        // Display the first 500 characters of the response string.
                        mResponse.setText("Response is: "+ response.substring(0,500));
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                mResponse.setText("That didn't work!");
            }
        });

但是,尽管在匿名侦听器类中实现了 onResponse() 方法,但 Response.Listener 仍以红色下划线显示,并给出以下错误:“'从侦听器派生的匿名类'必须要么声明为抽象类,要么声明为在“Listener”中实现抽象方法“onResponse(T)”。我不确定为什么它没有看到我确实做到了。

【问题讨论】:

    标签: java android


    【解决方案1】:

    Response.Listener 是一个泛型类型。您必须指定:

    new Response.Listener<String>()
    

    【讨论】:

    • 这就像一个魅力,谢谢!不过,我现在遇到的问题是:如何将返回的response 字符串保存到我可以在程序中使用的变量中?内部类显然需要将它们访问的变量声明为final,这使我无法将response 的值保存到预先声明的字符串中......
    • 您将无法为最终字符串分配新值,因此请为具有字段响应的侦听器创建一个类,或者完全按照您问题中的代码设置响应。请注意 Java 中 final 关键字的含义 - 您声明了 final TextView mResponse,因此您不能重新分配引用,但您可以调用 setter。
    【解决方案2】:
    compile 'dev.dworks.libs:volleyplus:+'
    compile 'com.android.volley:volley:1.0.0'
    

    当您使用两个库时会出现此问题。要解决问题,只需删除

    compile 'com.android.volley:volley:1.0.0' 
    

    您的代码可以正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-19
      • 1970-01-01
      • 1970-01-01
      • 2017-10-08
      相关资源
      最近更新 更多