Я довольно новичок в разработке android и работе со службами REST, чтобы разрешить связь между приложениями и базами данных на моем сервере.
Я работал над приложением, которое извлекает информацию, относящуюся к зарегистрированным заявкам в нашей системе. Мое приложение android может успешно использовать службу REST для получения данных из моей базы данных, однако мне очень трудно заставить мою службу REST принимать данные в формате JSON из моего приложения для обновления существующего билета или создания новый.
Моя служба REST написана на C#
Ниже приведен пример моего запроса GET, который отлично работает, потому что есть несколько параметров и они не соответствуют длине, принятой URL:
[OperationContract]
[WebInvoke(Method = "GET",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "incidentAgent/{agent}/{incID}")] //PASS A 0 incID IF SELECTING ALL
Stream AgentIncidentListing(string agent, string incID);
Это мой android код приложения для генерации строки JSON и отправки запроса POST в мой веб-сервис:
public void updateIncidents(View v){
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
//Declare and initialize text views from the layout
TextView tvidIncidents = (TextView) findViewById(R.id.tvIncidentID);
TextView tvResolution = (TextView)findViewById(R.id.tvResolution );
TextView tvJobCardNo = (TextView)findViewById(R.id.tvJobCardNo );
TextView tvActualHours = (TextView)findViewById(R.id.tvActualHours );
TextView tvBudgetHours = (TextView)findViewById(R.id.tvBudgetHours );
TextView tvTaskDesc = (TextView)findViewById(R.id.tvTaskDesc );
TextView tvOutline = (TextView)findViewById(R.id.tvOutline );
TextView tvProject = (TextView)findViewById(R.id.tvProject );
TextView tvIncidentType = (TextView)findViewById(R.id.tvIncidentType );
TextView tvStatus = (TextView)findViewById(R.id.tvStatus );
TextView tvCustomer = (TextView)findViewById(R.id.tvCustomer );
TextView tvIncidentNumber = (TextView)findViewById(R.id.tvIncidentNumber );
TextView tvDueBy = (TextView)findViewById(R.id.tvDueDate);
URL url = new URL(updateURI);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
conn.setRequestProperty("Accept","application/json");
conn.setDoOutput(true);
conn.setDoInput(true);
JSONObject jsonParam = new JSONObject();
jsonParam.put("iIncidentStatusID", tvStatus.getText());
jsonParam.put("iDebtorID", tvCustomer.getText());
jsonParam.put("cOutline", tvOutline.getText());
jsonParam.put("iIncidentTypeID", tvIncidentType.getText());
jsonParam.put("iProjectID", tvProject.getText());
jsonParam.put("ufINCBHours", tvBudgetHours.getText());
jsonParam.put("ufINCAH", tvActualHours.getText());
jsonParam.put("ucINCJN", tvJobCardNo.getText());
jsonParam.put("ucINCTaskDescription", tvTaskDesc.getText());
jsonParam.put("ucINCResolution", tvResolution.getText());
jsonParam.put("dDueBy", tvDueBy.getText());
jsonParam.put("idIncidents", tvidIncidents.getText());
Log.i("JSON", jsonParam.toString());
DataOutputStream os = new DataOutputStream(conn.getOutputStream());
//os.writeBytes(URLEncoder.encode(jsonParam.toString(), "UTF-8"));
os.writeBytes(jsonParam.toString());
os.flush();
os.close();
Log.i("STATUS", String.valueOf(conn.getResponseCode()));
Log.i("MSG" , conn.getResponseMessage());
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
});
thread.start();
}
Проблема, которую я ' у меня есть абсолютно никакого понятия о том, как обрабатывать этот запрос POST на моем REST-сервисе. это то, что у меня есть до сих пор:
[OperationContract]
[WebInvoke(Method = "POST",
ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "updateIncData")]
void UpdateJsonIncident(RequestData rData);
Класс RequestData:
public class RequestData
{
[DataMember]
public string details { get; set; }
}
Я хочу иметь возможность читать строку JSON, возвращаемую моим android app и назначьте соответствующие значения моему оператору вставки или обновления в функции UpdateJsonIncident (), чтобы соответствующим образом повлиять на мою базу данных.
Я пробовал много вещей, но не могу заставить это работать. После того, как я сижу за моим столом 2-й день (в настоящее время 11 часов подряд), я чувствую, что просьба о помощи здесь - мое последнее средство и надеюсь, что кто-то может помочь мне.