Android Api(Okhttps)未在android 9(pie)及更高版本中调用[重复]
Posted
技术标签:
【中文标题】Android Api(Okhttps)未在android 9(pie)及更高版本中调用[重复]【英文标题】:Android Api (Okhttps) not getting called in android 9(pie) and above [duplicate] 【发布时间】:2019-09-27 22:45:25 【问题描述】:我以与其他手机版本相同的方式调用 android API,并且在 Oreo 版本(即 8)之前它工作正常。但在 android 9 (即 pie 版本及更高版本)中没有调用 API。如果馅饼有一些变化,请告诉我。提前致谢。
private void getLoginAPI(String username, String password, String compnaycoce)
if (NetworkStatus.isNetworkConnected(this))
LoginReqBean bean = new LoginReqBean();
bean.UserId = username;
bean.Password = password;
bean.Company = compnaycoce;
NetworkService serviceCall = new NetworkService(Constants.loginPost(), Constants.TAG_POST, this);
serviceCall.call(bean);
else
Toast.makeText(this, "Please check Internet connection", Toast.LENGTH_SHORT).show();
@Override
public void onNetworkCallInitiated(String service)
progressDialog = ProgressDialog.show(LoginActivity.this, "Info", "Validating Credentials, Please wait...");
progressDialog.show();
@Override
public void onNetworkCallCompleted(String service, String response)
Log.e("LOGIN JSON ", "login " + response);
if (progressDialog != null && progressDialog.isShowing())
progressDialog.dismiss();
LoginParentBean parentBean = LoginParentBean.fromJson(response);
if (parentBean != null && parentBean.status)
LoginBean loginBean = parentBean.result;
Toast.makeText(getApplicationContext(), "You Are logged in Successfully!", Toast.LENGTH_LONG).show();
AppPreferences.INSTANCE.setUserID(loginBean.user_id);
AppPreferences.INSTANCE.setUserRole(loginBean.userRole);
AppPreferences.INSTANCE.setUserLocation(loginBean.location);
AppPreferences.INSTANCE.setUserLocationID(loginBean.locationId);
AppPreferences.INSTANCE.setIsPostGres(loginBean.isPostgres);
AppPreferences.INSTANCE.setUserName(loginBean.username);
AppPreferences.INSTANCE.setAccessToken(loginBean.tokenValue);
AppPreferences.INSTANCE.setLogin(true);
Intent intent = new Intent(getApplicationContext(), DashBoardActivity.class);
startActivity(intent);
finish();
else
Toast.makeText(getApplicationContext(), "Please check your username and password again!", Toast.LENGTH_LONG).show();
@Override
public void onNetworkCallError(String service, String errorMessage)
if (progressDialog != null && progressDialog.isShowing())
progressDialog.dismiss();
MessageDialog msg = new MessageDialog(LoginActivity.this);
msg.setButtonText("Ok");
msg.show(getResources().getString(R.string.error_somethingwent), getResources().getString(R.string.app_name));
【问题讨论】:
您是否收到类似java.io.IOException: Cleartext HTTP traffic to * not permitted
的错误??
***.com/questions/53368470/…
【参考方案1】:
Android 6.0 在 android manifest 的应用程序元素下引入了 useCleartextTraffic 属性。 Android P 中的默认值为“false”。将此设置为 true 表示应用打算使用清晰的网络流量。
<application
android:usesCleartextTraffic="true"
</application>
但是,这似乎可以解决问题,但它会对数据完整性造成威胁。 Android 7.0 通过 network security configuration file
提供了更好的解决方案【讨论】:
成功了。你拯救了我的一天。谢谢。 @PriyankaSinghal 呵呵 这不是一个完美的解决方案,因为默认情况下 android:usesClearTextTraffic 的值为 TRUE。确保并在官方 Android 文档上进行检查。 @DPrince 查看this Android 官方文档。Starting with Android 9 (API level 28), cleartext support is disabled by default
【参考方案2】:
在项目的AndroidManifest.xml
文件中添加以下行
<application
android:usesCleartextTraffic="true">
...
</application>
【讨论】:
以上是关于Android Api(Okhttps)未在android 9(pie)及更高版本中调用[重复]的主要内容,如果未能解决你的问题,请参考以下文章
android gridlayout未在23岁以下的api中显示加权项目
Google maps api v2 Android 未在 locationListener 上更新
Android WebView 混合内容未在 api 级别 < 21 中加载
Android 8.1(API 27) - 重启后键盘未在Kiosk模式应用中显示