Как разделить вложенный метод в конструкторе на отдельный метод? - PullRequest
1 голос
/ 25 сентября 2019

Это скорее вопрос стиля и самообучения, но в коде залпа есть слушатели, и весь код, который я нахожу в сети, включает в себя просто вложение метода переопределения внутри конструктора.Не обязательно то, к чему я привык из C # фона.На самом деле не так уж и хорошо в лямбде, анонимные методы тоже.

Я понятия не имею, с чего начать, потому что сейчас мне это не кажется интуитивно понятным.Но я бы хотел отделить вложенные методы от их собственных соответствующих методов.Или, может быть, даже просто переопределенные методы, если это единственная необходимая часть.

    final EditText textView = (EditText) findViewById(R.id.editText);

    RequestQueue queue = Volley.newRequestQueue(this);
    String url = "http://myURL";

    JSONObject postparams = new JSONObject();
    postparams.put("city", "london");
    postparams.put("name", "bob");

    // Request a string response from the provided URL.
    JsonObjectRequest  postRequest = new JsonObjectRequest(Request.Method.POST, url, postparams,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    textView.setText("Success: "+ response.toString());
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    textView.setText(String.valueOf(error.networkResponse.statusCode));
                }
            }
    );
    // Add the request to the RequestQueue.
    queue.add(postRequest);

Я хотел бы назвать метод в аргументах 2 Response в пределах одного и того же класса или, возможно, сделать это самому.переопределениеЯвляется ли это возможным?Что-то вроде.

...
JsonObjectRequest  postRequest = new JsonObjectRequest(Request.Method.POST, url, postparams, myResponseListener(JSONObject response), myErrorResponseListener(VolleyError error));
// Add the request to the RequestQueue.
queue.add(postRequest);
}

public void myResponseListener(JSONObject response){
     textView.setText("Success: "+ response.toString());
}
public void myErrorResponseListener(VolleyError error){
    textView.setText(String.valueOf(error.networkResponse.statusCode));
}

Есть ли простой способ что-то вроде этого?

Редактировать: Попытка ответа linucksrox, к моему удивлению, следующее на самом деле стоит как отдельный метод ...без public (модификатор доступа) или void (возвращаемый тип) ??

    Response.Listener<JSONObject> myListener(JSONObject response)
    {
        return new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                textView.setText("Success: "+ response.toString());
            }
        };
    }

Но когда я пытаюсь подключить myListener в качестве 4-го аргумента, он жалуется на аргументы.

myListener() no work, 
myListener(JSONOBject response) no work

То же самое относится к аргументу раздела ошибки.

1 Ответ

1 голос
/ 25 сентября 2019

Вы должны быть в состоянии сделать что-то вроде этого:

    Response.Listener<JSONObject> myListener = new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            textView.setText("Success: "+ response.toString());
        }
    };

    Response.ErrorListener myErrorListener = new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            textView.setText(String.valueOf(error.networkResponse.statusCode));
        }
    };

    // Request a string response from the provided URL.
    JsonObjectRequest  postRequest = new JsonObjectRequest(Request.Method.POST, url, postparams,
            myListener, myErrorListener);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...