在 jsonArray for 循环之外获取值

Get values outside of jsonArray for loop

我正在为我的项目开发一个杂货应用程序,我得到了这个 JSON 数组

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

我正在使用 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)
...
...

有没有一种方法可以让我在 for 循环之外获取这些项目(id、名字、姓氏、电子邮件...)到 putExtra() 以在另一个 activity?

谢谢!

在循环外初始化变量,然后在循环内修改它们。这是你的代码,其中包含我的答案的实现。

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()

}

您可以将 JSON 数组转换为 Bundles 的 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");

我建议您将响应字符串作为 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)

主要Activity

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