2013-05-27 86 views
2

我是新來的android,這個問題是一個轉發,因爲我無法更新以前的一些原因。 我能夠在登錄頁面中創建記住我的功能,當我重新啓動我的應用時,用戶名和密碼字段已經填滿,但我必須點擊登錄按鈕才能進入其他活動。登錄屏幕記住功能

如何編碼,如果我想直接加載另一個活動,如果記得我複選框是真實的,而不是再次點擊登錄按鈕時,我再次加載我的應用程序。

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     b = (Button)findViewById(R.id.Button01); 
     et = (EditText)findViewById(R.id.username); 
     pass= (EditText)findViewById(R.id.password); 
     register = (TextView)findViewById(R.id.register); 
     saveLoginCheckBox = (CheckBox)findViewById(R.id.remember); 
     loginPreferences = getSharedPreferences("loginPrefs", MODE_PRIVATE); 
     loginPrefsEditor = loginPreferences.edit(); 

     saveLogin = loginPreferences.getBoolean("saveLogin", false); 
     if (saveLogin == true) { 
      //uname = et.getText().toString(); 
      // pwd = pass.getText().toString(); 
      et.setText(loginPreferences.getString("uname", "")); 
      pass.setText(loginPreferences.getString("pwd", "")); 
      saveLoginCheckBox.setChecked(true); 
      login(); 
     // finish(); 
     } 



     b.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       dialog = ProgressDialog.show(MainActivity.this, "", 
         "Validating user...", true); 
       new Thread(new Runnable() { 
         public void run() { 
          uname = et.getText().toString(); 
          pwd = pass.getText().toString(); 

          if (saveLoginCheckBox.isChecked()) { 
           loginPrefsEditor.putBoolean("saveLogin", true); 
           loginPrefsEditor.putString("uname", uname); 
           loginPrefsEditor.putString("pwd", pwd); 
           loginPrefsEditor.commit(); 
          } else { 
           loginPrefsEditor.clear(); 
           loginPrefsEditor.commit(); 
          } 


          login(); 

         } 
         }).start();    
      } 
     }); 



register.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       //dialog = ProgressDialog.show(MainActivity.this, "", 
       //   "Loading...", true); 
       new Thread(new Runnable(){ 
        public void run(){ 

        register(); 
       } 
        }).start(); 
      } 
     }); 

     } 



    void register(){ 
     startActivity(new Intent(MainActivity.this,RegisterPage.class)); 


    } 

    void login(){ 
     try{    

      httpclient=new DefaultHttpClient(); 
      httppost= new HttpPost("http://192.168.10.71/login.php"); // make sure the url is correct. 
      //add your data 
      nameValuePairs = new ArrayList<NameValuePair>(2); 
      // Always use the same variable name for posting i.e the android side variable name and php side variable name should be similar, 
      nameValuePairs.add(new BasicNameValuePair("username",et.getText().toString())); // $Edittext_value = $_POST['Edittext_value']; 
      nameValuePairs.add(new BasicNameValuePair("password",pass.getText().toString())); 
      httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
      //Execute HTTP Post Request 
      // response=httpclient.execute(httppost); 
      ResponseHandler<String> responseHandler = new BasicResponseHandler(); 
      final String response = httpclient.execute(httppost, responseHandler); 
      // System.out.println("Response : " + response); 
      /* runOnUiThread(new Runnable() { 
       public void run() { 
        tv.setText(response + et.getText()); 
        dialog.dismiss(); 
       } 
      }); 
*/    
      if(response.equalsIgnoreCase("Doctor Found")){ 
       runOnUiThread(new Runnable() { 
        public void run() { 
         //tv.setText(response); 
         dialog.dismiss(); 
         Toast.makeText(MainActivity.this,"Hello Doctor " + et.getText(), Toast.LENGTH_SHORT).show(); 
        } 
       }); 

       startActivity(new Intent(MainActivity.this, DoctorPage.class)); 

      } 
      else if(response.equalsIgnoreCase("Nurse Found")){ 
       runOnUiThread(new Runnable() { 
        public void run() { 
         //tv.setText(response); 
         dialog.dismiss(); 
         Toast.makeText(MainActivity.this,"Hello Nurse " + et.getText(), Toast.LENGTH_SHORT).show(); 
        } 
       }); 

       startActivity(new Intent(MainActivity.this, NursePage.class)); 

      }    
      else{ 
       showAlert(); 
       dialog.dismiss(); 
      } 

     }catch(Exception e){ 
      dialog.dismiss(); 
      System.out.println("Exception : " + e.getMessage()); 
     } 
    } 

