Получить значения за пределами jsonArray для цикла - PullRequest
1 голос
/ 18 октября 2019

Я работаю над продуктовым приложением для своего проекта, и я получил этот массив 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, чтобы положитьExtra (), чтобы использовать их в другой деятельности?

Спасибо!

Ответы [ 4 ]

1 голос
/ 18 октября 2019

Я бы посоветовал вам передать строку ответа как stringExtra of the Intent и десериализовать ее в другой операции

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 MainActivity

  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()
  }
1 голос
/ 18 октября 2019

Вы можете преобразовать JSON Array в ArrayList из Bundles и затем использовать 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)
1 голос
/ 18 октября 2019
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");
1 голос
/ 18 октября 2019

Инициализируйте ваши переменные вне цикла, затем измените их внутри цикла. Вот ваш код с реализациями моего ответа.

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

}
...