2016-02-29 5 views
0

Я пытаюсь отправить 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"); 
      } 

     } 
+0

Что вы получаете в InputStream? –

+0

Сначала я предлагаю вам использовать PostMan инструмент Google для использования для веб-API или служб. Это приложение для тестирования и отправляет вам ответ. Первый тест, если PostMan может получить правильный ответ, если нет, то это ваш веб-API, который имеет проблемы или и то, и другое. Тогда, если вы получите правильный ответ, это точно, что где-то между вашим разбором или HttpRequest возникает проблема. – Aizen

+0

@Alok Я получаю ответное сообщение OK –

ответ

0

Я нашел мою проблему Couse. Большое спасибо @jpgrassi. Это было на стороне сервера. Я отправлял объект JSON, но ожидаю строку в моем POST-действии. Простой способ исправить это создает класс, который отображает на мой JSON объект:

public class RequisitionViewModel 
{ 
    public int TypeID {get; set;} 
    public string FullName {get; set;} 
    public string Title {get; set;} 
    public int RegionID {get; set;} 
    public int CityID {get; set;} 
    public string Phone1 {get; set;}  
} 

Затем измените свое действие подпись:

[FromBody]RequisitionViewModel requisition) 

Вам также не нужно все преобразования в коде :

postReq.FullName = requisition.FullName; 
postReq.CityID = requisition.CityID; 
//other fields. 

..

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