Неудачный вход в систему по протоколу HTTP открывает новую операцию - что такое правильная запись StartActivity? - PullRequest
0 голосов
/ 19 сентября 2011

Мне удалось заставить работать экран входа в систему, используя java-скрипт отсюда введите описание ссылки здесь но моя проблема в том, что даже если логин неправильный, открывается новое запрашиваемое действие.

Вот код,

package com.xxxxxx;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class Admin extends Activity {
    /** Called when the activity is first created. */
    private Button login;
    private EditText username, password;

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

        login = (Button) findViewById(R.id.login);
        username = (EditText) findViewById(R.id.username);
        password = (EditText) findViewById(R.id.password);

        login.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                String   mUsername = username.getText().toString();
                String  mPassword = password.getText().toString();

                tryLogin(mUsername, mPassword);
            }
        });
    }

    protected void tryLogin(String mUsername, String mPassword)
    {           
        HttpURLConnection connection;
       OutputStreamWriter request = null;

            URL url = null;   
            String response = null;         
            String parameters = "username="+mUsername+"&password="+mPassword;   

            try
            {
                url = new URL("http://xxxxxxxxxxxxxxx/login.php");
                connection = (HttpURLConnection) url.openConnection();
                connection.setDoOutput(true);
                connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                connection.setRequestMethod("POST");    

                request = new OutputStreamWriter(connection.getOutputStream());
                request.write(parameters);
                request.flush();
                request.close();            
                String line = "";               
                InputStreamReader isr = new InputStreamReader(connection.getInputStream());
                BufferedReader reader = new BufferedReader(isr);
                StringBuilder sb = new StringBuilder();
                while ((line = reader.readLine()) != null)
                {
                    sb.append(line + "\n");
                }
                // Response from server after login process will be stored in response variable.                
                response = sb.toString();
                // You can perform UI operations here
                Toast.makeText(this,"Message from Server: \n"+ response, 0).show();             
                isr.close();
                reader.close();
            Intent intent = new Intent (Admin.this, Webview.class);
            startActivity(intent);
            finish();
            }
            catch(IOException e)
            {
                // Error
            }
    }
}

Что-то не так со стартовой активностью, я думаю, но я не могу это исправить. Заранее спасибо.

А вот и php

<?php

$username = $_POST['username'];
$password = $_POST['password'];

if($username=='xxxxxxx' && $password == 'xxxxxxxx'){
echo "true";
}
else{
echo "Login Failed";
}

?>

Ответы [ 3 ]

1 голос
/ 19 сентября 2011

http-запрос не выдаст ошибку, если вход не выполнен. Скорее всего, вы получите код 401 с сервера. Вам нужно обработать этот код с сервера в своей логике. Кроме того, вы можете захотеть, чтобы ваш метод tryLogin просто возвращал true или false, а затем имел оператор if для запуска Activity или нет.

1 голос
/ 19 сентября 2011

Нет, приятель ... он всегда будет запускать действие, о котором вы упомянули, за исключением случаев, когда при попытке получить ответ от сервера происходит исключение ... Теперь, что происходит, вы получаете какой-то ответ от сервера, даже если если вход не удается Все, что вам нужно, это иметь условие, чтобы проверить успешность входа в систему, прежде чем начинать новое действие ...

Например: Дайте ответ от сервера как «1» для успешного входа в систему и 0 для неудачного входа в систему.

1 голос
/ 19 сентября 2011

Кажется, с вызовом startActivity все в порядке. startActivity не имеет представления, был ли ваш логин верным или нет, он настроен на постоянное срабатывание, поэтому он делает это каждый раз.

Возможно, вы хотите проверить HTTP-код ответа от вашей попытки входа в систему или проанализировать выходные данные из попытки входа в систему, чтобы определить, был ли он успешным. Используя любой из этих подходов, вы можете затем вызывать startActivity, если и только если попытка входа была успешной.

Edit:
Исходя из вашего кода, ответ String должен содержать либо «true», либо «Login Failed». Проверяйте содержимое ответа и вызывайте startActivity только в том случае, если ответ «true», возможно, в случае «Login Failed» что-то еще делаете для уведомления пользователя.

...