2012-01-08 39 views
5

这已被问过一次,但对我来说根本不起作用。所以我想我会再问一次。通过意图在活动之间传递JSON数组

我有一个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(字符串)是未定义的类型字符串”。 我一定在做一些愚蠢的事情。

回答

6

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

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

+1了正确答案,请确保您标记代码代码下一次:) – MByD 2012-01-08 03:56:28

+0

感谢。但仍然没有工作。我编辑了我的第一篇文章。 – 2012-01-08 04:04:25

+0

你有什么问题? – kosa 2012-01-08 04:05:40

6

您不能在字符串上调用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"); 
} 
+0

这是我错过的最后一步。谢谢! – 2012-01-08 04:26:32