Why this for loop is exiting before the end? - android

I have this for loop which fill Mymatrix (17,27) from a JSON file.
The problem is that when I debug it, I find that it gets out the loop every time when i=96 ie j=3 and k=15. (I mention also that len=459)
try
{
JSONObject myjson = new JSONObject(the_json);
JSONArray nameArray = myjson.Names();
len = nameArray.Length();
for (int i = 0; i < len; i++)
{
name = nameArray.GetString(i);
JSONArray json_array = myjson.GetJSONArray(name);
j = (int)(Integer.ValueOf(name)) / 27;
k = (int)(Integer.ValueOf(name)) % 27;
myMatrix[j, k] = json_array.GetDouble(a); //a=0
}
}
catch (JSONException e)
{
e.PrintStackTrace();
}
Can you please help and figure out why I am having this problem?

Related

Android Json Handling issue

I want to display updated_at data to user only if value of password in folder Array is null.
JSONArray jsonArray = object.getJSONArray("data");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject dataa = jsonArray.getJSONObject(i);
JSONArray jsonArray2 = dataa.getJSONArray("folder");
for (int i2 = 0; i2 < jsonArray.length(); i2++)
{
JSONObject dataa2 = jsonArray2.getJSONObject(i2);
String password = dataa2.getString("password");
if (password.equals("null") || password.equals(null))
{
//Display data
}
else
{
// dont Display data
}
}
Is there a way to do it?
Rectify your inner loop condition section.
JSONArray jsonArray2 = dataa.getJSONArray("folder");
for (int i2 = 0; i2 < jsonArray2.length(); i2++)
{
JSONObject dataa2 = jsonArray2.getJSONObject(i2);

same number is giving output for mobile_number string

Hi in the below code below mobile is
mobile:["9841910799","04651226127","9639355527","04428213134","8939597777","04428223060","04428311001","9822363585","8318043412","9919588852","9919588852","9919588852","9828722750","8875518030","9862145100","9414135437","9414135437"]
String mobile=sharedPreferences.getString("mobile",null);
JSONArray jsonArray = null;
try {
jsonArray = new JSONArray(mobile);
String[] strArr = new String[jsonArray.length()];
for (int i = 0; i < jsonArray.length(); i++) {
strArr[i] = jsonArray.getString(i);
mobile_number1= String.valueOf(strArr[i]);
for(int j=0;j<mobile_number1.length();j++){
mobile_number= String.valueOf(mobile_number1.toCharArray());
}
}
} catch (JSONException e) {
e.printStackTrace();
}
For every time I am getting the single number
expected output
mobile_number=9841910799
9841910797
etc
Try bellow updated code
String mobile=sharedPreferences.getString("mobile",null);
JSONArray jsonArray = null;
try {
jsonArray = new JSONArray(mobile);
String[] strArr = new String[jsonArray.length()];
for (int i = 0; i < jsonArray.length(); i++) {
strArr[i] = jsonArray.getString(i);
mobile_number1= String.valueOf(strArr[i]);
for(int j=0;j<mobile_number1.length();j++){
mobile_number=mobile_number+ String.valueOf(mobile_number1.toCharArray());
}
}
} catch (JSONException e) {
e.printStackTrace();
}
As per my understanding the problem, you are assigning value every time as the new in mobile_number variable, not assigning previous plus new number.

Parsing JSON for android the JSON is valid but cant get anything back

I'm having trouble getting the String "lf" in this case North Atlantic Treaty Organization
[
{
"sf": "NATO",
"lfs": [
{
"lf": "North Atlantic Treaty Organization",
"freq": 13,
"since": 2001,
"vars": [
{
"lf": "North Atlantic Treaty Organization",
"freq": 13,
"since": 2001
}
]
}
]
}
]
//MY CODE
try {
JSONObject jsonObject = new JSONObject(result);
JSONArray jsonArray = jsonObject.getJSONArray(ITEM_TAG);
for(int i = 0; i < jsonArray.length(); i++) {
JSONObject c = jsonArray.getJSONObject(i);
String name = c.getString("lf");
acronyms = new ArrayList<>();
acronyms.add(name);
}
} catch (Exception e) {
}
try {
JSONArray jsonArray1 = new JSONArray(JsonString);
for (int i = 0; i <= jsonArray1.length(); i++) {
JSONObject jsonObject2 = jsonArray1.getJSONObject(i);
String mStrSf = jsonObject2.getString("sf");
Toast.makeText(getApplicationContext(),mStrSf.toString(), Toast.LENGTH_LONG).show();
JSONArray jsonArray3 = jsonObject2.getJSONArray("lfs");
for (int j = 0; j <= jsonArray3.length(); j++) {
JSONObject jsonObject4 = jsonArray3.getJSONObject(j);
String mStrIf = jsonObject4.getString("lf");
String mStrFreq = jsonObject4.getString("freq");
String mStrSince = jsonObject4.getString("since");
Toast.makeText(getApplicationContext(),mStrIf+"\n"+mStrFreq+"\n"+mStrSince, Toast.LENGTH_LONG).show();
JSONArray jsonArray5 = jsonObject4.getJSONArray("vars");
for (int k = 0; k <= jsonArray5.length(); k++) {
JSONObject jsonObject6 = jsonArray5.getJSONObject(k);
String mStrIf1 = jsonObject6.getString("lf");
String mStrFreq1 = jsonObject6.getString("freq");
String mStrSince1 = jsonObject6.getString("since");
Toast.makeText(getApplicationContext(),mStrIf1+"\n"+mStrFreq1+"\n"+mStrSince1, Toast.LENGTH_LONG).show();
}
}
}
} catch (JSONException e) {
e.printStackTrace();
}
You are interpreting the json in a wrong way... if you analyse the json chain you will get this:
as you can see you have an array inside and array...
hope the picture helps you to see it better.
You have to again loop through the jsonArray to get "lf" key value.
Try this...
try {
JSONObject jsonObject = new JSONObject(result);
JSONArray jsonArray = jsonObject.getJSONArray(ITEM_TAG);
for(int i = 0; i < jsonArray.length(); i++) {
JSONObject c = jsonArray.getJSONObject(i);
JSONArray array = c.getJSONArray("lfs");
for(int j=0;j<array.length();j++){
JSONObject obj = array.getJSONObject(j);
String name = obj.getString("lf");
}
}
} catch (Exception e) {
}

Nested JSONArray Record Parsing Issue Android

I am making a App which receives a JSON Data From Server, User will select a value from Spinner like 0,1,2... and so on, On the Basis of number selection JSON will return a data from user defined index like 0,1.. i don't know how to parse a inner JSON Data in Android
json = new JSONObject(JSONParser.Result);
JSONArray jArray = json.getJSONArray("data");
StopElement _stop = new StopElement();
Log.d("JSON Algo Result", json.toString());
if (jArray!=null) {
for (int i = 0; i < jArray.length(); i++) {
jsonarray = jArray.getJSONArray(i);
if (jsonarray != null) {
for (int j = 0; j < jsonarray.length(); i++){
if(i==0) {
jsonarray = jArray.getJSONArray(j);
_stop.setName(jsonarray.getString(0));
StopElement.Stop_name_list.add(_stop.getName());
}
}
} else {
break;
}
}
} else {
return null;
}
**JSON Data**
[[["Sadiqabad Chowk","33.634525","73.074326","suzk1"],["Chungi No 8","33.627262","73.093567","suzk1"],["Jahaz Ground","33.628395","73.101936","suzk1"],["Khana Bridge","33.629967","73.112823","suzk1"],["Kuri Road","33.643162","73.102928","21"],["Faizabad","33.663212","73.084801","21"]],[["Sadiqabad Chowk","33.634525","73.074326","suzk1"],["Petrol Pump","33.634109","73.076363","suzk1"],["Chandni Chowk","33.631584","73.072563","suzk1"],["Rahmanabad","33.639065","73.075714","3"],["Passport Office","33.642410","73.076981","3"],["Shamsabad","33.650101","73.079994","3"],["Faizabad","33.663212","73.084801","3"]],[["Sadiqabad Chowk","33.634525","73.074326","suzk1"],["Chungi No 8","33.627262","73.093567","suzk1"],["Jahaz Ground","33.628395","73.101936","suzk1"],["Khana Bridge","33.629967","73.112823","suzk1"],["Zia Masjid","33.637196","73.107407","124-A"],["Kuri Road","33.643162","73.102928","124-A"],["Dhok Kala Khan","33.653118","73.095444","124-A"],["Faizabad","33.663212","73.084801","124-A"]],[["Sadiqabad Chowk","33.634525","73.074326","suzk1"],["Chungi No 8","33.627262","73.093567","suzk1"],["Jahaz Ground","33.628395","73.101936","suzk1"],["Khana Bridge","33.629967","73.112823","suzk1"],["Zia Masjid","33.637196","73.107407","136"],["Kuri Road","33.643162","73.102928","136"],["Iqbal Town","33.644279","73.100113","136"],["Dhok Kala Khan","33.653118","73.095444","136"],["Faizabad","33.663212","73.084801","136"]],[["Sadiqabad Chowk","33.634525","73.074326","suzk13"],["Dhok Ali Akbar","33.636997","73.092117","suzk13"],["Highway Stop","33.679722","73.075584","suzk13"],["Bhinder","33.556244","73.167946","suzk3"],["Lohi Bher","33.586273","73.145493","124"],["Wild Life Park","33.578770","73.132309","124"],["Airport Chowk","33.593803","73.139938","124"],["Gangal","33.612591","73.125801","124"],["Khana Bridge","33.629967","73.112823","124"],["Zia Masjid","33.637196","73.107407","124"],["Kuri Road","33.643162","73.102928","124"],["Dhok Kala Khan","33.653118","73.095444","124"],["Faizabad","33.663212","73.084801","124"]],[["Sadiqabad Chowk","33.634525","73.074326","suzk13"],["Petrol Pump","33.634109","73.076363","suzk13"],["Chandni Chowk","33.631584","73.072563","suzk13"],["Central Hospital","33.628784","73.070641","suzk13"],["Naz Cinema","33.623936","73.067802","suzk13"],["Waris Khan","33.620728","73.066078","suzk13"],["Comittee Chowk","33.612946","73.065193","suzk13"],["Liaquat Bagh","33.606808","73.064835","suzk13"],["Marir Hassan","33.596905","73.064445","suzk7"],["Punjab House","33.592701","73.065453","suzk7"],["Jhanda","33.588970","73.076195","suzk7"],["Raheemabad","33.599159","73.080048","21"],["Airport","33.603565","73.097137","21"],["Tajabad","33.601593","73.126213","21"],["Koral Chowk","33.605282","73.131279","21"],["Khana Bridge","33.629967","73.112823","21"],["Kuri Road","33.643162","73.102928","21"],["Faizabad","33.663212","73.084801","21"]],[["Sadiqabad Chowk","33.634525","73.074326","suzk13"],["Petrol Pump","33.634109","73.076363","suzk13"],["Chandni Chowk","33.631584","73.072563","suzk13"],["Central Hospital","33.628784","73.070641","suzk13"],["Naz Cinema","33.623936","73.067802","suzk13"],["Waris Khan","33.620728","73.066078","suzk13"],["Comittee Chowk","33.612946","73.065193","suzk13"],["Liaquat Bagh","33.606808","73.064835","suzk13"],["Medical College","33.602753","73.067200","29"],["Sir Syed Boys School","33.609600","73.078766","29"],["Fauji Tower","33.606770","73.084106","29"],["Chaklala Station","33.601013","73.095924","29"],["Raheemabad","33.599159","73.080048","29"],["Airport","33.603565","73.097137","21"],["Tajabad","33.601593","73.126213","21"],["Koral Chowk","33.605282","73.131279","21"],["Khana Bridge","33.629967","73.112823","21"],["Kuri Road","33.643162","73.102928","21"],["Faizabad","33.663212","73.084801","21"]],[["Sadiqabad Chowk","33.634525","73.074326","suzk13"],["Petrol Pump","33.634109","73.076363","suzk13"],["Chandni Chowk","33.631584","73.072563","suzk13"],["Central Hospital","33.628784","73.070641","suzk13"],["Naz Cinema","33.623936","73.067802","suzk13"]]]
this will work definitely for you.
String data= "[[['Jahaz Ground','33.628395','73.101936','suzk1'],['Khana Bridge','33.628395','73.101936','suzk1']]]";
try {
JSONArray json = new JSONArray(data);
JSONArray aray = (JSONArray)json.get(0);
for(int i =0; i< aray.length();i++){
JSONArray object = (JSONArray)aray.get(i);
String title = (String)object .get(0);
String lat = (String)object.get(1);
String lng = (String)object.get(2);
String com = (String)object.get(3);
}
} catch (JSONException e) {
e.printStackTrace();
}
try this way,
U can get result as per your request
private String jsonString="[[['Sadiqabad Chowk','33.634525','73.074326','suzk1'],['Chungi No 8','33.627262','73.093567','suzk1'],['Jahaz Ground','33.628395','73.101936','suzk1'],['Khana Bridge','33.629967','73.112823','suzk1'],['Kuri Road','33.643162','73.102928','21'],['Faizabad','33.663212','73.084801','21']],[['Sadiqabad Chowk','33.634525','73.074326','suzk1'],['Petrol Pump','33.634109','73.076363','suzk1'],['Chandni Chowk','33.631584','73.072563','suzk1'],['Rahmanabad','33.639065','73.075714','3'],['Passport Office','33.642410','73.076981','3'],['Shamsabad','33.650101','73.079994','3'],['Faizabad','33.663212','73.084801','3']],[['Sadiqabad Chowk','33.634525','73.074326','suzk1'],['Chungi No 8','33.627262','73.093567','suzk1'],['Jahaz Ground','33.628395','73.101936','suzk1'],['Khana Bridge','33.629967','73.112823','suzk1'],['Zia Masjid','33.637196','73.107407','124-A'],['Kuri Road','33.643162','73.102928','124-A'],['Dhok Kala Khan','33.653118','73.095444','124-A'],['Faizabad','33.663212','73.084801','124-A']],[['Sadiqabad Chowk','33.634525','73.074326','suzk1'],['Chungi No 8','33.627262','73.093567','suzk1'],['Jahaz Ground','33.628395','73.101936','suzk1'],['Khana Bridge','33.629967','73.112823','suzk1'],['Zia Masjid','33.637196','73.107407','136'],['Kuri Road','33.643162','73.102928','136'],['Iqbal Town','33.644279','73.100113','136'],['Dhok Kala Khan','33.653118','73.095444','136'],['Faizabad','33.663212','73.084801','136']],[['Sadiqabad Chowk','33.634525','73.074326','suzk13'],['Dhok Ali Akbar','33.636997','73.092117','suzk13'],['Highway Stop','33.679722','73.075584','suzk13'],['Bhinder','33.556244','73.167946','suzk3'],['Lohi Bher','33.586273','73.145493','124'],['Wild Life Park','33.578770','73.132309','124'],['Airport Chowk','33.593803','73.139938','124'],['Gangal','33.612591','73.125801','124'],['Khana Bridge','33.629967','73.112823','124'],['Zia Masjid','33.637196','73.107407','124'],['Kuri Road','33.643162','73.102928','124'],['Dhok Kala Khan','33.653118','73.095444','124'],['Faizabad','33.663212','73.084801','124']],[['Sadiqabad Chowk','33.634525','73.074326','suzk13'],['Petrol Pump','33.634109','73.076363','suzk13'],['Chandni Chowk','33.631584','73.072563','suzk13'],['Central Hospital','33.628784','73.070641','suzk13'],['Naz Cinema','33.623936','73.067802','suzk13'],['Waris Khan','33.620728','73.066078','suzk13'],['Comittee Chowk','33.612946','73.065193','suzk13'],['Liaquat Bagh','33.606808','73.064835','suzk13'],['Marir Hassan','33.596905','73.064445','suzk7'],['Punjab House','33.592701','73.065453','suzk7'],['Jhanda','33.588970','73.076195','suzk7'],['Raheemabad','33.599159','73.080048','21'],['Airport','33.603565','73.097137','21'],['Tajabad','33.601593','73.126213','21'],['Koral Chowk','33.605282','73.131279','21'],['Khana Bridge','33.629967','73.112823','21'],['Kuri Road','33.643162','73.102928','21'],['Faizabad','33.663212','73.084801','21']],[['Sadiqabad Chowk','33.634525','73.074326','suzk13'],['Petrol Pump','33.634109','73.076363','suzk13'],['Chandni Chowk','33.631584','73.072563','suzk13'],['Central Hospital','33.628784','73.070641','suzk13'],['Naz Cinema','33.623936','73.067802','suzk13'],['Waris Khan','33.620728','73.066078','suzk13'],['Comittee Chowk','33.612946','73.065193','suzk13'],['Liaquat Bagh','33.606808','73.064835','suzk13'],['Medical College','33.602753','73.067200','29'],['Sir Syed Boys School','33.609600','73.078766','29'],['Fauji Tower','33.606770','73.084106','29'],['Chaklala Station','33.601013','73.095924','29'],['Raheemabad','33.599159','73.080048','29'],['Airport','33.603565','73.097137','21'],['Tajabad','33.601593','73.126213','21'],['Koral Chowk','33.605282','73.131279','21'],['Khana Bridge','33.629967','73.112823','21'],['Kuri Road','33.643162','73.102928','21'],['Faizabad','33.663212','73.084801','21']],[['Sadiqabad Chowk','33.634525','73.074326','suzk13'],['Petrol Pump','33.634109','73.076363','suzk13'],['Chandni Chowk','33.631584','73.072563','suzk13'],['Central Hospital','33.628784','73.070641','suzk13'],['Naz Cinema','33.623936','73.067802','suzk13']]]";
private void getJSONResult(String jsonString) {
// TODO Auto-generated method stub
try {
JSONArray jsonArray = new JSONArray(jsonString);
// i.e. the JsonMainArray
JSONArray JsonInnerArray= (JSONArray)jsonArray.get(0);
// i.e. the JsonInnerArray
for(int i =0; i< JsonInnerArray.length();i++){
JSONArray jsonObject = (JSONArray)JsonInnerArray.get(i);
//i.e. the jsonObject of JsonInnerArray
String title = (String)jsonObject .get(0);
String latitude = (String)jsonObject.get(1);
String longitude = (String)jsonObject.get(2);
String companyName = (String)jsonObject.get(3);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
I Solved My Issue like this
try {
int count = 0;
if (success == 1) {
json = new JSONObject(JSONParser.Result);
jArray = json.getJSONArray("data");
StopElement _stop = new StopElement();
for (int i = 0; i < jArray.length(); i++) {
count = count + 1;
// Log.d("Counter", String.valueOf(count));
get_path.add(String.valueOf(count));
jsonarray = jArray.getJSONArray(i);
Log.d("path Array", jsonarray.toString());
if (getitemno>0) {
getpath = jArray.getJSONArray(getitemno);
for (int j = 0; j < getpath.length(); j++) {
getresult = getpath.getJSONArray(j);
_stop.setName(getresult.getString(0));
_map.setLat(getresult.getDouble(1));
_map.setLng(getresult.getDouble(2));
StopElement.Stop_name_list.add(_stop.getName());
MapCoordinatesElement.Lat.add(_map.getLat());
MapCoordinatesElement.Lng.add(_map.getLng());
//Log.d("Stop names", _stop.getName());
// Log.d("Index Array", getpath.toString());
}
} else {
getpath = jArray.getJSONArray(0);
for (int j = 0; j < getpath.length(); j++) {
getresult = getpath.getJSONArray(j);
_stop.setName(getresult.getString(0));
_map.setLat(getresult.getDouble(1));
_map.setLng(getresult.getDouble(2));
StopElement.Stop_name_list.add(_stop.getName());
MapCoordinatesElement.Lat.add(_map.getLat());
MapCoordinatesElement.Lng.add(_map.getLng());
//Log.d("Stop names", _stop.getName());
//Log.d("Index Array", getpath.toString());
}
}
}
// Log.d("Stop names of Algo", StopElement.Stop_name_list.toString());
// Log.d("Index Stop names", StopElement.Stop_name_list.toString());
} catch (JSONException e) {
e.printStackTrace();
}

Android JSON getJSONObject not working, incorrect parsing

I cannot figure out why my parsing is not working, this is my JSON:
{
"fileVersion":"1.0",
"graves":[
{
"ID_grave":"1",
"ID_line":"1",
"sequence":"1",
"persons":[
{
"ID_person":"1",
"name":"Janez",
"surname":"Novak",
"dateBirth":"1956-08-11",
"dateDeath":"2014-02-12",
"important":"0",
"imp_desc":""
}
]
},
{
"ID_grave":"2",
"ID_line":"1",
"sequence":"2",
"persons":[
{
"ID_person":"2",
"name":"Mojca",
"surname":"Novak",
"dateBirth":"1953-02-13",
"dateDeath":"2012-04-08",
"important":"0",
"imp_desc":""
}
]
}
]
}
This code is working, when I want to get the first JSONObject:
String jsonData = convertStreamToString(in);
JSONObject json = new JSONObject(jsonData);
JSONArray name = json.getJSONArray("graves");
for (int i = 0; i < name.length(); i++) {
JSONObject grave = name.getJSONObject(i);
lineArrayList.add(grave.getString("ID_line"));
graveArrayList.add(grave.getString("ID_grave"));
}
But I would like to get the "persons" array in "graves" object. This should work but it's not, I am getting only the first persons array, where the name is Janez and not the second array where the name is Mojca:
String jsonData = convertStreamToString(in);
JSONObject json = new JSONObject(jsonData);
JSONArray name = json.getJSONArray("graves");
for (int i = 0; i < name.length(); i++) {
JSONObject grave = name.getJSONObject(i);
JSONArray persons = grave.getJSONArray("persons");
for (int k = 0; k < persons.length(); k++) {
//The problem was because of the index i, you have to change to k and it will work
JSONObject grave = persons.getJSONObject(i);
nameArrayList.add(grave.getString("name"));
surnameArrayList.add(grave.getString("surname"));
}
}
graves is a JSONArray and persons is a JSONArray into graves
for (int i = 0; i < name.length(); i++) {
JSONObject grave = name.getJSONObject(i);
JSONArray persons = grave.optJSONArray("persons");
if (persons != null) {
for (int j = 0; j < persons.length(); j++) {
}
}
}
Do your parsing as follows ,
String jsonData = convertStreamToString(in);
JSONObject json = new JSONObject(jsonData);
JSONArray name = json.getJSONArray("graves");
for (int i = 0; i < name.length(); i++) {
JSONObject grave = name.getJSONObject(i);
JSONArray persons = grave.getJSONArray("persons");
for (int k = 0; k < persons.length(); k++) {
JSONObject grave = persons.getJSONObject(i);
nameArrayList.add(grave.getString("name"));
surnameArrayList.add(grave.getString("surname"));
}
}
Try This:
for (int i = 0; i < name.length(); i++) {
JSONObject grave = name.getJSONObject(i);
JSONArray persons = grave.optJSONArray("persons");
if (persons != null) {
for (int j = 0; j < persons.length(); j++) {
JSONObject grave= persons.getJSONObject(i);
lineArrayList.add(grave.getString("ID_line"));
//so on..
}
}
Ok only today I discovered that I am getting the data only from the first persons array and from the second where for example is a person with a name Mojca..I tried all the three given solutions but nothing works..

Categories

Resources