2010-11-17 240 views
5

有人可以幫助我建議一些好的教程,我可以開始。 我想用儀表板和登錄屏幕構建一個簡單的應用程序。首次要求用戶登錄屏幕。登錄檢查通過對遠程PHP腳本的POST調用來執行。一旦用戶登錄,他/她應該被重定向到儀表板。一旦用戶關閉並重新打開應用程序,他應該重定向到登錄屏幕。Android應用程序登錄

我知道如何創建表單以及如何發佈,在基於用戶角色切換佈局以及如何導入/擴展類方面需要幫助,例如我更喜歡單獨登錄(活動)類。但這個登錄類需要進口到主井(主要應該擴大活動)

回答

2

不知道我完全理解你的問題,但是當它涉及到開始和結束活動本教程是非常好的:

http://developerlife.com/tutorials/?p=302

如果你想當您在解決方案的背景中返回應用程序後,用戶將被重定向到登錄屏幕,以便捕獲主活動中的onStop()事件。用戶離開應用程序時會觸發此事件。

如果你解釋這一行「但這個登錄類需要導入到主」進一步我可能也能夠回答這個問題。

+0

只是我的意思是登錄類需要寫成一個單獨的文件 – 2010-11-17 10:07:56

+8

android api的整個想法是將所有視圖分隔成不同的活動。因此,對於你的應用程序,你可能希望登錄屏幕作爲一個類(擴展Activity類)和主屏幕作爲另一個類(也擴展了Activity類)。登錄成功後,您可以使用startActivity()或startActivityForResult()從登錄活動中啓動主要活動,如developerlife教程中所述。 – 2010-11-17 10:22:45

2

我已經創建了一個UserApp SDK是照顧大多數用戶的認證,如登錄,註冊,會話,用戶配置文件,社會登錄等

https://github.com/userapp-io/userapp-android

因爲它是開源的,你可以AFTE修改滿足你自己的需求並連接到你自己的服務。

登錄表單將被放置一個擴展AuthFragment,這樣的片段中:

public class LoginFragment extends AuthFragment { 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View view = inflater.inflate(R.layout.fragment_signup, container, false); 

     // Setup the login form with bindings to UserApp 
     super.setupLoginForm(view, R.id.login, R.id.password, R.id.login_button); 

     return view; 
    } 

    @Override 
    public Boolean onLoginStart(String login, String password, Boolean isSocialLogin) { 
     // Show loader when waiting for server 
     getView().findViewById(R.id.login_form).setVisibility(View.GONE); 
     getView().findViewById(R.id.login_status).setVisibility(View.VISIBLE); 

     // Return true to complete the login 
     return true; 
    } 

    @Override 
    public void onLoginCompleted(Boolean authenticated, Exception exception) { 
     // Hide the loader 
     getView().findViewById(R.id.login_form).setVisibility(View.VISIBLE); 
     getView().findViewById(R.id.login_status).setVisibility(View.GONE); 

     if (exception != null) { 
      // Show an error message 
      ((TextView) getView().findViewById(R.id.error_text)).setText(exception.getMessage()); 
     } else { 
      // Clear the message 
      ((TextView) getView().findViewById(R.id.error_text)).setText(""); 
     } 
    } 
} 

而對於LoginFragment佈局會是這個樣子:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <!-- Progress --> 
    <LinearLayout 
     android:id="@+id/login_status" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:gravity="center_horizontal" 
     android:orientation="vertical" 
     android:visibility="gone" > 

     <ProgressBar 
      style="?android:attr/progressBarStyleLarge" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="8dp" /> 

     <TextView 
      android:id="@+id/login_status_message" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="16dp" 
      android:fontFamily="sans-serif-light" 
      android:text="@string/login_progress_signing_in" 
      android:textAppearance="?android:attr/textAppearanceMedium" /> 
    </LinearLayout> 

    <!-- Login form --> 
    <ScrollView 
     android:id="@+id/login_form" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 

     <LinearLayout 
      android:orientation="vertical" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:gravity="center" > 

      <EditText 
       android:id="@+id/login" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:inputType="text" 
       android:hint="@string/username" 
       android:maxLines="1" 
       android:singleLine="true" /> 

      <EditText 
       android:id="@+id/password" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:inputType="textPassword" 
       android:hint="@string/password" 
       android:maxLines="1" 
       android:singleLine="true" /> 

      <Button 
       android:id="@+id/login_button" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="16dp" 
       android:paddingLeft="32dp" 
       android:paddingRight="32dp" 
       android:text="@string/login" /> 

      <Button 
       android:id="@+id/facebook_button" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="16dp" 
       android:paddingLeft="32dp" 
       android:paddingRight="32dp" 
       android:text="@string/facebook_login" /> 

      <Button 
       android:id="@+id/show_signup" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="16dp" 
       android:paddingLeft="32dp" 
       android:paddingRight="32dp" 
       android:text="@string/signup" /> 

      <TextView 
       android:id="@+id/error_text" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="" 
       android:textAppearance="?android:attr/textAppearanceSmall" /> 

     </LinearLayout> 
    </ScrollView> 

</LinearLayout> 

然後將其添加到您的主要活動的佈局,以及另一個包含您的「儀表板」的片段:

<RelativeLayout ... > 
    <fragment 
     android:id="@+id/loginFragment" 
     android:name="com.example.demo.LoginFragment" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" /> 

    ... 
</RelativeLayout> 

這只是簡單地展示了圖書館如何使用。有關如何使用它的更多信息,請參閱文檔。也看看GitHub上的演示應用程序。

正如在接受的答案中提到的那樣;註銷當應用程序被關閉的用戶,偵聽onStop()事件在您的主要活動,並呼籲session.logout(),像這樣:

UserApp.Session session; 
session.logout();