2016-06-21 2 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

問題は、オブジェクトを比較するときの参照の一致のためのオペレータチェックである==です。 2つの文字列を値の等しいものとしてテストするには、代わりにequals()メソッドを使用する必要があります。 String.equals()documentationから

public boolean equals(Object anObject)

は、指定されたオブジェクトにこの文字列を比較します。 で、引数がnullでなく、 がこのオブジェクトと同じ文字シーケンスを表すStringオブジェクトである場合のみ、結果は真です。

変更以下:これに

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

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

OR

をむしろStringより、原始的intとしてsuccessを宣言します。

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

this answerStringで確認してください。

+0

最初の提案が働いた。ありがとうございました – Mwas

+0

ようこそ。 – earthw0rmjim

関連する問題