2016-08-05 75 views
1

我正在使用volley lib。在我的项目的每个活动中,我的第一个登录页面已经使用抽象的JSON对象请求方法(POST)完成,并且下一个活动无法分析。如何使用volley解析json数据

主屏幕的JSON数据:

{ 
"err-code": 5, 
    "job_details": [ 
    { 
     "job_id": 33, 
     "job_no": "ES53-AF", 
     "contract_manager_id": 4, 
     "company_name": "A Construction Ltd", 
     "time_spent": 4.5 
    }, 
    { 
     "job_id": 5, 
     "job_no": "ES1465-AF", 
     "contract_manager_id": 4, 
     "company_name": "Trios Property", 
     "job_description": "Carry out the rewire of ", 
     "time_spent": 26.5 
    }, 
    { 
     "job_id": 81, 
     "job_no": "ES101-AF", 
     "contract_manager_id": 4, 
     "company_name": "Arden Construction Ltd", 
     "job_description": "Carry out works as per esti 3AQ", 
     "time_spent": 2.5 
    }, 
    }] 
} 

代码:

private void getDataNew() 
{ 
    String url = "http://103.5.103.8:067/ivservices/Webservices/joblisting"; 
    HashMap<String, String> user = session.getUserDetails(); 
    String token = user.get(SessionManager.KEY_TOKEN); 
    Log.e("token check kro", token); 
    final String role = user.get(SessionManager.KEY_ROLE); 
    Log.e("role", role); 
    String user_id = user.get(SessionManager.KEY_USERID); 
// Log.e("user_id", user_id.toString()); 
    Map<String, String> params = new HashMap(); 
    params.put(KEY_TOKEN, token); 
    params.put(KEY_ROLE, role); 
    params.put(KEY_ID, user_id); 

     JSONObject parameters = new JSONObject(params); 

     JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.POST, url, parameters, new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject response) { 
       // Log.e("response mila", response.toString()); 
       parseData(response); 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) 
      { 
       error.printStackTrace(); 
       //TODO: handle failure 
      } 
     }); 

    Volley.newRequestQueue(this).add(jsonRequest); 
    } 
+0

[在Android中使用Volley解析JSON数据的可能的副本](http://stackoverflow.com/questions/18699988/parsing-data-from-json-using-volley-in-android) – Talha

回答

0

删除来自你的json的Extra}。

您在json解析代码时所做的一个错误您回答了@Er。 Arjun saini。

那样的错误是在这条线:

JSONArray jsonArray = Object.getJSONArray( “ERR-代码”);

它应该是这样的:

JSONArray jsonArray = Object.getJSONArray( “job_details”);

确保JSON应该是这样的:

{ 


"err-code": 5, 
    "job_details": [ 
    { 
     "job_id": 33, 
     "job_no": "ES53-AF", 
     "contract_manager_id": 4, 
     "company_name": "A Construction Ltd", 
     "time_spent": 4.5 
    }, 
    { 
     "job_id": 5, 
     "job_no": "ES1465-AF", 
     "contract_manager_id": 4, 
     "company_name": "Trios Property", 
     "job_description": "Carry out the rewire of ", 
     "time_spent": 26.5 
    }, 


{ 
    "job_id": 81, 
    "job_no": "ES101-AF", 
    "contract_manager_id": 4, 
    "company_name": "Arden Construction Ltd", 
    "job_description": "Carry out works as per esti 3AQ", 
    "time_spent": 2.5 
} 
    ] 
} 

,并尝试这个代码希望,如果不工作比请分享logcat的错误和异常

try { 
     JSONObject Object=new JSONObject(response); 
     int code = Object.getInt("err-code"); 
     if (code == 0) { 
      JSONArray jsonArray = Object.getJSONArray("job_details"); 
      List<JobList> jobListArray=new ArrayList<JobList>(); 
      for (int i = 0; i <= jsonArray.length(); i++) { 
       JSONObject jsonObject = (JSONObject) jsonArray.get(i); 
       JobList model_joblist=new JobList(); 
       model_joblist.setJobno(jsonObject.getString(JobList.JOB_NO)); 
       model_joblist.setJobid(jsonObject.getInt(JobList.JOB_ID)); 
       model_joblist.setDescreption(jsonObject.getString(JobList.JOB_DESCRIPTION)); 
       jobListArray.add(model_joblist); 
      } 
     } 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

如果仍然不能超过工作将工作在任何其他代码中都有错误,例如在json是在你的model_joblist等

请分享更多的代码和logcat。

+0

嗨..我有另一个问题...我如何才能实现我的Android应用程序..为管理主屏幕不同和用户主屏幕不同,除了登录屏幕相同的应用程序 – harsh

+0

一个解决方案可能是: 您可以为用户和管理员制作不同的屏幕。 在登录时检查是否登录管理员,然后将他移动到管理活动等....否则打开用户活动..... 第二种解决方案,如果你有相同的屏幕,但不同的数据,然后检查用户或管理员负载后相关数据.... 试试哪个适合你..... –

0

试试这个

注意检查还您JSON删除,}前]比你有没有语法错误响应

try { 

     int err_code=response.getInt("err-code"); 

     JSONArray jsonArray=response.getJSONArray("job_details"); 
     for(int i=0;i<jsonArray.length();i++) 
     { 
      JSONObject jsonObjectdetail=jsonArray.getJSONObject(i); 

      int job_id=jsonObjectdetail.getInt("job_id"); 
      int time_spent=jsonObjectdetail.getInt("time_spent"); 
      int contract_manager_id=jsonObjectdetail.getInt("contract_manager_id"); 
      String job_no=jsonObjectdetail.getString("job_no"); 
      String company_name=jsonObjectdetail.getString("company_name"); 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
+0

String job_no = jsonObjectdetail .getString( “job_no”); 在这条线上没有反应 – harsh

+0

对不起,改变response.getInt(“err-code”); ....查看更新回答,现在你得到 –

+0

之前有err_code所以没有改变它作为根据你的json –