Volley:创建一个处理JSONArrayRequest和JSONObjectRequest的方法

时间:2016-09-29 19:48:19

标签: java android android-volley

新手在这里。 我和我的朋友正在研究一个简单的客户端 - 服务器Android应用程序,我尽力编写最干净最漂亮的代码,严格遵循SOLID原则并使用设计模式来分离我的类和组件。我写了这个方法,希望它是我必须编写的唯一网络代码:

private void VolleyJSONPostParserRequest(String url, JSONObject requestBody, 
    final Handler handler, final IParser replyParser) {
       JsonObjectRequest jsonObjectRequest = new JsonObjectRequest
            (Request.Method.POST, url, requestBody, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {    
                try {
                    Object parsedResponse = replyParser.parse(response.toString());
                    notifyObservers(handler, parsedResponse);
                } catch (Exception e) {
                    Log.e(TAG,handler.getClassName() + " reply parsing error!");
                    notifyObservers(handler, null); }
                }
                }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                Log.e(TAG,"Error receiving response for " + handler.getClassName());
                notifyObservers(handler, null);
                }
                });
        }

令我不满的是,我发现有时服务器的回复将是一个JSONObject,有时它将是一个JSONArray。我不想复制粘贴整个东西,并用“JsonArrayRequest”替换“JsonObjectRequest”。什么是这个问题的好方法?或者这是我最好只复制和粘贴的情况之一?

1 个答案:

答案 0 :(得分:1)

IMO,您应该实现自定义请求(例如,<DataGrid ItemsSource="{Binding List,Mode=OneWay}" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridTextColumn Header="My Property" Binding="{Binding MyProperty,Mode=TwoWay}" /> </DataGrid.Columns> </DataGrid> )。有关更多信息,请阅读以下Google培训文档:

  

Google Volley - Implementing a Custom Request

...然后

sed '' -i filename

希望它有所帮助!