簡體   English   中英

連接服務器時發生錯誤

[英]Error occur when connecting to server

我制作了連接到GCM的電子商務應用。 當用戶輸入電子郵件ID時要比在主頁中輸入。 但我不明白它顯示的錯誤是什么。 當我剛運行該應用程序時,我的應用程序崩潰。

ClientLoginActivity.java(這是Java文件,客戶端在其中輸入電子郵件ID,並且在登錄時進入首頁)。

public class ClientLoginActivity extends Activity {
        private Button btnLogin;
        private TextView txtToolbarTitle;
        private EditText editTextEmailId;
        private GcmActivity gcmObject;
        private Typeface romanticTypeface, boldRomanticTypeface;
        private Toolbar loginToolbar;
        private ProgressDialog ringProgressDialog;
        private Utility utility;


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_login);
            utility = new Utility();

            // Creating GCM object for calling Gcm API's
            gcmObject = GcmActivity.getInstance(this);

            //Registering observer with REGISTER_UNREGISTER_LISTENER using LocalBroadcastManager to listen for REGISTER and UNREGISTER events
            LocalBroadcastManager.getInstance(this).registerReceiver(mRegisterUnregisterReceiver,
                    new IntentFilter(Globals.REGISTER_UNREGISTER_LISTENER));

            editTextEmailId = (EditText) findViewById(R.id.editText_user_email_id);
            btnLogin = (Button) findViewById(R.id.btn_login);
            setRomanticFont();
        }

        private void setRomanticFont() {
            romanticTypeface = Typeface.createFromAsset(getAssets(), Globals.ROMANTIC_FONT);
            boldRomanticTypeface = Typeface.create(romanticTypeface, Typeface.BOLD);

            loginToolbar = (Toolbar) findViewById(R.id.login_toolbar);
            txtToolbarTitle = (TextView) loginToolbar.findViewById(R.id.login_toolbar_title);
            txtToolbarTitle.setTypeface(boldRomanticTypeface);
        }

        @Override
        protected void onResume() {
            super.onResume();

            editTextEmailId.setText(getAccount());

            btnLogin.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View arg0) {
                    String userEmailId = ((EditText) findViewById(R.id.editText_user_email_id)).getText().toString();
                    String userDeviceId = utility.getAndroidID(getApplicationContext());

                    if (!utility.isValidEmail(userEmailId)) {
                        showToast("Email id is not valid", Toast.LENGTH_SHORT);
                    } else {
                        if (utility.isNetworkAvailable(ClientLoginActivity.this) == true) {
                            launchRingDialog("Connecting to server");
                            // Calling registerAndLogin() API for registering to GCM Server and Logging inn if already registered
                            gcmObject.registerAndLogin(userEmailId, userDeviceId);
                        } else {
                            showToast("Network not available", Toast.LENGTH_SHORT);
                        }
                    }
                }
            });
        }

        // Will be called whenever our client app gets response for REGISTER and UNREGISTER events from our GCM Server
        private BroadcastReceiver mRegisterUnregisterReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                Log.v(Globals.TAG, "mRegisterUnregisterReceiver received broadcasted message");

                String message = intent.getStringExtra(Globals.MESSAGE);
                showToast(message, Toast.LENGTH_SHORT);
                dismissProgressDialog();

                //checking if NOT_REGISTERED response is not received and start the app otherwise
                if (!(message.contains(Globals.NOT_REGISTERED) || message.contains(Globals.GOOGLE_PLAY_SERVICE_NOT_VALID))) {
                    startApp();
                }
            }
        };

        public void showToast(String msg, int time) {
            Toast.makeText(this, msg, time).show();
        }

        public String getAccount() {
            Account[] accounts = AccountManager.get(this)
                    .getAccountsByType(GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE);
            String[] names = new String[accounts.length];
            for (int i = 0; i < names.length; i++) {
                names[i] = accounts[i].name;
            }
            if (names != null)
                return names[0];
            else
                return "";
        }

        private void launchRingDialog(String displayMessage) {
            ringProgressDialog = ProgressDialog.show(this, "Please wait ...", displayMessage, true);
            ringProgressDialog.setCancelable(true);
        }

        public void dismissProgressDialog() {
            if (ringProgressDialog != null && ringProgressDialog.isShowing()) {
                ringProgressDialog.dismiss();
            }
        }

        public void startApp() {
            String userEmailId = ((EditText) findViewById(R.id.editText_user_email_id)).getText().toString();
            Intent intent = new Intent(this, MainActivity.class);
            intent.putExtra(Globals.CURRENT_USER_EMAIL_ID, userEmailId);
            startActivity(intent);
            finish();
        }

        @Override
        protected void onPause() {
            super.onPause();

            //fixing issue : prevention of window leak exception
            dismissProgressDialog();
        }

        @Override
        protected void onDestroy() {
            super.onDestroy();

            // Un register the receiver in onDestroy()
            LocalBroadcastManager.getInstance(this).unregisterReceiver(mRegisterUnregisterReceiver);
        }

    }

錯誤

     E/AndroidRuntime: FATAL EXCEPTION: main
         Process: search.code.marshmallow, PID: 2365
       java.lang.RuntimeException: Unable to resume activity {search.code.marshmallow/search.code.marshmallow.Activities.ClientLoginActivity}: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
 Caused by: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
  at search.code.marshmallow.Activities.ClientLoginActivity.getAccount(ClientLoginActivity.java:124)
  at search.code.marshmallow.Activities.ClientLoginActivity.onResume(ClientLoginActivity.java:72)

檢查此鏈接,這可能返回Account []的元素為空或為零。

Account[] accounts = AccountManager.get(this)
                .getAccountsByType(GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE);

初始化String[] names = new String[accounts.length]; account.length可能會導致問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM