Проблема с asyncTask, которая работает на эмуляторе, а не на устройстве - PullRequest
2 голосов
/ 29 апреля 2011

У меня проблема с asyncTask. В моем приложении пользователь должен войти в систему. Он сделал это один раз, и я сохранил логин / pwd. Когда он запускает приложение во второй раз, вместо отображения экрана с логином и pwd editText, я хочу отобразить еще один xml, где есть индикатор выполнения.

Чтобы сделать это, я смотрю, если это первая аутентификация или нет, и в соответствии с ответом я поставил хороший XML. Когда я просто отображаю XML с помощью progressBar, я подключаюсь к серверу с помощью asyncTask и загружаю то, что мне нужно.

Это прекрасно работает на эмуляторе, но когда я ставлю приложение на мой Nexus S (Android 2.3.3), которое не работает, у меня просто белый экран и ничего не добавляется.

Код моей деятельности:

public class AuthentificationActivity extends Activity implements
        OnClickListener {

    private Button btnConnection;
    private EditText edtUserName;
    private EditText edtPassword;
    private TextView lblForgottenPass;
    private ProgressBar progressBar;
    private TextView txtProgression;
    private TextView txtAlerts;

    private EntirePersonBM entirePersonBM = new EntirePersonBM();

    private String uidh = new String();
    private String userName = new String();
    private String password = new String();
    private boolean isFirstConnection = true;
    public static boolean isFinishApp = false;

    private Selection selection;
    private SelectionResultSet resultSet;
    private SharedPreferences settings;
    private String alerts = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        settings = getSharedPreferences("login", 0);

        isFirstConnection = settings.getBoolean("isFirstConnection",
                        true);

        try {
            if (isFirstConnection) {

                // Put connection screen, and help
                this.setContentView(R.layout.login);
                btnConnection = (Button) findViewById(R.id.btnConnection);
                edtUserName = (EditText) findViewById(R.id.edtUserName);
                edtPassword = (EditText) findViewById(R.id.edtPassword);
                lblForgottenPass = (TextView) findViewById(R.id.lblForgottenPass);
                progressBar = (ProgressBar) findViewById(R.id.progressBar1);
                txtProgression = (TextView) findViewById(R.id.textView1);
                txtAlerts = (TextView) findViewById(R.id.txtAlerts);

                btnConnection.setOnClickListener(this);
                lblForgottenPass.setOnClickListener(this);
            } else {
                // Directly connect to server with saved login/pwd
                // Retrieve login/pwd
                this.setContentView(R.layout.splash_login);
                txtProgression = (TextView) findViewById(R.id.txtProgression);

                userName = settings.getString("currentUserName", null);
                password = settings.getString("currentPwd", null);
                new ConnectionTask().execute("");
                }
            }

        } catch (Exception e) {

            Alerts
                    .showAlert(getString(R.string.AlertsErrorOccured), this,
                            true);

        }

    }




    public void connect(SharedPreferences settings) {

        String login = settings.getString("currentUserName", null);
        String pwd = settings.getString("currentPwd", null);

        Log.v("Retrieve user", "Always log >>> Login = " + login);

        // call server
        AuthentificationServletCall auth = new AuthentificationServletCall();
        try {
            entirePersonBM = auth.Authentification("BoozterMobile", login, pwd,
                    "passwordHash");

            Log.v("call server", "Connecting >>> OK");
        } catch (Exception e) {
            Log.v("call server", "Connecting >>> ERROR :" + e);
            e.printStackTrace();
        }

    }

    public void loadMail() {

        selection = callsUtils.loadingSelection(UserControler.getInstance()
                .getUidh(), "NEW", null, String
                .valueOf(BoozterMobileConstants.MAX_VALUES_SUGGESTION), "desc");

        if (selection != null) {

            resultSet = callsUtils.loadingMailList(UserControler.getInstance()
                    .getUidh(), selection, String.valueOf(1));

        }
        if (selection != null && resultSet != null) {

            ListHeaderControler.getInstance().setFirstAuthentification(false);
            ListHeaderControler.getInstance().setRefresh(false);
            ListHeaderControler.getInstance().setSentMail(false);
            ListHeaderControler.getInstance().setSplashActivty(true);
            ListHeaderControler.getInstance().setSel(selection);
            ListHeaderControler.getInstance().setRs(resultSet);
            ListHeaderControler.getInstance().setMailHeaderList(
                    resultSet.getEuis());

        }

    }

    private class ConnectionTask extends AsyncTask<String, Void, Object> {
        protected Void doInBackground(String... args) {
            Log.v("AsyncTask", "Start connectionTask");
            connect(settings);
            return null;
        }

        protected void onPostExecute(Object result) {
            // Pass the result data back to the main activity
            txtProgression.setText(getString(R.string.lblGetBlock));
            new BlockLoaderTask().execute("");
        }
    }

    private class BlockLoaderTask extends AsyncTask<String, Void, Object> {
        protected Void doInBackground(String... args) {
            Log.v("AsyncTask", "Start BlockLoaderTask");

            BlockControler.getInstance().setListWhere(
                    BlocksUtils.generateList(String
                            .valueOf(BoozterMailConstants.BLOCK_CATEGORY_ID),
                            true, null));

            return null;
        }

        protected void onPostExecute(Object result) {
            // Pass the result data back to the main activity
            txtProgression.setText(getString(R.string.lblGetMails));
            new MailLoaderTask().execute("");
        }
    }

    private class MailLoaderTask extends AsyncTask<String, Void, Object> {
        protected Void doInBackground(String... args) {
            Log.v("AsyncTask", "Start BlockLoaderTask");

            loadMail();

            return null;
        }

        protected void onPostExecute(Object result) {

            // create Intent
            Intent defineIntent = new Intent(AuthentificationActivity.this,
                    HeaderMailDisplayActivity.class);

            // Object that allows to pass the mail's seqnums and person's uidh
            // onto headerMail activity
            Bundle objetbunble = new Bundle();
            objetbunble.putString("positionList", String.valueOf(1));
            defineIntent.putExtras(objetbunble);

            // call headerMail activity
            AuthentificationActivity.this.startActivity(defineIntent);
        }
    }

}

Пожалуйста, помогите мне, я пробую много методов, ничего не работает, и я потерял надежду делать то, что я хочу

Я только что нашел устройство с android 2.1, и оно отлично работает. Значит есть что-то, что не совместимо с android 2.3?

...