通过intent在活动之间传递JSON数组

时间:2012-01-08 03:22:09

标签: android json android-intent arrays

以前曾经问过这个问题,但这对我来说根本不起作用。所以我想我会再问一次。

我有一个JSONarray,我想使用intent传递给我的第二个活动。

这是我的代码的一部分,它连接到mysql数据库并将有关用户的数据放在JSONarray中。这一切都有效。

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);
            }
    }

我想通过对第二个活动(Loggedin)的意图发送我的完整JSONarray。这样我就可以显示例如ct_email = json_data.getString(“email”);这是第一个活动从mysql获取的数组中的另一个值。

这是关于这个主题的另一个问题: passing jsonarray from 1 activity to another

这个解决方案对我不起作用,因为在第二个活动错误中一直说它无法将bundle转换为intent,我尝试了所有我能想到的。

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

由于


修改

感谢快速回答的人。我是Stackoverflow的新手,所以请原谅我在代码标记等方面的错误。我尽力做到这一点。

但它仍然不适合我。这是我第二次活动的一部分:

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");


}

}

错误是“类型String的方法getString(String)未定义”。 我必须做些蠢事。

2 个答案:

答案 0 :(得分:6)

getExtras()返回Bundle,而不是Intent。像这样更改您的代码并尝试。

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

答案 1 :(得分:6)

您无法在String上调用getString(),因为该方法是在JSONObject NOT String上定义的。因此编译错误。您必须将字符串解析为JSON对象,然后您可以使用它来提取该数据:

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");
}