登录成功后隐藏登录页面并在android中显示main_activity

Posted

技术标签:

【中文标题】登录成功后隐藏登录页面并在android中显示main_activity【英文标题】:Hide login page after successful login and show main_activity in android 【发布时间】:2016-02-17 11:40:15 【问题描述】:

我是 android studio 的新手,我创建了一个使用 GCM 通知的具有 Android webview 的应用程序。该应用程序有两个活动:

    activity_register(用于新用户注册应用) activity_main(用作应用的主屏幕)

每次显示 activity_register 时,我都会启动我的应用程序。我想在用户第一次成功登录后隐藏activity_register。

1)activity_register LOGIN WINDOW SCREEN

AndroidMainfest.xml

<application
    android:name="com.eduapp.Controller"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.NoTitleBar">




    <!-- Main Activity -->
    <activity
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:theme="@android:style/Theme.NoTitleBar"
        android:name="com.eduapp.MainActivity"
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:label="@string/app_name" >

    </activity>

    <!-- Register Activity -->
    <activity
        android:name="com.eduapp.RegisterActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <action android:name="android.intent.action.DELETE" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="com.idrivecare.familypro" />
        </intent-filter>
    </activity>

MainActivity.java

public class MainActivity extends Activity 
// label to display gcm messages
TextView lblMessage;
Controller aController;


//----------------------------------------------------

private WebView webView;
private ProgressBar progress;
public Uri imageUri;

//-----------------------------------------------------


// Asyntask
AsyncTask<Void, Void, Void> mRegisterTask;

public static String name;
public static String email;
//-------------------ON-CREATE-START-------------------
@Override
public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    //---------------------------------------------------------
    //web settings
    webView = (WebView) findViewById(R.id.webView);
    WebSettings webSettings = webView.getSettings();
    webView.getSettings().setAllowFileAccess(true);
    webView.getSettings().setAppCacheEnabled(true);
    webSettings.setjavascriptEnabled(true);
    webSettings.setDomStorageEnabled(true);

    //progress bar setting
    progress = (ProgressBar) findViewById(R.id.progressBar);
    progress.setMax(100);

    //load page settings
    webView.setWebChromeClient(new MyWebViewClient());
    // mWebView.setWebChromeClient(new WebChromeClient());
    webView.setWebViewClient(new WebViewClient());
    webView.loadUrl("http://demo.eduapp.in/pages_admin");

    //-------------------------------------------------------------------

    //Get Global Controller Class object (see application tag in AndroidManifest.xml)
    aController = (Controller) getApplicationContext();


    // Check if Internet present
    if (!aController.isConnectingToInternet()) 

        // Internet Connection is not present
        aController.showAlertDialog(MainActivity.this,
                "Internet Connection Error",
                "Please connect to Internet connection", false);
        // stop executing code by return
        return;
    

    // Getting name, email from intent
    Intent i = getIntent();

    name = i.getStringExtra("name");
    email = i.getStringExtra("email");

    // Make sure the device has the proper dependencies.
    GCMRegistrar.checkDevice(this);

    // Make sure the manifest permissions was properly set
    GCMRegistrar.checkManifest(this);

    lblMessage = (TextView) findViewById(R.id.lblMessage);

    // Register custom Broadcast receiver to show messages on activity
    registerReceiver(mHandleMessageReceiver, new IntentFilter(
            Config.DISPLAY_MESSAGE_ACTION));

    // Get GCM registration id
    final String regId = GCMRegistrar.getRegistrationId(this);

    // Check if regid already presents
    if (regId.equals("")) 

        // Register with GCM
        GCMRegistrar.register(this, Config.GOOGLE_SENDER_ID);

     else 

        // Device is already registered on GCM Server
        if (GCMRegistrar.isRegisteredOnServer(this)) 

            // Skips registration.
            Toast.makeText(getApplicationContext(),
                    "Already registered with GCM Server",
                    Toast.LENGTH_LONG).
                    show();

         else 

            // Try to register again, but not in the UI thread.
            // It's also necessary to cancel the thread onDestroy(),
            // hence the use of AsyncTask instead of a raw thread.

            final Context context = this;
            mRegisterTask = new AsyncTask<Void, Void, Void>() 

                @Override
                protected Void doInBackground(Void... params) 

                    // Register on our server
                    // On server creates a new user
                    aController.register(context, name, email, regId);

                    return null;
                

                @Override
                protected void onPostExecute(Void result) 
                    mRegisterTask = null;
                

            ;

            // execute AsyncTask
            mRegisterTask.execute(null, null, null);

        




    


//-------------------ON-CREATE-END-------------------

