简体   繁体   English

获取 jsonArray for 循环之外的值

[英]Get values outside of jsonArray for loop

I'm working on a grocery app for my project and I got this JSON Array我正在为我的项目开发一个杂货应用程序,我得到了这个 JSON 数组

[
    {   
        "msg":"success",
        "id":"1904",
        "firstname":"john",
        "lastname":"doe",
        "email":"johndoe@gmail.com",
        "mobile":"10111213",
        "appapikey ":"aba27d8447acd61152ad716696465c27"
    }
]

And I'm using Volley StringRequest我正在使用Volley StringRequest

val stringRequest = StringRequest(Request.Method.GET, url, Response.Listener {

  var jsonArrayInfo = JSONArray(it)

  for(i in 0 until(jsonArrayInfo.length())) {

     var userInfo = jsonArrayInfo.getJSONObject(i)

     var fName = userInfo.getString("firstname")
     var lName = userInfo.getString("lastname")
     var eMail = userInfo.getString("email")
     var moBile = userInfo.getString("mobile")
     var apiKey = userInfo.getString("appapikey ")

     Toast.makeText(view.context, "Welcome $apiKey", Toast.LENGTH_SHORT).show()

}

var i = Intent(view.context, MainActivity::class.java)
//I want to bring the values out here
//to use them in another class with putExtra()
startActivity(i)
...
...

Is there a way I can get those items (id, firstname, lastname, email,...) outside of the for loop to to putExtra() to use them in another activity?有没有办法让我在for循环之外获取这些项目(id、名字、姓氏、email、...)到 putExtra() 以在另一个活动中使用它们?

Thank you!谢谢!

Initialize your variables out of the loop then modify them inside the loop.在循环外初始化变量,然后在循环内修改它们。 Here is your code with implementations of my answer.这是您的代码以及我的答案的实现。

val stringRequest = StringRequest(Request.Method.GET, url, Response.Listener {

var jsonArrayInfo = JSONArray(it)
var fName = ""
var lName = ""
var eMail = ""
var moBile = ""
var apiKey = ""

for(i in 0 until(jsonArrayInfo.length())) {

    var userInfo = jsonArrayInfo.getJSONObject(i)

    fName = userInfo.getString("firstname")
    lName = userInfo.getString("lastname")
    eMail = userInfo.getString("email")
    moBile = userInfo.getString("mobile")
    apiKey = userInfo.getString("appapikey ")

    Toast.makeText(view.context, "Welcome $apiKey", Toast.LENGTH_SHORT).show()

}

You could convert the JSON Array to an ArrayList of Bundles and then use putParcelableArrayListExtra .您可以将 JSON 数组转换为 ArrayList 的捆绑包,然后使用putParcelableArrayListExtra

val stringRequest = StringRequest(Request.Method.GET, url, Response.Listener {

  var jsonArrayInfo = JSONArray(it)

  val bundles = ArrayList<Bundle>()

  for(i in 0 until(jsonArrayInfo.length())) {

     var userInfo = jsonArrayInfo.getJSONObject(i)
     val bundle = Bundle()

     bundle.putCharSequence(userInfo.getString("firstname"))
     bundle.putCharSequence(userInfo.getString("lastname"))
     bundle.putCharSequence(userInfo.getString("email"))
     bundle.putCharSequence(userInfo.getString("mobile"))
     bundle.putCharSequence(userInfo.getString("appapikey "))

     bundles.add(bundle)
  }

  var i = Intent(view.context, MainActivity::class.java)
  i.putParcelableArrayListExtra("data", bundles)
  startActivity(i)
val stringRequest = StringRequest(Request.Method.GET, url, Response.Listener {
ArrayList<ArrayList<String>> arrayLists=new ArrayList<>();
var jsonArrayInfo = JSONArray(it)

  for(i in 0 until(jsonArrayInfo.length())) {
 ArrayList arr= new ArrayList();
 var userInfo = jsonArrayInfo.getJSONObject(i)

 var fName = userInfo.getString("firstname")
 var lName = userInfo.getString("lastname")
 var eMail = userInfo.getString("email")
 var moBile = userInfo.getString("mobile")
 var apiKey = userInfo.getString("appapikey ")
 arr.add(fName);
 arr.add(lName);
 arr.add(eMail);
 arr.add(moBile);
 arr.add(apiKey);
 arrayLists.add(arr);
 Toast.makeText(view.context, "Welcome $apiKey", Toast.LENGTH_SHORT).show()

 }
//to send another Activity
Intent i = new Intent(this, MainActivity.class)
intent.putExtra("mylist", myList);
startActivity(i)

//receive Another Activity
ArrayList<ArrayList<String>> myList = (ArrayList<ArrayList<String>)) 
getIntent().getSerializableExtra("mylist");

I would suggest you to pass the response string as a stringExtra of the Intent and deserialize it in the other Activity我建议您将响应字符串作为 Intent 的 stringExtra 传递并在另一个 Activity 中反序列化它

val stringRequest = StringRequest(Request.Method.GET, url, Response.Listener {

var i = Intent(view.context, MainActivity::class.java)
i.putExtra("response", it.toString())
startActivity(i)

In MainActivityMainActivity

  val res = intent.getStringExtra("response")
  var jsonArrayInfo = JSONArray(res)

  for(i in 0 until(jsonArrayInfo.length())) {

     var userInfo = jsonArrayInfo.getJSONObject(i)

     var fName = userInfo.getString("firstname")
     var lName = userInfo.getString("lastname")
     var eMail = userInfo.getString("email")
     var moBile = userInfo.getString("mobile")
     var apiKey = userInfo.getString("appapikey ")

     Toast.makeText(context, "Welcome $apiKey", Toast.LENGTH_SHORT).show()
  }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM