0

私はactivitiesそのすべてのグループを持っていbaseActivityます.

title in the BaseActivityすべてのサブ アクティビティに反映されるように設定しようとしています。

アプリはユーザーをログインしています。username across the titleログインしたら、すべての画面に表示しようとしています。

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

    public class NfcBaseActivity extends Activity{

        private static final String TAG = NfcBaseActivity.class.getSimpleName(); 
        String carername;

        public String getCarername() {
            return carername;
        }

        public void setCarername(String carername) {
            this.carername = carername;
            Log.e(TAG, "setting carername to " + this.carername);
            setTitle(carername + " is currently logged in");
        }

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            //setTitle(getCarername() + " is logged in");
        }

    }   

    @Override
        protected void onCreate(final Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            setContentView(R.layout.entryscreen); 
            nfcscannerapplication = (NfcScannerApplication) getApplication();
            //loginWebservice = new LoginWebservice(this);
            loginWebservice = nfcscannerapplication.loginWebservice;
            userName = (EditText)findViewById(R.id.username);
            passwordPin = (EditText)findViewById(R.id.password);

            login = (Button)findViewById(R.id.buttonlogin);
            login.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {

                    ////////////get user's input///////////


                     compId = "100";
                    String theUsername = userName.getText().toString();
                    thePassword = passwordPin.getText().toString();
                    String loginType = "1";



                    String[] params = new String[]{compId, theUsername, thePassword, loginType};

                    //validate user Asynchonously on background thread

                    AsyncValidateCarer avc = new AsyncValidateCarer();
                    avc.execute(params);
                EntryActivity.this.setCarername(fullName);

                }// end of onclick
            });

これを呼び出しAsyncTaskて、Web サービスに対してユーザーを検証し、インスタンス変数 fullName をユーザーの名前に設定します。

この AsyncTask は、Activity の から呼び出されonClick()ます。setcarer()以下を使用して、スーパークラスにタイトルを設定するアクティビティのスーパー クラス メソッドを呼び出します。

この変更が、スーパークラスを拡張する他のすべてのクラスに反映されることを願っていました。

なぜこれが反映されないのですか?

EntryActivity.this.setCarername(fullName);
4

1 に答える 1

0

おそらく、fullNameを呼び出した時点で変数がまだnullであるためEntryActivity.this.setCarername(fullName);です。

この変数をAsyncTaskのどこかに設定していると仮定します。そのため、AsyncTaskの終了を待たずに続行するため、AsyncTaskEntryActivity.this.setCarername(fullName);onPostExecuteメソッドを呼び出す必要があります。avc.execute(params);

于 2012-09-25T11:19:06.180 に答える