// Create a broadcast receiver to get message and show on screen
private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() 

    @Override
    public void onReceive(Context context, Intent intent) 

        String newMessage = intent.getExtras().getString(Config.EXTRA_MESSAGE);

        // Waking up mobile if it is sleeping
        aController.acquireWakeLock(getApplicationContext());

        // Display message on the screen
        lblMessage.append(newMessage + " ");

                Toast.makeText(getApplicationContext(),
                        "Got Message: " + newMessage,
                        Toast.LENGTH_LONG).show();

        // Releasing wake lock
        aController.releaseWakeLock();
    
;

@Override
protected void onDestroy() 
    // Cancel AsyncTask
    if (mRegisterTask != null) 
        mRegisterTask.cancel(true);
    
    try 
        // Unregister Broadcast Receiver
        unregisterReceiver(mHandleMessageReceiver);

        //Clear internal resources.
        GCMRegistrar.onDestroy(this);

     catch (Exception e) 
      //  Log.e("UnRegister Receiver Error","> " + e.getMessage());
    
    super.onDestroy();

private class MyWebViewClient extends WebChromeClient


    @Override
    public void onProgressChanged(WebView view, int newProgress) 

        if (!DetectConnection.checkInternetConnection(MainActivity.this)) 
            Toast.makeText(getApplicationContext(), "No Internet!", Toast.LENGTH_SHORT).show();
            findViewById(R.id.imageLoading2).setVisibility(View.VISIBLE);
            progress.setVisibility(View.GONE);
         else 
            findViewById(R.id.webView).setVisibility(View.VISIBLE);
            MainActivity.this.progress.setProgress(0);
            MainActivity.this.setValue(newProgress);
            super.onProgressChanged(view, newProgress);

            if (newProgress >= 100) 
                progress.setVisibility(View.GONE);
                findViewById(R.id.imageLoading1).setVisibility(View.GONE);

             else 
                progress.setVisibility(View.VISIBLE);
                findViewById(R.id.imageLoading2).setVisibility(View.GONE);
                findViewById(R.id.imageLoading1).setVisibility(View.VISIBLE);
                findViewById(R.id.webView).setVisibility(View.GONE);
            
        
    

    // You can create external class extends with WebChromeClient
    // Taking WebViewClient as inner class
    // we will define openFileChooser for select file from camera or sdcard






@Override
// Detect when the back button is pressed
public void onBackPressed() 

    if(webView.canGoBack()) 

        webView.goBack();
     else 
        // Let the system handle the back button
        super.onBackPressed();
    



public void setValue(int progress) 
    this.progress.setProgress(progress);





RegisterActivity.java

public class RegisterActivity extends Activity 

// UI elements
EditText txtName;
EditText txtEmail;

// Register button
Button btnRegister;

@Override
public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_register);

    //Get Global Controller Class object (see application tag in AndroidManifest.xml)
    final Controller aController = (Controller) getApplicationContext();

    // Check if Internet Connection present
    if (!aController.isConnectingToInternet()) 

        // Internet Connection is not present
        aController.showAlertDialog(RegisterActivity.this,
                "Internet Connection Error",
                "Please connect to working Internet connection", false);

        // stop executing code by return
        return;
    

    // Check if GCM configuration is set
    if (Config.YOUR_SERVER_URL == null
            || Config.GOOGLE_SENDER_ID == null
            || Config.YOUR_SERVER_URL.length() == 0
            || Config.GOOGLE_SENDER_ID.length() == 0) 

        // GCM sernder id / server url is missing
        aController.showAlertDialog(RegisterActivity.this, "Configuration Error!",
                "Please set your Server URL and GCM Sender ID", false);

        // stop executing code by return
        return;
    

    txtName = (EditText) findViewById(R.id.txtName);
    txtEmail = (EditText) findViewById(R.id.txtEmail);
    btnRegister = (Button) findViewById(R.id.btnRegister);

    // Click event on Register button
    btnRegister.setOnClickListener(new View.OnClickListener() 

        @Override
        public void onClick(View arg0) 
            // Get data from EditText
            String name = txtName.getText().toString();
            String email = txtEmail.getText().toString();

            // Check if user filled the form
            if(name.trim().length() > 0 && email.trim().length() > 0)

                // Launch Main Activity
                Intent i = new Intent(getApplicationContext(), MainActivity.class);

                // Registering user on our server
                // Sending registraiton details to MainActivity
                i.putExtra("name", name);
                i.putExtra("email", email);
                startActivity(i);
                finish();

            else

                // user doen't filled that data
                aController.showAlertDialog(RegisterActivity.this,
                        "Registration Error!",
                        "Please enter your details",
                        false);
            
        
    );



Confing.java

public interface Config 


// CONSTANTS
static final String YOUR_SERVER_URL ="http://eduapp.in/hello/register.php";

// Google project id
static final String GOOGLE_SENDER_ID = "189074368474";

/**
 * Tag used on log messages.
 */
static final String TAG = "GCM Android Example";

static final String DISPLAY_MESSAGE_ACTION ="com.eduapp.DISPLAY_MESSAGE";

