Autore Topic: Crash applicazione richiesta http post al server  (Letto 508 volte)

Offline pinuzzo999

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Htc Desire 500
  • Sistema operativo:
    Windows 7
Crash applicazione richiesta http post al server
« il: 02 Giugno 2014, 15:36:22 CEST »
0
Salve a tutti, mi sto avvicinando adesso al mondo della programmazione android, ho intenzione di fare una piccola app che possa dialogare con il server tramite richieste post, ma ogni volta che cerco di inviare la richiesta premendo il pulsante, l'applicazione crasha.
Non sapendo più dove sbattere la testa, in quanto non riesco a trovare la causa dell'errore dal log, mi affido a voi.
Di seguito riporto il codice dell'app:
Codice (Java): [Seleziona]
package it.pino.miaapp;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import it.pino.miaapp.R;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;

public class MiaApp extends Activity{
        /*Definisco le variabili principali*/
        private EditText chiediEditText;
        private Button inviaButton;
        private TextView risposteTextView;
        private String passKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
               
                /*Ricavo i dagli elementi della gui*/
                EditText chiediEditText = (EditText)findViewById(R.id.chiediEditText);
                Button inviaButton = (Button)findViewById(R.id.inviaButton);
                TextView risposteTextView = (TextView)findViewById(R.id.risposteTextView);
               
                inviaButton.setOnClickListener(rispondiListener);//imposto un listener per il pulsante
               
        }
        private void rispondi(String risposta){
                if(risposta != null && risposta.length() > 0){//controllo che vi sia una risposta
                        risposteTextView.append(risposta);
                }else{
                        risposteTextView.append("Impossibile soddisfare la richiesta");
                }//fine else
        }//fine metodo
        public OnClickListener rispondiListener = new OnClickListener(){
                @Override
                public void onClick(View v) {
                        // TODO Auto-generated method stub
                        /*Definisco la richiesta al server*/
                        HttpClient httpclient = new DefaultHttpClient();
                        HttpPost httppost = new HttpPost("http://www.indirizzo.com/responder.php");

                            try {
                               /* Imposto i valori da inviare*/
                                String risposta = null;
                                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
                                nameValuePairs.add(new BasicNameValuePair("domanda", "prova"));//invio al server il contenuto dell'input
                                nameValuePairs.add(new BasicNameValuePair("passKey", passKey));//la password per ottenere risposta
                                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

                                /*Eseguo la richiesta*/
                                HttpResponse response = httpclient.execute(httppost);
                                HttpEntity entity = response.getEntity();                              
                                if (entity != null) {
                                    InputStream instream = entity.getContent();
                                    risposta = convertStreamToString(instream);
                                }
                                        rispondi(risposta);//stampo la risposta
                            } catch (ClientProtocolException e) {
                                // TODO Auto-generated catch block
                                String response = e.toString();
                                        rispondi(response.toString());//stampo la risposta
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                String response = e.toString();
                                        rispondi(response.toString());//stampo la risposta
                            }  
                }//fine funzione
        };
        public String convertStreamToString(InputStream inputStream) throws IOException {
                if (inputStream != null) {
                        StringBuilder sb = new StringBuilder();
                        String line;
                        try {
                                BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
                                while ((line = reader.readLine()) != null) {
                                        sb.append(line).append("\n");
                                }
                        } finally {
                                inputStream.close();
                        }
                        return sb.toString();
                } else {
                        return "";
                }
        }

}
Qui il logcat dell'errore

Codice: [Seleziona]
06-02 12:58:23.426: E/AndroidRuntime(1235): FATAL EXCEPTION: main
06-02 12:58:23.426: E/AndroidRuntime(1235): Process: it.pino.miaapp, PID: 1235
06-02 12:58:23.426: E/AndroidRuntime(1235): android.os.NetworkOnMainThreadException
06-02 12:58:23.426: E/AndroidRuntime(1235):         at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
06-02 12:58:23.426: E/AndroidRuntime(1235):         at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
06-02 12:58:23.426: E/AndroidRuntime(1235):         at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
06-02 12:58:23.426: E/AndroidRuntime(1235):         at java.net.InetAddress.getAllByName(InetAddress.java:214)
06-02 12:58:23.426: E/AndroidRuntime(1235):         at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
06-02 12:58:23.426: E/AndroidRuntime(1235):         at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
06-02 12:58:23.426: E/AndroidRuntime(1235):         at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
06-02 12:58:23.426: E/AndroidRuntime(1235):         at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
06-02 12:58:23.426: E/AndroidRuntime(1235):         at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
06-02 12:58:23.426: E/AndroidRuntime(1235):         at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
06-02 12:58:23.426: E/AndroidRuntime(1235):         at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
06-02 12:58:23.426: E/AndroidRuntime(1235):         at it.pino.miaapp.miaapp$1.onClick(MiaApp.java:82)
06-02 12:58:23.426: E/AndroidRuntime(1235):         at android.view.View.performClick(View.java:4438)
06-02 12:58:23.426: E/AndroidRuntime(1235):         at android.view.View$PerformClick.run(View.java:18422)
06-02 12:58:23.426: E/AndroidRuntime(1235):         at android.os.Handler.handleCallback(Handler.java:733)
06-02 12:58:23.426: E/AndroidRuntime(1235):         at android.os.Handler.dispatchMessage(Handler.java:95)
06-02 12:58:23.426: E/AndroidRuntime(1235):         at android.os.Looper.loop(Looper.java:136)
06-02 12:58:23.426: E/AndroidRuntime(1235):         at android.app.ActivityThread.main(ActivityThread.java:5017)
06-02 12:58:23.426: E/AndroidRuntime(1235):         at java.lang.reflect.Method.invokeNative(Native Method)
06-02 12:58:23.426: E/AndroidRuntime(1235):         at java.lang.reflect.Method.invoke(Method.java:515)
06-02 12:58:23.426: E/AndroidRuntime(1235):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
06-02 12:58:23.426: E/AndroidRuntime(1235):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
06-02 12:58:23.426: E/AndroidRuntime(1235):         at dalvik.system.NativeStart.main(Native Method)

Offline eagledeveloper

  • Translate Team
  • Utente senior
  • ****
  • Post: 516
  • Respect: +37
    • Google+
    • 347516210
    • dark_pinz
    • @WandDStudios
    • Mostra profilo
    • W&D Studios
  • Dispositivo Android:
    HTC One X e HTC One
  • Play Store ID:
    W%26D+Studios
  • Sistema operativo:
    Ubuntu / Windows 7
Re:Crash applicazione richiesta http post al server
« Risposta #1 il: 02 Giugno 2014, 15:57:32 CEST »
0
Non puoi fare richiesta Http dal Main Thread, devi farle in un thread separato.
I numeri contano molto di più del seme.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Crash applicazione richiesta http post al server
« Risposta #2 il: 02 Giugno 2014, 17:37:00 CEST »
0
La ragione dell'errore ed un modo molto semplice di risolverlo lo trovi qua:

[facile] utilizzo della libreria android-async-http - Android Developers Italia
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline pinuzzo999

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Htc Desire 500
  • Sistema operativo:
    Windows 7
Re:Crash applicazione richiesta http post al server
« Risposta #3 il: 03 Giugno 2014, 15:52:46 CEST »
0
Grazie mille ho risolto :D, non sapevo di questa limitazione.