Skocz do zawartości
kacper635

Pobieranie danych i przekazywanie do mysql

    Rekomendowane odpowiedzi

    Witam, mam sobie kod który pobierane dane do logowania i za pomocą json przekazuje je do bazy mysql. Można to jakos rozbudować żeby w nowym activity pobieralo dane z edittextów i tak samo do bazy szło?

     

    package com.appnucleus.loginandregisteruser;
    
    import android.app.Activity;
    import android.app.ProgressDialog;
    import android.content.Intent;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    
    import com.android.volley.Request.Method;
    import com.android.volley.Response;
    import com.android.volley.VolleyError;
    import com.android.volley.toolbox.StringRequest;
    import com.jeremyfeinstein.slidingmenu.lib.MenuInterface;
    import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
    
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import helper.SQLiteHandler;
    import helper.SessionManager;
    import volley.AppController;
    import volley.Config_URL;
    
    public class Activity_Login extends Activity
    {
        // LogCat tag
        private static final String TAG = Activity_Register.class.getSimpleName();
        private Button btnLogin;
        private Button btnLinkToRegister;
        private EditText inputEmail;
        private EditText inputPassword;
        private ProgressDialog pDialog;
        private SessionManager session;
        private SQLiteHandler db;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_login);
    
            inputEmail = findViewById(R.id.email);
            inputPassword = findViewById(R.id.password);
            btnLogin = findViewById(R.id.btnLogin);
            btnLinkToRegister = 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(Activity_Login.this,Activity_Main.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(),
                                "Wpisz email i hasło.", Toast.LENGTH_LONG)
                                .show();
                    }
                }
    
            });
    
            // Link to Register Screen
            btnLinkToRegister.setOnClickListener(new View.OnClickListener() {
    
                public void onClick(View view) {
                    Intent i = new Intent(getApplicationContext(),
                            Activity_Register.class);
                    startActivity(i);
                    finish();
                    overridePendingTransition(R.anim.push_left_in, R.anim.push_left_out);
                }
            });
    
        }
    
        /**
         * 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("Logowanie ...");
            showDialog();
    
            StringRequest strReq = new StringRequest(Method.POST,
                    Config_URL.URL_REGISTER, new Response.Listener<String>() {
    
                @Override
                public void onResponse(String response) {
                    Log.d(TAG, "Login Response: " + response);
                    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);
                            String uid = jObj.getString("uid");
    
                            JSONObject user = jObj.getJSONObject("user");
                            String name = user.getString("name");
                            String email = user.getString("email");
                            String grupa = user.getString("grupa");
                            String created_at = user
                                    .getString("created_at");
    
                            // Inserting row in users table
                            db = new SQLiteHandler(getApplicationContext());
                            db.addUser(name, email, uid, created_at, grupa);
                            // Launch main activity
                            Intent intent = new Intent(Activity_Login.this,
                                    Activity_Main.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();
        }
    }

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    @kacper635  Można na podstawie tego Activity stworzyć nowe. W nim będziesz miał nowe pola i będziesz pobierał z nich dane podobnie jak tutaj: 
     

     String email = inputEmail.getText().toString();
     String password = inputPassword.getText().toString();

    A następnie bazując na metodzie: 

    private void checkLogin(final String email, final String password) 

    utworzyć swoją, wysyłającą dane do Twojego serwisu, który będzie zapisywał dane. Tylko musi on być przygotowany na odbieranie tych danych. Tutaj, dane do logowania, wysyłasz pod odpowiedni punkt końcowy. Kryje się on pod: 

    Config_URL.URL_REGISTER //pewnie jego wartość to coś podobnego do http://localhost:8080/login

    Twój serwis, który zapisuje do bazy mysql musi mieć również punkt końcowy (endpoint) za pomocą którego zapiszesz nowe dane. Na przykład: 

    http://localhost:8080/jakies_dane

    Na końcu musisz wiedzieć co zwróci serwis gdy dane zostaną prawidłowo zapisane. Może zwrócić tylko status: 200 czyli że wszystko jest OK, albo jakieś dodatkowe dane. W przypadku Twojego logowania jest to:
     

     String uid = jObj.getString("uid");
    
     JSONObject user = jObj.getJSONObject("user");
     String name = user.getString("name");
     String email = user.getString("email");
     String grupa = user.getString("grupa");
     String created_at = user.getString("created_at");

    user, name, email, grupa, itd.. 

    Na początku zastanów się jakie dane chcesz wysyłać. Sprawdź czy serwis pozwala na zapis takich danych (jeżeli nie to będzie go trzeba zmodyfikować). Potem stwórz activity z EditText, gdzie będziesz je pobierał:)

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    A jak ten kod bedzie wyglądał jak bede chcial 20 edit tekstow zrobic z których bede pobierał godzine? 

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Na początek tworzysz nowe Activity. Nie wiem jakie dane będziesz w nim zamieszczał dlatego roboczo nazwałem je Activity_20EditText. Klikasz na swój pakiet prawym przyciskiem myszy i wybierasz New -> Java Class:

    image.png.021c0e936b42eeb1453f9fb9b6fc14e0.png

    Następnie wpisujesz nazwę activity i klasę z której dziedziczy:

    image.png.dfd3e4948e7468a32791c12a37b48154.png

    Klasa się wygeneruje, ale będzie podświetlać jej nazwę - chodzi o to żeby activity było w zarejestrowane AndroidManifest. Osiągniesz to wciskając Alt+Enter i wybierając opcję Add activity to manifest:

    image.png.6a5472202bd52b723f75837a4988daa6.png

    Dodaj brakujący kod, tak żeby Twoja activity wyglądała następująco:

    public class Activity_20EditText extends Activity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_20_edit_text);
        }
    }

    Teraz trzeba stworzyć i przypiąć layout do nowego activity (kursor na czerwoną nazwę activity_20_edit_text i skrót klawiszowy Alt+Enter):

    image.png.3b7babb92a4407d9b8c9e22c11209ccd.png

    W nowym oknie wystarczy że klikniesz OK. Teraz masz layout na którym możesz dodawać EditTexty  ;)

    Na przykład:

    <android.support.constraint.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <EditText
            android:id="@+id/editText1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="text"
            android:layout_marginEnd="8dp"
            android:layout_marginStart="8dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent" />
        
    </android.support.constraint.ConstraintLayout>

    No i w nowej Activity możesz się dostać do tego EditTextu w następujący sposób:

    public class Activity_20EditText extends Activity {
        private EditText editText1;
        
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_20_edit_text);
            
            editText1 = findViewById(R.id.editText1);
        }
    }

    Resztę EditTextów dodasz analogicznie, wstawiając je do utworzonego już layoutu. Chociaż zastanawiam się nad tym czy potrzebujesz ich aż 20 :P 

    Jeżeli jakiegoś kodu nie rozumiesz śmiało zadawaj pytania ;)

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Ogólnie to zrobiłem taką tabelę i mam pare pytań. Jak zrobić żeby cały layout byl wyswietlany na srodku? Bo obecnie jest w lewym górnym rogu, a zadne android:layout_marginLeft:"20dp" itd nie działa. Tak samo nie działa orientration. 
    Kolejne pytanie to czy można zrobić takie małe czarne belki jak mam na samym górze i na dole, chciałbym je miec tez po bokach żeby miało to obramowanie również tam, oraz czy mozna zrobić przedział w postaci pionowej linii między kolumnami?
    Kolejne pytanie to czy można zmniejszyć szerokość kolumny numer lekcji? Bo zajmuje dużą część ekranu?

    table.png

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Pewnie używasz ConstraintLayout. W oficjalnej dokumentacji fajnie jest pokazane jak ustawiać element na środku używając myszki ;) Tutaj oficjalna dokumentacja:  https://developer.android.com/training/constraint-layout/

    A tutaj krótkie filmiki pokazujące ideę:

    https://storage.googleapis.com/androiddevelopers/videos/studio/studio-constraint-first.mp4

    https://storage.googleapis.com/androiddevelopers/videos/studio/studio-constraint-second.mp4

    Na końcu powinieneś osiągnąć coś takiego:

    image.png.354b61a37875e8d020b559fb0ba96a33.png

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

    Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

    Zarejestruj nowe konto

    Załóż nowe konto. To bardzo proste!

    Zarejestruj się

    Zaloguj się

    Posiadasz już konto? Zaloguj się poniżej.

    Zaloguj się

    • Ostatnio przeglądający   0 użytkowników

      Brak zarejestrowanych użytkowników przeglądających tę stronę.

    x