static final String EXTRA_MESSAGE = "message";



GCMIntentService.java

public class GCMIntentService extends GCMBaseIntentService 

private static final String TAG = "GCMIntentService";

private Controller aController = null;

public GCMIntentService() 
    // Call extended class Constructor GCMBaseIntentService
    super(Config.GOOGLE_SENDER_ID);


/**
 * Method called on device registered
 **/
@Override
protected void onRegistered(Context context, String registrationId) 

    //Get Global Controller Class object (see application tag in AndroidManifest.xml)
    if(aController == null)
        aController = (Controller) getApplicationContext();

    Log.i(TAG, "Device registered: regId = " + registrationId);
    aController.displayMessageOnScreen(context,
            "Your device registred with GCM");
    Log.d("NAME", MainActivity.name);
    aController.register(context, MainActivity.name,
            MainActivity.email, registrationId);


/**
 * Method called on device unregistred
 * */
@Override
protected void onUnregistered(Context context, String registrationId) 
    if(aController == null)
        aController = (Controller) getApplicationContext();
    Log.i(TAG, "Device unregistered");
    aController.displayMessageOnScreen(context,getString(R.string.gcm_unregistered));
    aController.unregister(context, registrationId);


/**
 * Method called on Receiving a new message from GCM server
 * */
@Override
protected void onMessage(Context context, Intent intent) 

    if(aController == null)
        aController = (Controller) getApplicationContext();

    Log.i(TAG, "Received message");
    String message = intent.getExtras().getString("price");

    aController.displayMessageOnScreen(context, message);
    // notifies user
    generateNotification(context, message);


/**
 * Method called on receiving a deleted message
 * */
@Override
protected void onDeletedMessages(Context context, int total) 

    if(aController == null)
        aController = (Controller) getApplicationContext();

    Log.i(TAG, "Received deleted messages notification");
    String message = getString(R.string.gcm_deleted, total);
    aController.displayMessageOnScreen(context, message);
    // notifies user
    generateNotification(context, message);


/**
 * Method called on Error
 * */
@Override
public void onError(Context context, String errorId) 

    if(aController == null)
        aController = (Controller) getApplicationContext();

    Log.i(TAG, "Received error: " + errorId);
    aController.displayMessageOnScreen(context,
            getString(R.string.gcm_error, errorId));


@Override
protected boolean onRecoverableError(Context context, String errorId) 

    if(aController == null)
        aController = (Controller) getApplicationContext();

    // log message
    Log.i(TAG, "Received recoverable error: " + errorId);
    aController.displayMessageOnScreen(context,
            getString(R.string.gcm_recoverable_error,
                    errorId));
    return super.onRecoverableError(context, errorId);


/**
 * Create a notification to inform the user that server has sent a message.
 */
private static void generateNotification(Context context, String message) 

    int icon = R.drawable.ic_launcher;
   long when2 = System.currentTimeMillis();

    Intent intent = new Intent(context, MainActivity.class);
    PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    NotificationCompat.Builder b = new NotificationCompat.Builder(context);

    b.setAutoCancel(true)
            .setDefaults(Notification.DEFAULT_ALL)
            .setWhen(System.currentTimeMillis())
            .setSmallIcon(icon)
            .setTicker("Eduapp.in")
            .setContentTitle("New Notification")
            .setContentText(message)
            .setDefaults(Notification.DEFAULT_LIGHTS| Notification.DEFAULT_SOUND)
            .setContentIntent(contentIntent)
            .setContentInfo("Eduapp.in");



    //context, title, message, intent,icon, message, when
    NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(1, b.build());




【问题讨论】:

在android中使用共享变量进行会话管理,它将帮助您保存用户名和密码。不要直接在注册页面上拉用户。首先使用一些其他活动,并提供在那里注册和登录的选项 【参考方案1】:

您需要创建一个会话来执行此操作。会话将保留您第一次登录时的详细信息,以便稍后返回应用程序时,用户名和密码已经保存在应用程序中。这些显然是嵌入在应用程序中的,对用户是不可见的。

我还将实现这样的想法,即用户可以在下次使用应用程序时注销并重新输入他/她的凭据,如果他们愿意的话。

Here 是一个很好的教程,介绍了如何实现。

希望这会有所帮助:)

【讨论】:

以上是关于登录成功后隐藏登录页面并在android中显示main_activity的主要内容,如果未能解决你的问题,请参考以下文章

如何在登录后重定向到我想要的页面并在成功登录后显示用户名

jsp不用框架,如何实现用户登陆后显示用户信息,隐藏登陆框

在asp.net mvc中注册成功(重定向到登录)后用户名自动填写登录页面

登录成功后在 HomeView 中隐藏按钮

求php实现登录成功后返回首页并在原登录处显示用户名的源代码(类似于铁血网的登录)

JS隐藏和显示页面怎么弄