Effettuare Login con dati Json

mau90

Nuovo Utente
2 Ago 2019
18
1
3
Nuovo giorno, nuovo problema!
Vorrei effettuare il login sulla mia app utilizzando i dati recuperati tramite Json, ma non saprei come fare... dovrei trovare il modo per rendere tali dati delle variabili? se si, come? ...

di seguito vi inserisco il codice da me sviluppato per recuperare il Json e per effettuare il login sull'app... è un po incasinato, ma funziona tutto perfettamente, il json funziona, devo solo capire come utilizzarlo per effettuare il login!

Il codice elencato con le lettere A-B-C ecc è quello che riguarda la struttura di login.
Il codice elencato con i numeri è la parte di codice che effettua il recupero del json

Queste sono delle costanti provvisorie solo per verificare il corretto funzionamento del login;
al posto di queste dovrei inserire l'username e la password presenti sul json... almeno credo
final private String nomeUtente = "maurizio";
final private String pass = "1234";

PHP:
package com.example.progettoandroid2;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
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.Volley;

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

public class LoginActivity extends AppCompatActivity {

    private TextView mTextViewResult;
    private RequestQueue mQueue;
    // A. mi dichiaro le variabili
    TextView benvenuto;
    EditText utente;
    EditText password;
    Button login;

    //F. scrivo delle costanti per verificare l'autenticazione
    final private String nomeUtente = "maurizio";
    final private String pass = "1234";



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

        mTextViewResult = findViewById(R.id.text_view_result);
        Button buttonParse = findViewById(R.id.button_parse);
        // B. mi collego le variabili ai componenti
        benvenuto = findViewById(R.id.benvenuto);
        utente = findViewById(R.id.utente);
        password = findViewById(R.id.password);
        login = findViewById(R.id.login);

        //Creiamo una RequestQueue, che richiede come pararametro il context
        //questo oggetto si occupa di tutte le operazioni di rete, della lettura e della scrittura sulla cache
        // del parsing e delle reisposte
        mQueue = Volley.newRequestQueue(this);

        buttonParse.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                jsonParse();
            }
        });
    }

    private void jsonParse() {
        Log.d("ingresso", "messaggio");
        //1. All'interno di una costante memorizziamo l'url del file Json
        String url = "rimuovo l'url per questioni di privacy, è presente il mio ip";

        //2. Dovendo effettuare il parsing di un array, ci serve un oggetto di tipo "JsonArrayRequest".
        //Il costruttore di questo richiede vari parametri: GET per prelevare dati; POST per inviarli.
        //Nel nostro caso, dovendo prelevare i dati, sfruttiamo il metodo GET.
        JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
                new Response.Listener<JSONObject>() {

                    //3. Metodo che attende una rispsota del listner
                    // Se otteniamo la risposta, avremo un array all'interno di un oggetto JSON.
                    // Quindi scansioniamo tutti gli elementi all'interno di un ciclo *
                    @Override
                    public void onResponse(JSONObject response) {

                        //Log.d("ingresso", url);

                        try {
                            JSONArray jsonArray = response.getJSONArray("Dati");

                            for (int i = 0; i < jsonArray.length(); i++) { //* ciclo

                                //4. Per prelevare un oggetto all'interno dell'array sfruttiamo JSONObject
                                //I dati all'interno di questo oggetto possono essere prelevati tramite gli appositi getter:
                                //Queste istruzioni possono generare eccezioni, quindi vanno inserite all'interno di un blocco try-catch
                                JSONObject dato = jsonArray.getJSONObject(i);

                                String id = dato.getString("id");
                                String fullname = dato.getString("fullname");
                                String username = dato.getString("username");
                                String password = dato.getString("password");


                                mTextViewResult.append(id + ", " + fullname +  ", " + username +  ", " + password + "\n\n");

                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    }
                }, new Response.ErrorListener() {

            //5. Metodo che attende e gestisce eventuali errori
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();

            }
        });

        mQueue.add(request);
    }
    /* C. creazione della funzione di login
        Andiamo sul Design del file xml, selezioniamo il bottone e dal menu Attributes scrivamo "login"
        nell onClick. Successivamente ci richiamiamo sul Text del file xml e cliccchiamo sulla lampadina
        rossa a livello dell'onClick="login"; a questo punto, dal menu tendina che verrà fuori
        selezioniamo Create 'login(View)' in 'MainActivity' per creare la funzione nel MainActivity.java
         */

    public void login(View view) {

        /* D. creiamo un Toast per capire se la funzione login funziona.
        quando clicchiamo sul bottone dovrebbe uscire un pop-up che dice "preso"
         */

        //Toast.makeText(this, "preso", Toast.LENGTH_SHORT).show();

        // G.
        if (utente.getText().toString().equals(nomeUtente) && password.getText().toString().equals(pass)) {

        /* E. a questo punto creiamo una seconda activity nella qualle saremo mandati una volta loggati:
        tasto destro sulla cartella java del menu di sinistra; new; Activity; Empty Activity.
         */

            // E. scriviamo la funzione per andare alla seconda pagina
            Intent vaiMainActivity2 = new Intent(this, LoggedActivity.class);

            // H.
            vaiMainActivity2.putExtra("msg", utente.getText().toString());

            // E.
            startActivity(vaiMainActivity2);
        }

        //G.
        else {
            Toast.makeText(this, "nome utente e password errati", Toast.LENGTH_SHORT).show();
        }


    }
}