2015-04-24 50 views
1

我正在嘗試開發一個具有登錄和註冊的聊天應用程序。該應用程序沒有任何錯誤,沒有任何錯誤,當我註冊時在SQLite中添加了正確的信息,但是當我登錄這些細節時,應用程序會說「登錄」,但沒有任何反應。有人知道我的代碼有什麼問題嗎?Android登錄應用程序不記錄用戶

LoginActivity.java

public class LoginActivity extends Activity { 
// LogCat tag 
private static final String TAG = RegisterActivity.class.getSimpleName(); 
private Button btnLogin; 
private Button btnLinkToRegister; 
private EditText inputEmail; 
private EditText inputPassword; 
private ProgressDialog pDialog; 
private SessionManager session; 

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

    inputEmail = (EditText) findViewById(R.id.email); 
    inputPassword = (EditText) findViewById(R.id.password); 
    btnLogin = (Button) findViewById(R.id.btnLogin); 
    btnLinkToRegister = (Button) findViewById(R.id.btnLinkToRegisterScreen); 

    // Progress dialog 
    pDialog = new ProgressDialog(this); 
    pDialog.setCancelable(false); 

    // Session manager 
    session = new SessionManager(getApplicationContext()); 

    // Check if user is already logged in or not 
    if (session.isLoggedIn()) { 
     // User is already logged in. Take him to main activity 
     Intent intent = new Intent(LoginActivity.this, MainActivity.class); 
     startActivity(intent); 
     finish(); 
    } 

    // Login button Click Event 
    btnLogin.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View view) { 
      String email = inputEmail.getText().toString(); 
      String password = inputPassword.getText().toString(); 

      // Check for empty data in the form 
      if (email.trim().length() > 0 && password.trim().length() > 0) { 
       // login user 
       checkLogin(email, password); 
      } else { 
       // Prompt user to enter credentials 
       Toast.makeText(getApplicationContext(), 
         "Please enter the credentials!", Toast.LENGTH_LONG) 
         .show(); 
      } 
     } 

    }); 

    // Link to Register Screen 
    btnLinkToRegister.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View view) { 
      Intent i = new Intent(getApplicationContext(), 
        RegisterActivity.class); 
      startActivity(i); 
      finish(); 
     } 
    }); 

} 

/** 
* function to verify login details in mysql db 
* */ 
private void checkLogin(final String email, final String password) { 
    // Tag used to cancel the request 
    String tag_string_req = "req_login"; 

    pDialog.setMessage("Logging in ..."); 
    showDialog(); 

    StringRequest strReq = new StringRequest(Method.POST, 
      AppConfig.URL_REGISTER, new Response.Listener<String>() { 

     @Override 
     public void onResponse(String response) { 
      Log.d(TAG, "Login Response: " + response.toString()); 
      hideDialog(); 

      try { 
       JSONObject jObj = new JSONObject(response); 
       boolean error = jObj.getBoolean("error"); 

       // Check for error node in json 
       if (!error) { 
        // user successfully logged in 
        // Create login session 
        session.setLogin(true); 

        // Launch main activity 
        Intent intent = new Intent(LoginActivity.this, 
          MainActivity.class); 
        startActivity(intent); 
        finish(); 
       } else { 
        // Error in login. Get the error message 
        String errorMsg = jObj.getString("error_msg"); 
        Toast.makeText(getApplicationContext(), 
          errorMsg, Toast.LENGTH_LONG).show(); 
       } 
      } catch (JSONException e) { 
       // JSON error 
       e.printStackTrace(); 
      } 

     } 
    }, new Response.ErrorListener() { 

     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.e(TAG, "Login Error: " + error.getMessage()); 
      Toast.makeText(getApplicationContext(), 
        error.getMessage(), Toast.LENGTH_LONG).show(); 
      hideDialog(); 
     } 
    }) { 

     @Override 
     protected Map<String, String> getParams() { 
      // Posting parameters to login url 
      Map<String, String> params = new HashMap<String, String>(); 
      params.put("tag", "login"); 
      params.put("email", email); 
      params.put("password", password); 

      return params; 
     } 

    }; 

    // Adding request to request queue 
    AppController.getInstance().addToRequestQueue(strReq, tag_string_req); 
} 

