仅在真实的android设备中有401个http错误,在genymotion中有200个成功代码

时间:2015-06-26 08:29:35

标签: android http webservice-client http-status-code-401 android-async-http

我的问题是,当我登录webservice时,我收到401错误代码。但我只在真正的Android设备中获得此错误代码(我已经在2个不同的手机和网络中尝试过这个)。 但是在genymotion中我没有收到任何错误,而是获得200成功代码。我的应用程序运行正常。

我还想告诉您,我的代码在我的应用程序的其他连接部分中对于真实和虚拟设备都能正常工作;例如请求需要认证的数据等

util class中的某个地方

static public AsyncHttpClient setHeader(Context contex,AsyncHttpClient client){

String username =contex.getResources().getString(R.string.url_login_username);
String password = contex.getResources().getString(R.string.url_login_password);

//since its required for this webservice
client.addHeader("Authorization","Basic "+ Base64.encodeToString(
        (username + ":" + password).getBytes(), Base64.NO_WRAP
));

return client;
}

login fragment

client = new AsyncHttpClient();
client  = Utils.setHeader(getActivity(), client);

在客户端的回调中,我已将onFailure函数覆盖为

@Override
public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3)     {
   String string = new String(arg2);
   Log.d("LoginFragment onFailure", "" + arg0 +" "+string);
   showSnackbar(R.string.loginAccessProblem, Color.RED);
}

我在logcat

中得到了这个错误
onFailure﹕ 401 {"status":false,"error":"Not authorized"}

我还检查过this尝试过的代码

client.setBasicAuth(getString(R.string.url_login_username),getString(R.string.url_login_password));

编辑:我可以说我的虚拟设备和网络服务在同一个网络中,真实设备必须从外部网络连接

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题。我从xml文件获取我的连接URL。设备有不同的语言,genymotion是英语,真正的设备是当地语言。所以我的应用程序从我的应用程序项目所依赖的另一个库中的values-tr xml获取其url。 所以在将来避免这个问题,我已经将我所有的url连接收集在同一语言的xml文件(一般文件)中,并用语言xmls删除。