2016-04-04 3 views
0

Мне нужно загрузить данные с URL-адреса, который имеет JSON-массив, а не объект JSON, по крайней мере, это то, что я понимаю.Как получить доступ к каждому узлу из массива JSON (не JSON Object)?

Извлечение данных из URL:

// JSONObject jsonObject=new JSONObject(ParsingDta); 
JSONArray jsonArray = jsonObject.getJSONArray("Employee"); 
for (int i = 0; i < jsonArray.length(); i++) { 
    // JSONObject jsonObject1=jsonArray.getJSONObject(i); 
    String id = jsonObject1.getString("id").toString(); 
    String name = jsonObject1.getString("name").toString(); 
    String salary = jsonObject1.getString("salary").toString(); 
    database.insertData(id, name, salary); 
    str += "\n Employee" + i + "\n name:" + name + "\n id:" + id + "\n salary:" + salary + "\n"; 
    // textView1.setText(str); 
} 

выше имеет JSON объект я думаю, и мне нужно JSON массиву

[{"billedret":0,"class":"com.enteleki.sfa.botree.RetailerSummary","ctgcode":"G00" ... 

и так далее ..

+0

Не могли бы вы добавить немного вашего JSON-файла ?, Я не вижу Employee-тег –

+0

Сотрудник основан на JSONObject, я не хочу этого. Я хочу использовать JSONParsing для данных, опубликованных последним – Venky

ответ

0

Это то, что я использовал, чтобы получить данные из URL

public void printRes(String res) throws JSONException { 
    try { 
     //the asyncTask returns string to this function 

     JSONArray arr = new JSONArray(res); 
     int t = arr.length(); 
     nameArray = new String[t]; 
     distArray = new String[t]; 
     latArray = new String[t]; 
     lonArray = new String[t]; 
     pgr.setProgress(70); 
     list = new ArrayList<String>(); 
     for (int i = 0; i < arr.length(); i++) { 
      pgr.setProgress(50); 
      nameArray[i] = (arr.getJSONObject(i).getString("name")); 
      distArray[i] = (arr.getJSONObject(i).getString("distance")); 
      latArray[i] = (arr.getJSONObject(i).getString("latitude")); 
      lonArray[i] = (arr.getJSONObject(i).getString("longitude")); 


     } 

EDIT

Я использовал AsyncTask Для загрузки данных из URL

 String latt = LatVal.getText().toString(); 
     String lonn = LongVal.getText().toString(); 

     // Create data variable for sending values to server 

     data = URLEncoder.encode("lat", "UTF-8") + "=" 
       + URLEncoder.encode(latt, "UTF-8"); 

     data += "&" + URLEncoder.encode("longi", "UTF-8") + "=" 
       + URLEncoder.encode(lonn, "UTF-8"); 

     data += "&" + URLEncoder.encode("radius", "UTF-8") + "=" 
       + URLEncoder.encode(Dis, "UTF-8"); 

     text = ""; 


     // Send data 

     new AsyncCaller().execute(data); 

Эта строка отправить как POST в потоке AsyncCaller

class AsyncCaller extends AsyncTask<String,String,String> 
{ 

MainActivity obj=new MainActivity(); 
BufferedReader reader=null; 
@Override 
protected void onPreExecute() { 
super.onPreExecute(); 

    //this method will be running on UI thread 

} 
@Override 
protected String doInBackground(String...res) { 

//this method will be running on background thread so don't update UI  
// frome here 
//do your long running http tasks here,you dont want to pass argument 
//and u can access the parent class' variable url over here 
//String ads=Arrays.toString(res); 

try { 
    //Create connection 

    // Defined URL where to send data 
    URL url = new URL("**your URL**"); 

// Send POST data request 
String data=res[0]; 
//String sub="lat=10.0243567&longi=76.3084289&radius=500"; 
//"lat=ben&longi=ascd&radius=500"; 
    URLConnection conn = url.openConnection(); 
    conn.setDoOutput(true); 
    OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
    wr.write(data); 
    wr.flush(); 

    // Get the server response 
    reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
    StringBuilder sb = new StringBuilder(); 
    String line = null; 

    // Read Server Response 
    while((line = reader.readLine()) != null) 
     { 
      // Append server response in string 
      sb.append(line + "\n"); 

     } 

obj.text = sb.toString(); 

    } catch(Exception ex) 
    { 
    ex.printStackTrace(); 
    } 
    finally 
    { 
    try 
    { 

     reader.close(); 
    } 

    catch(Exception ex) {} 
} 

// Show response on activity 

return obj.text; 
} 

@Override 
protected void onPostExecute(String result) { 
super.onPostExecute(result); 

try { 
obj.printRes(result);//this contains the download data from the URL 
} catch (JSONException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} 

} 


} 

Я использовал этот код для загрузки данных из URL при размещении некоторой долготы и широты ......

U может сделать необходимые изменения, чтобы загрузить данные, ..

удачи.

+0

Спасибо большое. Не могли бы вы помочь мне с загрузкой данных по ссылке? я новичок во всем этом ..:/ – Venky

+0

@Venky, пожалуйста, проверьте мой отредактированный код ...Я добавил поток для извлечения данных из url – Benedict

+0

Ах, спасибо большое, очень признателен, я сделал еще один класс с именем download_data.java, чтобы он работал. Теперь мне нужно передать эти значения в базу данных SQLite – Venky

0

если вы получаете JSON из источника данных, тогда вам нужно создать массив JSON из полученных вами данных, а не пытаться превратить массив в объект.

Попробуйте создать новый массив JSON, как показано ниже.

JSONArray jsonArray = new JSONArray(ParsingData); 

Ваш массив JSON должен теперь быть создан из данных, полученных, а затем вы можете использовать его как обычный массив JSON.

+0

I иметь URL-адрес, могу ли я просто добавить ParsingData = "" – Venky

+0

Вам нужно получить содержимое с URL-адреса и передать его в массив JSON. –

+0

Если вы посмотрите на API, вы увидите, что конструктор JSON Array должен взять строку. http://developer.android.com/reference/org/json/JSONArray.html Строкой должны быть данные, которые вы получили. –

0

Существует вариант для обработки JSON массива как этого

String data="[{"billedret":0,"class":"com.enteleki.sfa.botree.RetailerSummary","ctgcode":"G00"....... your full json text}]"; 
JSONArray completeArray = new JSONArray(data); 

for (int i=0;i<completeArray .length();i++){ 
    JSONObject finalEntry=(JSONObject) completeArray .get(i); 
     // add your logic for read info from finalEntry jsonObjec. 

} 

я надеюсь, что он подходит для вас.

+0

Это прекрасно, но эти данные находятся в ссылке, и мне нужно получить данные из URL-адреса, у меня есть еще один класс для загрузки данных, спасибо за вашу помощь – Venky

+0

, так что на самом деле ваша проблема заключается в извлечении данных из URL-адреса ... тогда вы можете принять ans, если он работает, и задать еще один вопрос .. Спасибо –

Смежные вопросы