2016-06-21 42 views
2

我是Android開發的初學者,我的應用程序要求用戶在LoginActivity中輸入他們的電子郵件和密碼才能登錄。如果憑證沒問題,那麼應用程序應該啓動WorkActivity如何僅在滿足條件時開始活動

這是PHP腳本。對於測試,我只是將$email$password設置爲靜態值,而不是從數據庫中抓取它們。

<?php 
 
$response = array ("success"=> 0, "responseMessage"=> "Incorrect email/password combination"); 
 

 
$email = "mwangicj"; 
 
$password = "asd"; 
 
if($_SERVER['REQUEST_METHOD']=='POST'){ 
 
\t $request = json_decode(file_get_contents('php://input')); 
 
\t if(!strcmp($email,$request->email)&& !strcmp($password,$request->password)){ 
 
\t \t $response['success'] = 1; 
 
\t \t $response['responseMessage'] = "Login successful ".$request->email; 
 
\t } 
 
} 
 
echo json_encode($response); 
 
?>

我使用凌空庫來發送和接收數據,並從PHP。這裏是LoginActivity

package com.mwangicj.Lugayocontributor; 
 

 
import android.content.Intent; 
 
import android.net.ConnectivityManager; 
 
import android.net.NetworkInfo; 
 
import android.os.Bundle; 
 
import android.support.v7.app.AppCompatActivity; 
 
import android.view.View; 
 
import android.widget.Button; 
 
import android.widget.EditText; 
 
import android.widget.TextView; 
 
import android.widget.Toast; 
 

 
import com.android.volley.Request; 
 
import com.android.volley.RequestQueue; 
 
import com.android.volley.Response; 
 
import com.android.volley.VolleyError; 
 
import com.android.volley.toolbox.JsonObjectRequest; 
 
import com.android.volley.toolbox.StringRequest; 
 
import com.android.volley.toolbox.Volley; 
 

 
import org.json.JSONException; 
 
import org.json.JSONObject; 
 

 
import java.util.HashMap; 
 
import java.util.Map; 
 

 
public class LoginActivity extends AppCompatActivity { 
 
    EditText loginEmail, loginPassword; 
 
    TextView message; 
 
    Button loginButton; 
 

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

 
     loginEmail = (EditText) findViewById(R.id.loginEmail); 
 
     loginPassword = (EditText) findViewById(R.id.loginPassword); 
 
     loginButton = (Button) findViewById(R.id.loginButton); 
 
     message = (TextView) findViewById(R.id.message); 
 

 
     loginButton.setOnClickListener(new View.OnClickListener() { 
 
      @Override 
 
      public void onClick(View v) { 
 
       if (connected()){ 
 
        message.setText(""); 
 
        String email = loginEmail.getText().toString(); 
 
        String password = loginPassword.getText().toString(); 
 

 
        if (!email.isEmpty() && !password.isEmpty()){ //Check if fields are filled in 
 
         logInUser(); 
 
        }else{ 
 
         Toast.makeText(getApplicationContext(), "Supply both email and password!",Toast.LENGTH_LONG).show(); 
 
        } 
 
       }else{ 
 
        Toast.makeText(getApplicationContext(), "No internet", Toast.LENGTH_SHORT).show(); 
 
       } 
 

 
      } 
 
     }); 
 
    } 
 
    //executing user's login request 
 
    private void logInUser() { 
 
     
 
     postJsonRequest("http://10.0.2.2:1234/app/json.php"); 
 
    } 
 
    //Starting work activity 
 
    void goToWork(){ 
 
     Intent i = new Intent(getApplicationContext(), WorkActivity.class); 
 
     startActivity(i); 
 
     finish(); 
 
    } 
 

 
    //preparing user's login details 
 
    private void postJsonRequest(String url) { 
 
     RequestQueue queue = Volley.newRequestQueue(getApplicationContext()); 
 
     JSONObject params = new JSONObject(); 
 
     try { 
 
      params.put("email", loginEmail.getText().toString()); 
 
      params.put("password", loginPassword.getText().toString()); 
 
     } catch (JSONException e) { 
 
      e.printStackTrace(); 
 
     } 
 

 
     JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
 
       Request.Method.POST, url, params, new Response.Listener<JSONObject>(){ 
 

 
      @Override 
 
      public void onResponse(JSONObject response) { 
 
       try { 
 
        String success = response.getString("success"); 
 
        String responseMessage = response.getString("responseMessage"); 
 
        if (success == "0"){ 
 
         message.setText(responseMessage); 
 
        }else{ 
 
         Toast.makeText(getApplicationContext(), responseMessage, Toast.LENGTH_LONG).show(); 
 
         goToWork(); 
 

 
        } 
 
       } catch (JSONException e) { 
 
        e.printStackTrace(); 
 
       } 
 
      } 
 
     }, new Response.ErrorListener() { 
 
      @Override 
 
      public void onErrorResponse(VolleyError error) { 
 
       message.setText("Error: " + error.toString()); 
 

 
      } 
 
     }); 
 
     queue.add(jsonObjectRequest); 
 
    } 
 

 
    //Checking internet connection 
 
    boolean connected(){ 
 
     ConnectivityManager cManager = (ConnectivityManager) getSystemService(this.CONNECTIVITY_SERVICE); 
 
     NetworkInfo nInfo = cManager.getActiveNetworkInfo(); 
 

 
     if(nInfo!=null && nInfo.isConnected()){ 
 
      return true; 
 
     }else{ 
 
      return false; 
 
     } 
 
    } 
 
}

的問題是,無論正確或不正確的電子郵件和密碼組合的WorkActivity開始。

我該如何解決這個問題?

+1

您是否試過在調試器中逐步執行代碼? – rrirower

回答

2

問題是==運算符在比較對象時檢查引用相等性。要測試兩個字符串是否相等,您應該使用equals()方法。

String.equals()documentation

public boolean equals(Object anObject)

比較此字符串指定的對象。如果 且僅當參數不爲null並且是一個字符串對象 表示與此對象相同的字符序列,則結果爲true。

更改如下:

if (success == "0"){ 
    message.setText(responseMessage); 
} 

要這樣:

if ("0".equals(success)){ 
    message.setText(responseMessage); 
} 

OR

聲明success作爲原始int,而不是String

int success = response.getInt("success"); 
String responseMessage = response.getString("responseMessage"); 
if (success == 0){ 
    message.setText(responseMessage); 
} 

檢出this answerString等於。

+0

第一個建議工作。謝謝 – Mwas

+0

不客氣。 – earthw0rmjim