Android - Форма входа и регистрации с CodeIgniter

0

Всем добрый день! В настоящее время я работаю с приложениями Fitness Gym (Web & Mobile) с помощью Android с CodeIgniter (PHP). У меня возникла проблема в моей регистрационной форме, потому что когда я заполнял свои поля, она не сохранялась в localhost/phpmyadmin. Я использую AsyncTask в Android. Это мои коды:

RegisterActivity.java

public class RegisterActivity extends AppCompatActivity implements RegisterUserTask.OnSignUpListener {
private EditText etUsername;
private EditText etPassword;
private EditText etConfirmPassword;
private EditText etEmail;
private Button btnSignup;
private TextInputLayout tilUsername;
private TextInputLayout tilPassword;
private TextInputLayout tilConfirmPassword;
private TextInputLayout tilEmail;

private int resultCode;

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

    etUsername = (EditText) findViewById(R.id.signup_et_username);
    etPassword = (EditText) findViewById(R.id.signup_et_password);
    etConfirmPassword = (EditText) findViewById(R.id.signup_et_confirm_password);
    etEmail = (EditText) findViewById(R.id.signup_et_email);

    tilUsername = (TextInputLayout) findViewById(R.id.signup_username_container);
    tilPassword = (TextInputLayout) findViewById(R.id.signup_password_container);
    tilConfirmPassword = (TextInputLayout) findViewById(R.id.signup_confirm_password_container);
    tilEmail = (TextInputLayout) findViewById(R.id.signup_email_container);

    btnSignup = (Button) findViewById(R.id.signup_btn_signup);
    btnSignup.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            resultCode = 2;
            if (verifiedInputValues())
                RegisterUserTask.execute(RegisterActivity.this);
        }
    });
}

private boolean verifiedInputValues() {
    String username = etUsername.getText().toString().trim();
    String password = etPassword.getText().toString().trim();
    String confirmPassword = etConfirmPassword.getText().toString().trim();
    String email = etEmail.getText().toString().trim();

    boolean verified = true;

    if (username.isEmpty()) {
        tilUsername.setError(getResources().getString(R.string.snackbar_fail_empty_field));
        verified = false;
    }
    else tilUsername.setError(null);

    if (password.isEmpty()){
        tilPassword.setError(getResources().getString(R.string.snackbar_fail_empty_field));
        verified = false;
    }
    else if (!password.equals(confirmPassword)) {
        tilPassword.setError(getResources().getString(R.string.snackbar_fail_password_mismatch));
        verified = false;
    }
    else tilPassword.setError(null);

    if (confirmPassword.isEmpty()) {
        tilConfirmPassword.setError(getResources().getString(R.string.snackbar_fail_empty_field));
        verified = false;
    }
    else if (!password.equals(confirmPassword)) {
        tilConfirmPassword.setError(getResources().getString(R.string.snackbar_fail_password_mismatch));
        verified = false;
    }
    else tilConfirmPassword.setError(null);

    if (email.isEmpty()) {
        tilEmail.setError(getResources().getString(R.string.snackbar_fail_empty_field));
        verified = false;
    }
    else if (!email.matches("[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+")) {
        tilEmail.setError(getResources().getString(R.string.snackbar_fail_email_invalid));
        verified = false;
    }
    else tilEmail.setError(null);

    return verified;
}

private void checkResultCode() {
    boolean errorDuplicateUsername = resultCode == -1;
    boolean errorDuplicateEmail = resultCode == -2;

    if (errorDuplicateUsername) {
        Toast.makeText(this, R.string.snackbar_fail_signup_duplicate_username, Toast.LENGTH_SHORT).show();
    }
    else if (errorDuplicateEmail) {
        Toast.makeText(this, R.string.snackbar_fail_signup_duplicate_email, Toast.LENGTH_SHORT).show();
    }
    else if (resultCode == 1) {
        Toast.makeText(this, R.string.snackbar_success_signup, Toast.LENGTH_SHORT).show();
        Toast.makeText(this, R.string.snackbar_success_signup_verify_msg, Toast.LENGTH_LONG).show();
        finish();
    }
    else {
        Toast.makeText(this, R.string.snackbar_fail_signup_unable, Toast.LENGTH_SHORT).show();
    }
}

@Override
public void parseJSONString(String jsonString) {
    try {
        JSONObject jsonObject = new JSONObject(jsonString);
        resultCode = jsonObject.getInt("register");
    } catch (JSONException ignored) {}

    checkResultCode();
}

