Estoy usando Android Volley usando https://foo.net/index.php?option=com_xxxxxxxadv usando HTTPS. Mi código necesita dos solicitudes frecuentes, por ejemplo:

Solicitud 1)

{
      "task": "login",
      "taskData": {
        "username": "donald",
        "type": "android",
        "devicetoken": "cinAz0hbctM:APA91bGmv9MQ2WNNGLxa2RJYJubmhL2",
        "long": "0",
        "password": "123456",
        "lat": "0"
      }
}

Solicitud 2)

{
  "task": "profile",
  "taskData": {
    "username": "donald"
  }
}

Me da la respuesta de login(Request 1) perfectamente pero en la Solicitud 2 también me da la respuesta login(Request 1), cuando lo revisé en Google Chrome Postman da una respuesta perfecta para ambas solicitudes, por lo que debería haber algo que hacer en El lado de Android.

Ahora, cuando cambio la URL a http://foo.com/index.php?option=com_xxxxxxxadv funciona perfectamente con el mismo código.

Lo que quiero es que debe dar exactamente la misma respuesta que la solicitud, es decir, la solicitud 1 respuesta para la solicitud 1 y la solicitud 2 respuesta para la solicitud 2.

-2
Pratik Vyas 1 may. 2017 a las 09:48

3 respuestas

La mejor respuesta

Intenté este problema y finalmente obtuve una solución, utilicé Handler para retrasar mi solicitud, ya que el Https generalmente demora la respuesta, por lo que tiene sentido

Handler handler= new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                //Your code after 5 seconds delay
                //Volley Request Code
            }
        },5000);
0
Pratik Vyas 17 may. 2017 a las 04:40

Crear clase de interfaz en su paquete

public interface ApiResponseListener {

    void onSuccessResponse(String response, HashMap<String,String> hashMap);
    void onErrorResponse(VolleyError error, HashMap<String,String> hashMap);

}

Cree la clase ApiController en su paquete

public class ApiController {

    private Context context;
    public ApiResponseListener apiResponseListener;

    public ApiController(Context context) {
        this.context = context;

    }

    public void actionCallWebService(String url, final HashMap<String, String> params) {
//        
            StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
                    new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {
                            apiResponseListener.onSuccessResponse(response, params);

                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            apiResponseListener.onErrorResponse(error, params);

                        }
                    }) {
                @Override
                protected Map<String, String> getParams() {
                    return params;
                }
            };
            stringRequest.setRetryPolicy(new DefaultRetryPolicy(
                    Constants.MY_API_TIMEOUT_MS,
                    DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
                    DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
            MyApplication.getInstance().addToRequestQueue(stringRequest);

    }
}

En su fragmento o clase de actividad esta línea dos

HashMap<String,String> params = new HasMap<>();
params.put("option","xyz");

apiController = new ApiController(this);
apiController.apiResponseListener = this;

apiController.actionCallWebService("htpps://www.xyz.com/index.php",params)

En su fragmento o actividad implemente Api Response Listener y anule a continuación dos métodos

 @Override
    public void onSuccessResponse(String response, HashMap<String, String> hashMap) {

        if (hashMap.get("option") != null && hashMap.get("option").equalsIgnoreCase("your option parameter value")) {

        }
        else if (hashMap.get("option") != null && hashMap.get("option").equalsIgnoreCase("your option parameter another value")) {

        }

    }

    @Override
    public void onErrorResponse(VolleyError error, HashMap<String, String> hashMap) {


    }

En su clase de aplicación

public class MyApplication extends MultiDexApplication {

    public static final String TAG = MyApplication.class
            .getSimpleName();
    private RequestQueue queue;
    private static MyApplication mInstance;
    private Context context;

    @Override
    public void onCreate() {
        super.onCreate();
        context = this;
        mInstance = this;

    }

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }


    public static synchronized MyApplication getInstance() {
        return mInstance;
    }

    public static synchronized com.android.volley.toolbox.ImageLoader getImageLoaderInstance() {
        return mImageLoader;
    }

    public RequestQueue getRequestQueue() {


        if (queue == null) {
            /*if(Common.httpclient==null)
            {
                Common.httpclient=new DefaultHttpClient();
                ClientConnectionManager mgr = Common.httpclient.getConnectionManager();

                HttpParams params = Common.httpclient.getParams();

                Common.httpclient = new DefaultHttpClient(new ThreadSafeClientConnManager(params,

                        mgr.getSchemeRegistry()), params);
                CookieStore cookieStore = new BasicCookieStore();
                Common.httpclient.setCookieStore( cookieStore );
            }
            HttpStack httpStack = new HttpClientStack( Common.httpclient );*/
            queue = Volley.newRequestQueue(getApplicationContext());
        }

        return queue;
    }



    public <T> void addToRequestQueue(com.android.volley.Request<T> req, String tag) {
        // set the default tag if tag is empty
        req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
        getRequestQueue().add(req);
    }

    public <T> void addToRequestQueue(com.android.volley.Request<T> req) {
        req.setTag(TAG);
        getRequestQueue().add(req);
    }

    public <T> void addToRequestQueueSuggestion(com.android.volley.Request<T> req, String tag) {
        // set the default tag if tag is empty
        req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
        getRequestQueueSuggestion().add(req);
    }

    public <T> void addToRequestQueueSuggestion(com.android.volley.Request<T> req) {
        req.setTag(TAG);
        getRequestQueueSuggestion().add(req);
    }

    public void cancelPendingRequests(Object tag) {
        if (queue != null) {
            queue.cancelAll(tag);
        }
    }

    public void cancelPendingRequestsSuggestion(Object tag) {
        if (queueSuggestion != null) {
            queueSuggestion.cancelAll(tag);
        }
    }

    public void stopQueue() {
        if (queue != null) {
            queue.stop();
        }
    }

}
0
Bhupat Bheda 1 may. 2017 a las 07:11

Los datos no son suficientes, depende de cómo llame a las API a través de Volley tough; consulte volley ssl support y cómo se ejecutó la consulta https en Android.

1
Community 23 may. 2017 a las 12:18