Autore Topic: RadioButton non riesco ad inserire un dato tramite db  (Letto 746 volte)

Offline Andre

  • Utente junior
  • **
  • Post: 62
  • Respect: +1
    • Mostra profilo
RadioButton non riesco ad inserire un dato tramite db
« il: 11 Maggio 2011, 14:59:16 CEST »
0
Ciao a tutti,

sono un novizio Android, quindi le mie conoscenze sono abbastanze limitate.
Sto sviluppando un'app dedita al mobile learning: si tratta di quiz single/multiple choice.
I quiz e relative risposte si trovano su un db remoto.
La connessione al db e relativa query la gestisco tramite questo script in php:

Codice: [Seleziona]
    <?php

$server = "link server";
$database = "nome db";
        $user = "nome_user"; //per motivi di sicurezza ho tolto il reale user
        $psw = "password";

$connect = @mysql_connect($server, $user, $psw);
       
        if (!@mysql_select_db($database,$connect)) {
                //Se non posso connettermi rimando l'utente nella Home Page
                exit("Impossibile accedere al server MySQL. Torna alla <a href='index.php'>Home page</a>.");
        }
        else
                mysql_error($connect);
?>
<?php

    $q=mysql_query("SELECT question FROM `wp_mtouchquiz_question` WHERE id='1'");
     $q2=mysql_query("SELECT answer FROM `wp_mtouchquiz_answer` WHERE quiz_id='1'");

if (!$q) {
    $message  = 'Invalid query: ' . mysql_error() . "\n";
    $message .= 'Whole query: ' . $query;
    die($message);
}


while ($row = mysql_fetch_assoc($q)) {
echo $row['question'];
}
while ($row2 = mysql_fetch_assoc($q2)){

   
    echo $row2['answer'];
   
}

?>



Ho sviluppato il layout con un bottone. Se clicco sul bottone viene visualizzata una TextView con il risultato della query. Successivamente ciò che vorrei è inserire praticamente lo stesso risultato ottenuto all'interno della TextView dentro ai vari button. Purtroppo il risultato non viene visualizzato.

Codice: [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/background"
    >
<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="5px"
    android:text="@string/url_string"
    />

<Button
android:id="@+id/button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/request"
/>
<ScrollView
android:layout_width="fill_parent"
android:layout_height="wrap_content">
    <TextView
    android:id="@+id/content"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="5px"
    />
</ScrollView>
<RadioButton android:id="@+id/radioButton1" android:layout_width="wrap_content" android:layout_height="wrap_content"></RadioButton>
<RadioButton android:id="@+id/radioButton2" android:layout_width="wrap_content" android:layout_height="wrap_content"></RadioButton>
<RadioButton android:id="@+id/radioButton3" android:layout_width="wrap_content" android:layout_height="wrap_content"></RadioButton>
<RadioButton android:id="@+id/radioButton4" android:layout_width="wrap_content" android:layout_height="wrap_content"></RadioButton>
</LinearLayout>


Ecco la mia classe android DatabaseActivity

Codice: [Seleziona]
package com.android.quizzle;

import java.net.URI;
import java.util.ArrayList;
import java.util.StringTokenizer;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;



public class DatabaseActivity extends Activity {
    private static final String URL = "http://tesisiam.altervista.org/connect.php";
    String risposta;
    HttpEntity httpEntity;
       

        /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.managerdb);
       
       
        final Button btnFetch = (Button)findViewById(R.id.button);
        final TextView txtResult = (TextView)findViewById(R.id.content);
        final RadioButton radio1 = (RadioButton)findViewById(R.id.radioButton1);
        final RadioButton radio2 = (RadioButton)findViewById(R.id.radioButton2);
        final RadioButton radio3 = (RadioButton)findViewById(R.id.radioButton3);
        final RadioButton radio4 = (RadioButton)findViewById(R.id.radioButton4);
     

       
        btnFetch.setOnClickListener(new Button.OnClickListener(){
            public void onClick(View v){
                getRequest(txtResult, radio1, radio2,radio3,radio4);
            }
        });
    }
   
    public void getRequest(TextView txtResult, RadioButton radio1, RadioButton radio2, RadioButton radio3, RadioButton radio4){
        HttpClient client = new DefaultHttpClient();
        HttpGet request = new HttpGet(URL);
       

try{
               
               
            HttpResponse response = client.execute(request);
            txtResult.setText(HttpHelper.request(response));
            radio1.setText(HttpHelper.request(response));
            radio2.setText(HttpHelper.request(response));
            radio3.setText(HttpHelper.request(response));
            radio4.setText(HttpHelper.request(response));
        }catch(Exception ex){
            txtResult.setText("Failed!");
        }
        }
     
    }


Ed ecco la classe Httphelper che gestisce la richiesta:

Codice: [Seleziona]
package com.android.quizzle;


import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.http.HttpResponse;

import android.util.Log;

public class HttpHelper {
   
    public static String request(HttpResponse response){
        String result = "";
        try{
            InputStream in = response.getEntity().getContent();
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            StringBuilder str = new StringBuilder();
            String line = null;
            while((line = reader.readLine()) != null){
                str.append(line + "\n");
            }
            in.close();
            result = str.toString();
        }
        catch(Exception e){
               
                        Log.e("log_tag", "Error converting result "+e.toString());
               
                }
        return "Question: " + result;
    }
}

Se osservo il log il risultato è questo:

Error converting result java.lang.IllegalStateException: Content has been consumed.

Documentandomi sul forum, ho notato la classe ResponseHandler ma non riesco a implementarla... Forse con quella potrei risolvere un pò di problemi.

Ringrazio tutti per l'aiuto.
Andre

Offline Andre

  • Utente junior
  • **
  • Post: 62
  • Respect: +1
    • Mostra profilo
Re:RadioButton non riesco ad inserire un dato tramite db
« Risposta #1 il: 12 Maggio 2011, 15:04:46 CEST »
0
Ok, ho risolto. Invece di ripetere per quattro volte il metodo setText(HttpHelper.request(response));
ho creato una String appoggio = HttpHelper.request(response);

successivamente l'ho inserita per 4 volte all'interno del metodo setText et voilà... risultato ottenuto.