Autore Topic: Login, problema ricezione dal server  (Letto 444 volte)

Offline lafaucialby

  • Nuovo arrivato
  • *
  • Post: 1
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung s4 mini
  • Sistema operativo:
    4.4.2
Login, problema ricezione dal server
« il: 25 Novembre 2015, 17:22:10 CET »
0
Salve,

ho un problema da alcuni giorni con il login della mia app.
In poche parole il client android invia email e pass inseriti dall'utente al server; questo controlla nel database se è presente una riga con questi attributi: se esiste, risponde con un arraylist che contiene tutti i dati sull'utente, altrimenti risponde con un arraylist vuoto e quindi il login non può essere effettuato.
Fino a qui tutto bene; il problema nasce nel momento in cui nel primo tentativo di accesso metto email o pass errati e poi tento l'accesso con i dati corretti;
è come se il mio ObjectInputStream non riceve più l'oggetto dal server, nonostante io non abbia chiuso nulla, infatti stampando l'arraylist risulta vuoto.
La cosa viene aggravata dal fatto che non ricevo né errori né warning :(

Codice client:
Codice (Java): [Seleziona]
public class ConnectToServer2 implements Runnable {

    private Socket mySocket;
    private ObjectOutputStream out;
    private ObjectInputStream in;
    private ArrayList<Object> risp = new ArrayList<>();
    HashMap<Integer,String> azione = new HashMap<>();
    private int go=0,k=0;
    static ConnectToServer2 cts2 = new ConnectToServer2();

    @Override
    public void run() {
        try {
            mySocket = new Socket(ip,6543);
            out = new ObjectOutputStream(mySocket.getOutputStream());
            in = new ObjectInputStream(mySocket.getInputStream());
            Thread comunica = new Thread(){
                public void run(){
                    while(true) {
                        try {
                            if(go==1) {
                                risp = connectForQuery(azione);
                                go=0;
                            }
                        } catch (IOException | SQLException | ClassNotFoundException e) {
                            e.printStackTrace();
                        }
                    }
                }
            };comunica.start();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    public ArrayList connectForQuery(HashMap<Integer,String> azione) throws IOException, SQLException, ClassNotFoundException{
        out.flush();
        out.writeObject(azione);
        risp = (ArrayList<Object>) in.readObject();
        return risp;
    }

    public void setAzione(HashMap<Integer, String> azione) {this.azione = azione;}

    public ArrayList<Object> getRisp() {return risp;}

    public void setGo(int go){this.go=go;}

    public static ConnectToServer2 getCts() {return cts2;}

}

Codice Server:
Codice (Java): [Seleziona]
public void run(){          
        try {
            in = new ObjectInputStream(client.getInputStream());
            out = new ObjectOutputStream(client.getOutputStream());
            this.servizio();
        } catch (IOException ex) {
            Logger.getLogger(NewConnection.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
   
    public void servizio() throws IOException{
        while(go==1){
            try {
                if(log==1){
                    jta.append("Nuovo cliente collegato\n");
                    log=0;
                }
                azione = (HashMap<Integer, String>) in.readObject();
                Set<Map.Entry<Integer,String>> set = azione.entrySet();
                for(Map.Entry<Integer,String> me : set){
                    comando = me.getKey();
                    query = me.getValue();
                }
                if(comando == Globals.LOGIN){
                    ResultSet rs = dbc.Interroga(query);
                    if(rs.next()){
                        for(int i=0;i<7;i++){
                            risp.add(i,rs.getObject(i+1));
                        }
                    }
                    invia();
                    }
                } catch (IOException | SQLException | ClassNotFoundException ex) {
                      jta.append("Cliente disconnesso\n");
                      in.close();
                      out.close();
                      client.close();
                      this.Ferma();
                }
          }
     }
     public void invia() throws IOException{
        out.flush();
        out.writeObject(risp);
        azione.clear(); risp.clear();
     }
    public void setGo(int go) {
        this.go = go;
    }
   
    public void Ferma(){
        this.setGo(0);
        this.interrupt();
    }
   
}

Codice Login:
Codice (Java): [Seleziona]
        azione.put(Globals.LOGIN,query);
        cts2.setAzione(azione);
        cts2.setGo(1);
        attendi(1500);
        risp = cts2.getRisp();

Grazie a tutti. Aspetto un aiuto.