我得到空指針異常。如果選中記住我框,我無法切換到其他活動。這是堆棧跟蹤。

05-21 04:13:02.284: E/AndroidRuntime(3397): FATAL EXCEPTION: main 
05-21 04:13:02.284: E/AndroidRuntime(3397): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.logincheck/com.example.logincheck.MainActivity}: java.lang.NullPointerException 
05-21 04:13:02.284: E/AndroidRuntime(3397):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
05-21 04:13:02.284: E/AndroidRuntime(3397):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
05-21 04:13:02.284: E/AndroidRuntime(3397):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
05-21 04:13:02.284: E/AndroidRuntime(3397):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
05-21 04:13:02.284: E/AndroidRuntime(3397):  at android.os.Handler.dispatchMessage(Handler.java:99) 
05-21 04:13:02.284: E/AndroidRuntime(3397):  at android.os.Looper.loop(Looper.java:137) 
05-21 04:13:02.284: E/AndroidRuntime(3397):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
05-21 04:13:02.284: E/AndroidRuntime(3397):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-21 04:13:02.284: E/AndroidRuntime(3397):  at java.lang.reflect.Method.invoke(Method.java:511) 
05-21 04:13:02.284: E/AndroidRuntime(3397):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
05-21 04:13:02.284: E/AndroidRuntime(3397):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
05-21 04:13:02.284: E/AndroidRuntime(3397):  at dalvik.system.NativeStart.main(Native Method) 
05-21 04:13:02.284: E/AndroidRuntime(3397): Caused by: java.lang.NullPointerException 
05-21 04:13:02.284: E/AndroidRuntime(3397):  at com.example.logincheck.MainActivity.login(MainActivity.java:182) 
05-21 04:13:02.284: E/AndroidRuntime(3397):  at com.example.logincheck.MainActivity.onCreate(MainActivity.java:68) 
05-21 04:13:02.284: E/AndroidRuntime(3397):  at android.app.Activity.performCreate(Activity.java:5104) 
05-21 04:13:02.284: E/AndroidRuntime(3397):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
05-21 04:13:02.284: E/AndroidRuntime(3397):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
05-21 04:13:02.284: E/AndroidRuntime(3397):  ... 11 more 

注意:我想要我們在facebook上的東西。輸入用戶名,密碼並檢查記住我複選框,如果我再次打開Facebook頁面,然後我的主頁將出現,而不是歡迎屏幕,我只需點擊登錄按鈕。

+0

該行在哪裏:'com.example.logincheck.MainActivity.login(MainActivity.java:182)' – mromer

+0

login()在代碼中實現,它的derere在register()之後。 –

+0

您能否在上面的代碼中標記第182行,因爲您只發布了部分活動代碼,所以我們無法跟蹤該行。 – Oam

回答

1

dialog.dismiss(); //<< 

saveLogin==true你忘記打電話dismiss()之前初始化對話框。所以如果saveLogintrue,並且在調用dismiss()for ProgressBar之前檢查nullisShowing(),如果塊內部初始化對話框。這樣做:

if(null !=dialog){ 
    if(dialog.isShowing()){ 
     // dismiss progressDialog here 
      dialog.dismiss(); 
    } 
} 
0

嘗試在這裏用這種方式

if (saveLogin) { 
      //uname = et.getText().toString(); 
      // pwd = pass.getText().toString(); 
      et.setText(loginPreferences.getString("uname", "")); 
      pass.setText(loginPreferences.getString("pwd", "")); 
      saveLoginCheckBox.setChecked(true); 
      login(); 
     // finish(); 
     } 
+0

登錄函數有一些問題,如果我給,'startActivity(new Intent(MainActivity.this,DoctorPage.class));'而不是調用login()它完美的工作。以某種方式,login()獲取et的值,並通過(編輯文本),其值由上面的代碼設置爲NULL。也許數據是錯誤。無法修復它:( –

+0

嘗試使用AsyncTask和http請求的所有代碼放在doInBackground()方法 –

0

在com.example.logincheck.MainActivity.login(MainActivity.java:182) 四月5日至21日:13:02.284:E/AndroidRuntime(3397):在 com.example.logincheck.MainActivity.onCreate(MainActivity.java:68)

可以檢查行號182和主要活動的行號68或者給我這些是什麼線所以這有助於檢查異常

+0

你忘記了初始化對話框 – anddevmanu

+0

是的...對話框初始化問題在那裏.. –