Autore Topic: Collegare App Android a pagina JSP  (Letto 293 volte)

Offline panda

  • Nuovo arrivato
  • *
  • Post: 1
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Collegare App Android a pagina JSP
« il: 30 Maggio 2015, 16:33:11 CEST »
0
Sto provando a connettere la mia applicazione Android con una pagina JSP, per ricevere dei dati da un database sullo stesso server della pagina web. La pagina in jsp funziona bene, qui metto il codice:

associazioni.jsp
Codice (Java): [Seleziona]
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
    <%@ page import="java.sql.Connection" %>
    <%@ page import="java.sql.DriverManager" %>
    <%@ page import="java.sql.ResultSet" %>
    <%@ page import="java.sql.ResultSetMetaData" %>
    <%@ page import="java.sql.SQLException" %>
    <%@ page import="java.sql.Statement" %>
<%
try {

    Class.forName("com.mysql.jdbc.Driver").newInstance();
    // crea un collegamento con il database "csv"
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/csv", "username", "password");
    Statement stat = conn.createStatement();
    // esegue la query di selezione
    ResultSet rs = stat.executeQuery("SELECT * FROM associazioni");

    // scrive che tutto è andato a buon fine
    out.println("OK");

    // scrive i dati
    while (rs.next()) {
        // id_associazione
        out.println(rs.getString(1));
        // nome
        out.println(rs.getString(2));
        // indirizzo
        out.println(rs.getString(3));
        // telefono
        out.println(rs.getString(4));
        // contatti
        out.println(rs.getString(5));
        // descrizione
        out.println(rs.getString(6));
    }

    // scrive che il processo è concluso
    out.println("END");

    // chiude la connessione
    stat.close();
    conn.close();

// cattura le eccezioni
} catch (Exception e) {
    // scrive il tipo di eccezione
    out.println(e.toString());
}
%>

Come potete vedere voi stessi, se andate qua: http://liceocuneoweb2.linuxd.org:8080/CSV/associazioni.jsp[/url] la pagina è funzionante, scrive "OK" all'inizio e "END" alla fine. I problemi sorgono quando provo ad accedervi dall'applicazione, vi scrivo il codice, se riusciste a spiegarmi quello che sbaglio o a suggerirmi un modo migliore, ve ne sarei eternamente grati!

MainActivity.java
Codice (Java): [Seleziona]
public class MainActivity extends Activity {

    private TextView resultsTV;
    private BufferedReader reader;
    private String result;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        resultsTV = (TextView) findViewById(R.id.results);
        new RetrieveResults().execute();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    private void leggi() {
        try {
            ArrayList<String> pagina = new ArrayList<String>();
            while (true) {
                String r = this.reader.readLine();
                if (r.equals("END")) {
                    break;
                } else {
                    pagina.add(r);
                }
            }
            scriviResults(pagina);
        } catch (Exception e) {
            resultsTV.setText(e.toString());
        }
    }

    private void scriviResults(ArrayList<String> pagina) {
        for (int i=0; i<pagina.size(); i++) {
            resultsTV.append(pagina.get(i) + "\n");
        }
    }

    private class RetrieveResults extends AsyncTask {
        @Override
        protected Object doInBackground(Object[] params) {
            collegati();
            return null;
        }

        @Override
        protected void onPostExecute(Object o) {
            if (result.equals("OK")) {
                leggi();
            } else {
                resultsTV.setText("Errore");
            }
        }
    }

    private void collegati() {
        try {
            String link = "[url]http://liceocuneoweb2.linuxd.org:8080/CSV/associazioni.jsp";
            URL url = new URL(link);
            URLConnection conn = url.openConnection();
            reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            result = reader.readLine();
        } catch (Exception e) {
            resultsTV.setText(e.toString());
        }
    }
}

Questo programma non funziona come vorrei, dovrebbe connettersi al server e iniziare a leggere le righe, la prima stringa è "OK", quindi leggere le altre fino a "END" e inserire tutti i dati in un ArrayList<String>. Alla fine dovrebbe stampare questo array tramite una TextView. A volte mi scrive "Errore", altre non riesce a connettersi, ma comunque non stampa tutta la tabella del database. Non so cosa provare, a me questo codice sembra giusto. Grazie per il vostro tempo!