2016-01-27 2 views
1

Я хочу отображать данные с моего удаленного sql-сервера в приложении для Android. Я использую веб-сервис. Я могу подключаться и вставлять, но не показывать с помощью JSON.Извлечь данные из удаленного sqlserver в приложение android

Это код из веб-службы

public DataTable RequestDetails(string request_name) 
    { 
     DataTable requestDetails = new DataTable(); 
     requestDetails.Columns.Add(new DataColumn("Request ID", typeof(String))); 
     requestDetails.Columns.Add(new DataColumn("Date", typeof(String))); 

     if(dbConnection.State.ToString() == "Closed") 
     { 
      dbConnection.Open(); 
     } 

     string query = "select ID_Requests,request_date from Requests where request_by='" + request_name + "'"; 

     SqlCommand command = new SqlCommand(query, dbConnection); 
     SqlDataReader reader = command.ExecuteReader(); 

     if (reader.HasRows) 
     { 
      while (reader.Read()) 
      { 
       requestDetails.Rows.Add(reader["Request ID"], reader["Date"]); 
      } 
     } 

     reader.Close(); 
     dbConnection.Close(); 
     return requestDetails; 
    } 

Это андроид код:

protected class AsyncLoadDeptDetails extends 
     AsyncTask<DeptTable, JSONObject, ArrayList<DeptTable>> { 
    ArrayList<DeptTable> deptTable = null; 

    @Override 
    protected ArrayList<DeptTable> doInBackground(DeptTable... params) { 
     // TODO Auto-generated method stub 

     RestAPI api = new RestAPI(); 
     try { 

      JSONObject jsonObj = api.RequestDetails(params[1].getName()); 

      JSONParser parser = new JSONParser(); 

      deptTable = parser.parseDepartment(jsonObj); 

     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      Log.d("AsyncLoadDeptDetails", e.getMessage()); 

     } 

     return deptTable; 
    } 

    @Override 
    protected void onPostExecute(ArrayList<DeptTable> result) { 
     // TODO Auto-generated method stub 

     for (int i = 0; i < result.size(); i++) { 
      data.add(result.get(i).getNo() + " " + result.get(i).getName()); 
     } 

     adapter.notifyDataSetChanged(); 

     Toast.makeText(context, "Loading Completed", Toast.LENGTH_SHORT).show(); 
    } 

} 

И код JSONParser:

public ArrayList<DeptTable> parseDepartment(JSONObject object) 
{ 
    ArrayList<DeptTable> arrayList=new ArrayList<DeptTable>(); 
    try { 
     JSONArray jsonArray=object.getJSONArray("Value"); 
     JSONObject jsonObj=null; 
     for(int i=0;i<jsonArray.length();i++) 
     { 
      jsonObj=jsonArray.getJSONObject(i); 
      arrayList.add(new DeptTable(jsonObj.getInt("Request ID"), jsonObj.getString("Date"))); 
     } 

    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     Log.d("JSONParser => parseDepartment", e.getMessage()); 
    } 
    return arrayList; 
} 

ответ

0

Я хотел бы использовать Скрипач или что-то аналогичные и посмотреть на возвращаемые данные. Мне всегда приходилось возвращать .NET Datatable из службы, поэтому, если бы это был я, я бы преобразовал данные в JSON перед отправкой. Это обсуждалось на нескольких постах раньше, но вот отличный ответ: https://stackoverflow.com/a/17398078/3299157

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