Я пытаюсь отправить JSon данные на сервер Web API (ASP .NET) из андроида приложения (Java). Но когда я отправляю данные от android на стороне сервера, я не вижу никаких данных. Как я узнаю, что не работает должным образом клиент или сервер? Любая помощь приветствуется, пожалуйста, если у вас есть какая-то информация, идея сообщите мне, спасибо!Как отправить данные JSON на сервер WEB API от андроида
Клиент CIDE в андроида я реализую код ниже POSTActivity.java
public class POSTActivity extends AppCompatActivity implements View.OnClickListener {
TextView tvIsConnected;
Button btnPost;
String TAG = "json";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login_activity_second);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
btnPost.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch(view.getId()) {
case R.id.btnPost:
if (!validate())
new HttpAsyncTask().execute("http://zhaksy-adam.kz/api/Requisitions/PostRequisition");
break;
}
}
private class HttpAsyncTask extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... urls) {
return POST(urls[0]);
}
public static String POST(String url){
InputStream inputStream = null;
String result = "";
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
String json = "";
JSONObject jsonObject = new JSONObject();
jsonObject.add("CityID", "1");
jsonObject.add("TypeID","1");
jsonObject.add("Title", "SomeTitle");
jsonObject.add("RegionID", "1");
jsonObject.add("Phone1", "+7(705)105-78-70");
jsonObject.add("Decription","<p>Some Description</p>");
jsonObject.add("Date", "29-02-2016");
json = jsonObject.toString();
StringEntity se = new StringEntity(json);
httpPost.setEntity(se);
httpPost.setHeader("accept", "json");
httpPost.setHeader("Content-type", "json");
HttpResponse httpResponse = httpclient.execute(httpPost);
inputStream = httpResponse.getEntity().getContent();
// convert inputstream to string
if(inputStream != null)
{ result = convertInputStreamToString(inputStream);
Log.d("json","inputStream result"+result);}
else
result = "Did not work!";
Log.d("json","result"+result);
} catch (Exception e) {
Log.d("json","e.getLocalizedMessage()"+ e.getLocalizedMessage());
}
// return result
return result;
}
// onPostExecute displays the results of the AsyncTask.
@Override
protected void onPostExecute(String result) {
Toast.makeText(getBaseContext(), "Data Sent!", Toast.LENGTH_LONG).show();
}
}
private static String convertInputStreamToString(InputStream inputStream) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String line = "";
String result = "";
while((line = bufferedReader.readLine()) != null)
result += line;
inputStream.close();
return result;
}
Это моя сторона сервера:
[System.Web.Http.HttpPost]
public HttpResponseMessage PostRequisition([FromBody]string requisition)
{
Requisition postReq = new Requisition();
if (!String.IsNullOrEmpty(requisition))
{
dynamic arr = JValue.Parse(requisition);
//PostReq model = JsonConvert.DeserializeObject<PostReq>(requisition);
postReq.FullName = arr.FullName;
postReq.CityID = Convert.ToInt32(arr.CityID);
postReq.RegionID = Convert.ToInt32(arr.RegionID);
postReq.TypeID = Convert.ToInt32(arr.TypeID);
postReq.UserID = 8;
postReq.Title = arr.Title;
postReq.Date = Convert.ToDateTime(arr.Date, CultureInfo.CurrentCulture);
postReq.Decription = arr.Description;
postReq.Phone1 = arr.Phone1;
postReq.Activate = false;
postReq.ClickCount = 0;
try
{
db.Requisition.Add(postReq);
db.SaveChanges();
Message msg = new Message();
msg.Date = DateTime.Now;
msg.Type = "POST";
msg.Text = "OK";
db.Message.Add(msg);
db.SaveChanges();
return Request.CreateResponse(HttpStatusCode.OK, postReq);
}
catch (Exception ex)
{
Message msg = new Message();
msg.Date = DateTime.Now;
msg.Type = "POST";
msg.Text = "ERROR";
db.Message.Add(msg);
db.SaveChanges();
return Request.CreateResponse(HttpStatusCode.OK, ex.Message);
}
}
else
{
Message msg = new Message();
msg.Date = DateTime.Now;
msg.Type = "POST";
msg.Text = "null";
db.Message.Add(msg);
db.SaveChanges();
return Request.CreateResponse(HttpStatusCode.OK, "null");
}
}
Что вы получаете в InputStream? –
Сначала я предлагаю вам использовать PostMan инструмент Google для использования для веб-API или служб. Это приложение для тестирования и отправляет вам ответ. Первый тест, если PostMan может получить правильный ответ, если нет, то это ваш веб-API, который имеет проблемы или и то, и другое. Тогда, если вы получите правильный ответ, это точно, что где-то между вашим разбором или HttpRequest возникает проблема. – Aizen
@Alok Я получаю ответное сообщение OK –