Android 4.0上的例外`android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork(StrictMode)`

时间:2013-04-10 08:54:42

标签: android android-4.0-ice-cream-sandwich android-networking

当我在Android 2.3.6上运行这段代码时,它运行正常。在4.0上我得到一个StrictMode异常。从SO的一些问题来看,似乎你无法在UI线程上进行网络操作。但我没有在UI线程上进行任何UI操作。

我直接调用doBackground而不执行,因为我需要检查doBackground的返回值。我猜以下应该有效。

我在这里缺少什么?

handler.postDelayed(new Runnable() {
@Override
public void run() {
    God.identityHash = (String) new SwitchServer((IActionBar) splashScreen,
                God.mCruiseOnServer, nameText, phoneNumberText)
                .doInBackground(null);

    if (!mIsBackButtonPressed && God.identityHash != null) {
        FlurryAgent.logEvent(God.TCACCEPTED_AND_REGISTERED);
        Intent intent = new Intent(SplashScreen.this, HomeScreen.class);
        SplashScreen.this.startActivity(intent);
        finish();
    } else {
        Toast.makeText(splashScreen,
            "Unable to save your details. Please try again.",
            Toast.LENGTH_LONG).show();
        God.setTermsAndConditions(splashScreen, false);
    }
}
}, SPLASH_DURATION); 

编辑:手机上未启用严格模式。

1 个答案:

答案 0 :(得分:3)

首先,StrictMode是您从代码中明确启用的内容,它只是一个调试辅助工具,不应该留在生产代码中。

其次,手动调用.doInBackground意味着在UI线程上运行它。如果您按预期使用AsyncTask,则会将其返回值作为.onPostExecute中的参数。