private void showDialog() { 
    if (!pDialog.isShowing()) 
     pDialog.show(); 
} 

private void hideDialog() { 
    if (pDialog.isShowing()) 
     pDialog.dismiss(); 
} 
} 

MainActivity.java

public class MainActivity extends Activity 
{ 
private TextView txtName; 
private TextView txtEmail; 
private Button btnLogout; 
private SQLiteHandler db; 
private SessionManager session; 
public Socket sender; 
public BufferedReader br; 
public PrintStream bw; 

class SocketListener implements Runnable 
{ 
    String str; 

    public void run() 
    { 
     try 
     { 
      sender = new Socket("127.0.0.1", 1234); 
      br = new BufferedReader (new InputStreamReader(sender.getInputStream())); 
      bw = new PrintStream (sender.getOutputStream()); 
      bw.println("Connected"); 

      while (true) 
      { 
       final TextView t = (TextView)findViewById(R.id.textView); 

       String s = br.readLine(); 
       CharSequence cs = t.getText(); 
       str = cs + "\r\n" + s; 
       Log.i("Chat-str:", str); 
       t.post(new Runnable() 
         { 
          public void run() 
          { 
           t.setText(str); 
          } 
         } 
       ); 
      } 
     } 
     catch (IOException e) 
     { 
      Log.e(getClass().getName(), e.getMessage()); 
     } 
    } 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    txtName = (TextView) findViewById(R.id.name); 
    txtEmail = (TextView) findViewById(R.id.email); 
    btnLogout = (Button) findViewById(R.id.btnLogout); 

    // SqLite database handler 
    db = new SQLiteHandler(getApplicationContext()); 

    // session manager 
    session = new SessionManager(getApplicationContext()); 

    if (!session.isLoggedIn()) { 
     logoutUser(); 
    } 

    // Fetching user details from sqlite 
    HashMap<String, String> user = db.getUserDetails(); 

    String name = user.get("name"); 
    String email = user.get("email"); 

    // Displaying the user details on the screen 
    txtName.setText(name); 
    txtEmail.setText(email); 

    // Logout button click event 
    btnLogout.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      logoutUser(); 
     } 
    }); 

    TextView tv = (TextView)findViewById(R.id.textView); 
    tv.setMovementMethod(new ScrollingMovementMethod()); 

    Button send1 = (Button)findViewById(R.id.button); 
    send1.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View v) 
     { 
      final EditText et = (EditText)findViewById(R.id.editText); 
      Editable e = et.getText(); 
      final String s = e.toString(); 

      new Thread() 
      { 
       public void run() 
       { 
        bw.println (s); 
       } 
      }.start(); 
     } 
    }); 

    Thread t = new Thread (new SocketListener()); 
    t.start(); 
} 

/** 
* Logging out the user. Will set isLoggedIn flag to false in shared 
* preferences Clears the user data from sqlite users table 
* */ 
private void logoutUser() { 
    session.setLogin(false); 

    db.deleteUsers(); 

    // Launching the login activity 
    Intent intent = new Intent(MainActivity.this, LoginActivity.class); 
    startActivity(intent); 
    finish(); 
} 
} 

回答

1

它並不像你曾經登錄他們進來看看這裏

btnLogin.setOnClickListener(new View.OnClickListener() { 

    public void onClick(View view) { 
     String email = inputEmail.getText().toString(); 
     String password = inputPassword.getText().toString(); 

     // Check for empty data in the form 
     if (email.trim().length() > 0 && password.trim().length() > 0) { 
      // login user 
      checkLogin(email, password); 
     } else { 
      // Prompt user to enter credentials 
      Toast.makeText(getApplicationContext(), 
        "Please enter the credentials!", Toast.LENGTH_LONG) 
        .show(); 
     } 
    } 

}); 

是什麼checkLogin(電子郵件,密碼); 如果它返回一個布爾值,你應該說
如果(checkLogin){
//記錄他們在
}

你可以張貼checklogin代碼?

+0

我不確定自己,因爲我使用的教程,我很新的一個Java你知道如何使它登錄?我在這裏得到這段代碼「Intent i = new Intent(getApplicationContext(), MainActivity.class); startActivity(i); finish();」但無論我把它放在哪裏,它仍然不會登錄 –

+0

如何在用戶忘記密碼時獲取真實密碼? –