@Override
public String createSignUpPostString(ContentValues contentValues) throws UnsupportedEncodingException {
    String username = etUsername.getText().toString().trim();
    String password = etPassword.getText().toString().trim();
    String email = etEmail.getText().toString().trim();

    contentValues.put("register", true);
    contentValues.put("username", username);
    contentValues.put("password", password);
    contentValues.put("email", email);

    return RequestStringCreator.create(contentValues);
}
}

RegisterUserTask.java

public class RegisterUserTask extends AsyncTask<Void, Void, String> {
public static void execute(Context context) {
    new RegisterUserTask(context).execute();
}

public interface OnSignUpListener {
    void parseJSONString(String jsonString);
    String createSignUpPostString(ContentValues contentValues) throws UnsupportedEncodingException;
}

private final Context context;
private final ProgressDialog progressDialog;

public RegisterUserTask(Context context) {
    this.context = context;
    progressDialog = new ProgressDialog(context);
}

@Override
protected String doInBackground(Void... params) {
    try {
        URL url = new URL(TaskConfig.ADD_USER_URL);
        HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();

        httpURLConnection.setRequestMethod("POST");
        httpURLConnection.setDoInput(true);
        httpURLConnection.setDoOutput(true);

        OutputStream outputStream = new BufferedOutputStream(httpURLConnection.getOutputStream());
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));

        String postString = ((OnSignUpListener)context).createSignUpPostString(new ContentValues());
        bufferedWriter.write(postString);

        bufferedWriter.flush();
        bufferedWriter.close();
        outputStream.close();

        InputStream inputStream = new BufferedInputStream(httpURLConnection.getInputStream());
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

        StringBuilder stringBuilder = new StringBuilder();
        String line = "";

        while ((line = bufferedReader.readLine()) != null)
            stringBuilder.append(line);

        bufferedReader.close();
        inputStream.close();

        httpURLConnection.disconnect();

        return stringBuilder.toString();
    } catch (Exception e) {}
    return null;
}

@Override
protected void onPreExecute() {
    super.onPreExecute();
    progressDialog.setTitle(R.string.progress_signup_title);
    progressDialog.setMessage(context.getResources().getString(R.string.progress_signup_msg));
    progressDialog.setIndeterminate(false);
    progressDialog.setCancelable(true);
    progressDialog.show();
}


@Override
protected void onPostExecute(String jsonString) {
    super.onPostExecute(jsonString);
    progressDialog.dismiss();
    try {
        ((OnSignUpListener)context).parseJSONString(jsonString);
    } catch (Exception e) {}
}
}

TaskConfig.java

public final class TaskConfig {
public static final String HTTP_HOST = "http://172.16.0.173/";
public static final String DIR_URL = "workoutgym/";
public static final String DIR_ACTION_URL = DIR_URL + "mobile/";
public static final String LOGIN_URL = HTTP_HOST + DIR_ACTION_URL + "login";
public static final String ADD_USER_URL = HTTP_HOST + DIR_ACTION_URL + "check_user";}

контроллеры:

Mobile.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Mobile extends CI_Controller {
    public function __construct() {
        parent::__construct();
        $this->load->model('Mobile_model');
        if (!$this->input->post('android', TRUE)) {
            show_404();
        }
    }

    public function index() {
        show_404();
    }

    public function check_user() {
        $table = 'users';
        $register = $this->input->post('register', TRUE);
        if ($register == 1) {
            $data = array(
                'username' => input_filter($this->input->post('username', TRUE)),
                'password' => input_filter($this->input->post('password', TRUE)),
                'email' => input_filter($this->input->post('email', TRUE)),
            );

            if ($this->Mobile_model->insert_user($table, $data)) {
                $userdata = $this->Mobile_model->read(
                    $table, array('id' => $data['id'])
                );;
                echo json_encode(array('register' => $userdata[0]->id));
            }
        }
    }
}

модель:

Mobile_model.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Mobile_model extends CI_Model {
    public function __construct() {
        parent::__construct();
    }

    public function insert_user($table, $data, $where = NULL) {
        if (!empty($where)) {
            $this->db->where($where);
        }
        $this->db->insert($table, $data);
        return $this->db->affected_rows();
    }

    public function read($table, $where = NULL) {
        if (!empty($where)) {
            $this->db->where($where);
        }
        $query = $this->db->get($table);
        return ($query->num_rows() > 0) ? $query->result() : FALSE;
    }
}
?>

Я использую XAMPP, Visual Code Studio для моего CodeIgniter (PHP) и Android Studio для моего Android.

Теги:
codeigniter

1 ответ

0

Вы должны модифицировать: http://square.github.io/retrofit/ или Fast-Android-Networking: https://github.com/amitshekhariitbhu/Fast-Android-Networking или android-async-http: http://loopj.com/андроида Асинхр-HTTP/

Для публикации, получения данных на сервер и отладки.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню