2012-01-08 11 views
5

Esto se ha preguntado una vez antes, pero eso no funcionó para mí en absoluto. Así que pensé que volvería a preguntar.Pasar matriz JSON entre actividades a través del intento

Tengo un JSONarray que quiero pasar a mi segunda actividad con un intento.

Esto es parte de mi código que se conecta a una base de datos mysql y pone datos sobre un usuario en un JSONarray. Todo esto funciona hasta ahora.

try{ 
    BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); 
    sb = new StringBuilder(); 
    sb.append(reader.readLine() + "\n"); 

    String line="0"; 
    while ((line = reader.readLine()) != null) { 
     sb.append(line + "\n"); 
    } 
    is.close(); 
    result=sb.toString(); 

    }catch(Exception e){ 
     Log.e("log_tag", "Error converting result "+e.toString()); 
    } 

String ct_user; 
String ct_pass; 

Intent personal = new Intent(Home.this, Loggedin.class); 

try{ 
    jArray = new JSONArray(result); 
    JSONObject json_data=null; 
    json_data = jArray.getJSONObject(0); 
    ct_user = json_data.getString("user"); 
    ct_pass = json_data.getString("pass"); 


    if (passwordstring.equals(ct_pass)){ 

     Bundle b = new Bundle();     
     b.putString("userdata",json_data.toString()); 
     personal.putExtras(b); 

     startActivity(personal); 
      } 
    } 

me gustaría enviar mi completa JSONArray través de una intención de mi segunda actividad (loggedin). Para que pueda mostrar, por ejemplo, ct_email = json_data.getString ("email"); que es otro valor en la matriz que obtiene la primera actividad de mysql.

Esta era la otra pregunta sobre este tema: passing jsonarray from 1 activity to another

Esa solución no funcionó para mí, porque en los segundos errores de actividad mantuvo diciendo que no podía convertir paquete a la intención, he intentado todo lo que podía pensar de.

Intent b = getIntent().getExtras(); 
String userdata=b.getString("userdata"); 

Gracias


EDITAR

gracias por los chicos respuestas rápidas. Soy nuevo en Stackoverflow así que disculpe mis errores con respecto a las marcas de código, etc. Intento hacerlo todo correctamente.

Pero todavía no funciona para mí. Esto es parte de mi segunda actividad:

public class Loggedin extends Activity { 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.loggedin); 

    myfunction(); 

} 

public void myfunction(){ 

    Bundle b = getIntent().getExtras(); 
    String userdataArray = b.getString("userdata"); 

    String ct_email; 
    ct_email = userdataArray.getString("email"); 


} 

} 

El error es el "getString método (String) está definida para el tipo String". Debo estar haciendo algo estúpido.

Respuesta

6

getExtras() devuelve paquete, no intencionado. Cambia tu código así e intenta.

Bundle b = getIntent().getExtras(); 
String userdata=b.getString("userdata"); 
+0

+1 para la respuesta correcta, por favor asegúrese de marcar el código como código próxima vez :) Gracias – MByD

+0

. Sin embargo, todavía no funciona. He editado mi primera publicación. –

+0

¿Cuál es el problema que está teniendo? – kosa

6

No se puede llamar getString() en la cadena debido a que el método se define en JSONObject NO cadena. De ahí el error del compilador. Usted tiene que analizar la cadena en los objetos JSON a continuación, puede utilizar eso para sacar esos datos:

public void myfunction(){ 

    Bundle b = getIntent().getExtras(); 

    // parse the JSON passed as a string. 
    JSONObject json = new JSONObject(b.getString("userdata")); 
    String ct_email = json.getString("email"); 
} 
+0

Este fue el último paso que perdí. ¡Gracias! –

Cuestiones relacionadas