【问题标题】:Passing JSON array between activities through intent通过意图在活动之间传递 JSON 数组
【发布时间】:2012-02-05 04:52:51
【问题描述】:

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

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

这是我的代码的一部分,它连接到 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);
            }
    }

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

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

那个解决方案对我不起作用,因为在第二个活动中,错误一直说它无法将捆绑包转换为意图,我尝试了我能想到的一切。

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


}

}

错误是“方法 getString(String) 未定义为 String 类型”。 我一定是在做傻事。

【问题讨论】:

    标签: android json android-intent arrays


    【解决方案1】:

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

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

    【讨论】:

    • +1 为正确答案,请确保您下次将代码标记为代码:)
    • 您遇到了什么问题?
    • @BinyaminSharet,我以为我做到了。下次我会确定的。
    • 查看我的编辑。当我尝试从数组中获取字符串时,Eclipse 给我错误“方法 getString(String) 未定义类型字符串”。
    • 这里你刚刚得到了 json 作为 String,你需要再次构造为 JSonObject 来获取电子邮件。您不能直接在 userdataArray 上调用 getString
    【解决方案2】:

    您不能在 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");
    }
    

    【讨论】:

    • 这是我错过的最后一步。谢谢!
    猜你喜欢
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    • 2018-01-05
    • 2021-09-08
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多