Как создать один класс веб-сервиса залпов для использования в приложении Android? - PullRequest
0 голосов
/ 30 мая 2019

Мое приложение для Android использует несколько сетевых вызовов в одном действии, и у меня есть несколько таких заданий, где я должен использовать как отправку, так и получение запросов. Я хочу создать один класс "VolleyWebservice" и вызывать его в нескольких действиях вместо написания полного кода залпа. Я относительно новичок в разработке Android, и я не понимаю, где я иду не так.

public class VolleyWebService {

public JSONObject result;

public JSONObject getResponse(String url, Context mContext) {
    RequestQueue mQueue = Volley.newRequestQueue(mContext);
    JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            Log.e(TAG, "Anshuman" + response.toString());

            result =  response;
        }
    },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    VolleyLog.d(TAG, "Error: " + error.getMessage());
                }
            });

    mQueue.add(request);
   return result;
}
}

Метод в моей деятельности, где я вызываю этот класс

    private void callFunctionGetDist() {
    ProgressDialog progressDialog;
    progressDialog = ProgressDialog.show(recorddata.this, "", "Please Wait...", true);
    JSONObject response = new VolleyWebService().getResponse(urlConfigClass.GET_DISTRICT, this);
    try {
        if(response.toString().contains("Status:Success,Details")){
            arrDistName.clear();
            arrDistCode.clear();
            arrDistName.add("Select District Name");
            arrDistCode.add("Select District Code");
            JSONArray jsonArray = response.getJSONArray("Status:Success,Details");
            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject jobJ = jsonArray.getJSONObject(i);
                String scheName = jobJ.getString("post");
                JSONObject jobJDist = new JSONObject(scheName);
                String distname = jobJDist.getString("District");
                String distcode = jobJDist.getString("DistrictCode");
                arrDistName.add(distname);
                arrDistCode.add(distcode);
            }
            ArrayAdapter<String> dataAdapter = new ArrayAdapter<>(recorddata.this,
                    R.layout.custom_textview_to_spinner, arrDistName);
            // Drop down layout style - list view with radio button
            dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            // attaching data adapter to spinner
            district.setAdapter(dataAdapter);
            progressDialog.dismiss();
        }else{
            progressDialog.dismiss();
            Toast.makeText(getApplicationContext(), "Response is null or empty", Toast.LENGTH_LONG).show();
        }
    } catch (Exception volleyError) {
        progressDialog.dismiss();
        Toast.makeText(getApplicationContext(), volleyError.getMessage(), Toast.LENGTH_LONG).show();
    }
}

Я пытался создать тот же класс, но не смог получить ответ на другие действия. Хотя я получаю правильный ответ в ответе jsonbject на Volley, ответ возвращает ноль в других действиях.

Я хочу, чтобы объект результата возвратил ответ в моей операции с записями

Это то, что я пробовал до сих пор, но не повезло!

  public void postResponse (String url, Context mContext, final VolleyResponseListener listener) {
    try {
        String encodedUrl = url.replace(" ", "%20") + "";
        if (encodedUrl.contains("("))
            encodedUrl = encodedUrl.replace("(", "%28");
        if (encodedUrl.contains(")"))
            encodedUrl = encodedUrl.replace(")", "%29");
        encodedUrl = encodedUrl.replace(" ", "%20");

        RequestQueue mQueue = Volley.newRequestQueue(mContext);
        JsonObjectRequest request = new JsonObjectRequest(Request.Method.POst, encodedUrl, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                Log.e(TAG, "Anshuman" + response.toString());

                listener.onSuccess(response);
            }
        },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        listener.onError(error);
                    }
                }) {
            @Override
            protected Map<String, String> getParams() {
                return new HashMap<>();
            }

        };

        mQueue.add(request);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

1 Ответ

0 голосов
/ 30 мая 2019

Ради достижения вашей цели (без учета архитектуры и принципов кодирования) вы можете передать обратный вызов:

public class VolleyWebService {

public interface VolleyResponseListener {
  void onSuccess(JSONObject response);
  void onError(VolleyError error);
}

public JSONObject result;

public JSONObject getResponse(String url, Context mContext, VolleyResponseListener listener) {
    RequestQueue mQueue = Volley.newRequestQueue(mContext);
    JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            Log.e(TAG, "Anshuman" + response.toString());

            listener.onSuccess(response);
        }
    },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                   listener.onError(error);
                }
            });

    mQueue.add(request);
   return result;
}
}

Чтобы использовать его:

volleyWebService.getResponse("your url", context, new VolleyResponseListener() {
   @Override
   void onSuccess(JSONObject response) {
      //do what you want on success
   }

   @Override
   void onError(VolleyError error) {
      //do what you want on error
   }
});
...