2013-04-10 1 views
2

Когда я запускаю этот фрагмент кода на Android 2.3.6, он отлично работает. В 4.0 я получаю исключение StrictMode. Из некоторых вопросов о SO, похоже, что вы не можете выполнять сетевые операции в потоке пользовательского интерфейса. Но я не делаю никаких операций пользовательского интерфейса в потоке пользовательского интерфейса.

Я вызываю 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); 

Редактировать: Строгий режим не разрешен на телефоне.

+0

это 'AsyncTask' или что-то еще, я действительно не могу понять, что вы пытаетесь сделать здесь – hardartcore

+0

Да, я не использую AsyncTask в своем« обычном »способе в этом одном месте. – Siddharth

+0

Я предлагаю вам использовать AsyncTask для достижения того, что вы хотите. – hardartcore

ответ

3

Во-первых, StrictMode - это то, что вы явно включили в код, это всего лишь отладочная помощь, и ее не следует оставлять в производственном коде.

Во-вторых, вызов .doInBackground вручную означает запуск его в потоке пользовательского интерфейса. Если вы используете AsyncTask по назначению, вы получите его возвращаемое значение в качестве параметра в .onPostExecute.

+0

Я звоню doInBackground в обработчике runnable, глупый вопрос, но разве это не делает doInBackground OFF поток пользовательского интерфейса? – Siddharth

+0

Нет, обработчик сообщения запускает его (хотя и задерживается), что означает поток пользовательского интерфейса. –