Ho modificato il codice per l'asynctask e renderla un po più dinamica:
codice:
public class ClientServerHttpActivity extends Activity {
public String barcode;
public String stringaFinale;
public TextView textviewDatiRicevuti;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_client_server_http);
EditText etbarcode = (EditText) findViewById(R.id.barcode);
barcode=etbarcode.getText().toString();
textviewDatiRicevuti = (TextView) findViewById(R.id.datiRicevuti);
Button buttonInviaDati = (Button) findViewById(R.id.buttonInviaDati);
buttonInviaDati.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
//invio richiesta
new BackgroundAsyncTask().execute();
//textviewDatiRicevuti.setText(inviaDati(barcode));
}
});
}
public class BackgroundAsyncTask extends AsyncTask<Void, Void, Void> {
private ProgressDialog pDialog;
@Override
protected Void doInBackground(Void... params) {
inviaDati(barcode);
return null;
}
@Override
protected void onPreExecute() {
pDialog = ProgressDialog.show(ClientServerHttpActivity.this,"Prego attendere...", "Caricamento...", true);
}
@Override
protected void onPostExecute(Void result) {
pDialog.dismiss();
textviewDatiRicevuti.setText(stringaFinale);
}
}
public String inviaDati(String barcode){
String result = "";
String stringaFinale = "";
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("bc",barcode));
InputStream is = null;
//http post
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://10.0.2.2/supermercato/testp.php");
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
}catch(Exception e){
Log.e("TEST", "Errore nella connessione http "+e.toString());
}
if(is != null){
//converto la risposta in stringa
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result=sb.toString();
}catch(Exception e){
Log.e("TEST", "Errore nel convertire il risultato "+e.toString());
}
//parsing dei dati arrivati in formato json
try{
JSONArray jArray = new JSONArray(result);
for(int i=0;i<jArray.length();i++){
JSONObject json_data = jArray.getJSONObject(i);
Log.i("TEST","prezzo: "+json_data.getDouble("prezzo")+
", categoria: "+json_data.getString("categoria")+
", descrizione: "+json_data.getString("descrizione")
);
stringaFinale = "Prezzo: euro " + json_data.getDouble("prezzo") + "\nCategoria prodotto: " + json_data.getString("categoria") + "\nNome prodotto: " + json_data.getString("descrizione") + "\n\n";
}
}
catch(JSONException e){
Toast.makeText(getBaseContext(), "Prodotto non trovato!", Toast.LENGTH_LONG).show();
}
}
else{//is è null e non ho avuto risposta
}
return stringaFinale;
}
}
l'applicazione parte ma poi crasha. perchè???
sicuramente ci saranno errori di programmazione dovuti alla mia inesperienza! aiutatemiiiiiiiiiiiii