平板电脑无法使用API​​调用(Android)

时间:2016-12-08 10:48:20

标签: android android-volley

我有一款适用于手机和平板电脑的原生Android应用。有问题的API调用是一个GET请求,它在请求标头中使用基本身份验证来发送用户登录详细信息。

当我按下按钮发送API调用时,调试显示请求对象被正确创建并添加到请求队列但没有任何反应。

我检查了服务器日志,API从未进入服务器。在移动设备上完全相同的呼叫工作正常。两个设备都在同一个wifi上,没有使用移动数据,但平板电脑永远不会得到响应,永远不会超时,也不会显示任何错误。

我正在使用凌空进行网络通话。

这是电话会议的代码:

public void GETbasicAuthentication(final String user, final String password, String URL, final VolleySingletonListener<JSONObject> listener, final VolleySingletonErrorListener errorListener) {

    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, URL, new JSONObject(), new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            listener.onResult(response);
            BaseActivity.printOut("GETbasic response", response.toString());
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            getErrorCode(error, errorListener);
        }
    }) {
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String> params = new HashMap<>();
            params.put("Authorization", String.format("Basic %s", Base64.encodeToString(String.format("%s:%s", user, password).getBytes(), Base64.URL_SAFE)));
            params.put("apikey", Constants.API_KEY);
            return params;
        }
    };


    requestQueue.add(jsonObjectRequest);
}

/

public interface VolleySingletonListener<T> {
    void onResult(T object);
}


public interface VolleySingletonErrorListener {
    void onErrorResult(Exception error, JSONObject errorBody);
}

编辑: 根据小提琴的评论,我启用了VolleyLog并获得了以下内容:

D/Volley: [1] MarkerLog.finish: (143  ms) [ ] **REQUEST_URL** 0x3f39d365 NORMAL 1
D/Volley: [1] MarkerLog.finish: (+0   ) [ 1] add-to-queue
D/Volley: [1] MarkerLog.finish: (+0   ) [114] cache-queue-take
D/Volley: [1] MarkerLog.finish: (+0   ) [114] cache-miss
D/Volley: [1] MarkerLog.finish: (+0   ) [118] network-queue-take
D/Volley: [1] MarkerLog.finish: (+142 ) [118] post-error
D/Volley: [1] MarkerLog.finish: (+1   ) [ 1] done

编辑2:

请求队列在NetworkManager类中初始化:

private NetworkManager(Context context) {
    requestQueue = Volley.newRequestQueue(context.getApplicationContext());
}

public static synchronized NetworkManager getInstance(Context context) {
    if (instance == null) {
        instance = new NetworkManager(context);
    }
    return instance;
}

public static synchronized NetworkManager getInstance() {
    if (null == instance) {
        throw new IllegalStateException(NetworkManager.class.getSimpleName() +
                " is not initialized, call getInstance(...) first");
    }
    return instance;
}

然后在onCreate类的Application中调用它:

NetworkManager.getInstance(this);

此外,当要进行API调用时,类的引用如下:

NetworkManager.getInstance().GETbasicAuthentication(...);

查看我的要点,更详细地查看整个单身人士https://gist.github.com/stoddayy/9e5b2cb429274947f8f5839546e05399

0 个答案:

没有答案