2014-10-11 2 views
0

Я пытаюсь отправить запрос json на сервер с некоторыми параметрами. Запрос будет и асинхронная задача работает нормально, но он бросает исключение на сервере и говорит недействительный URLотправка запроса json с параметрами с помощью async task android

Вот что я делаю

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity); 

    Button btnChart = (Button) findViewById(R.id.btn_chart); 

    // Defining click event listener for the button btn_chart 
    OnClickListener clickListener = new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      new HttpAsyncTask().execute("https://tt.student.com/back.json"); 
       } 
    }; 


    // Setting event click listener for the button btn_chart of the MainActivity layout 
    btnChart.setOnClickListener(clickListener); 
} 

public static String POST(String url){ 
    InputStream inputStream = null; 
    String result = ""; 
    try { 

     // 1. create HttpClient 
     HttpClient httpclient = getNewHttpClient(); 

     // 2. make POST request to the given URL 
     HttpPost httpPost = new HttpPost(url); 

     String json = ""; 

     // 3. build jsonObject 
     JSONObject jsonObject = new JSONObject(); 
     jsonObject.accumulate("user", 1); 
     jsonObject.accumulate("student_id", 1); 
     jsonObject.accumulate("user_email", "[email protected]"); 
     jsonObject.accumulate("from", "Fri Oct 10 12:38:00 2014 GMT+0200"); 
     jsonObject.accumulate("to", "Sat Oct 11 12:38:00 2014 GMT+0200"); 

     // 4. convert JSONObject to JSON to String 
     json = jsonObject.toString(); 

     // ** Alternative way to convert Person object to JSON string usin Jackson Lib 
     // ObjectMapper mapper = new ObjectMapper(); 
     // json = mapper.writeValueAsString(person); 

     // 5. set json to StringEntity 
     StringEntity se = new StringEntity(json); 

     // 6. set httpPost Entity 
     httpPost.setEntity(se); 

     // 7. Set some headers to inform server about the type of the content 
     httpPost.setHeader("Accept", "application/json"); 
     httpPost.setHeader("Content-type", "application/json"); 

     // 8. Execute POST request to the given URL 
     HttpResponse httpResponse = httpclient.execute(httpPost); 

     // 9. receive response as inputStream 
     inputStream = httpResponse.getEntity().getContent(); 

     // 10. convert inputstream to string 
     if(inputStream != null) 
      result = convertInputStreamToString(inputStream); 
     else 
      result = "Did not work!"; 

    } catch (Exception e) { 
     Log.d("InputStream", e.getLocalizedMessage()); 
    } 

    // 11. return result 
    return result; 
} 
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; 

} 
private class HttpAsyncTask extends AsyncTask<String, Void, String> { 
    @Override 
    protected String doInBackground(String... urls) { 

     return POST(urls[0]); 
    } 
    // onPostExecute displays the results of the AsyncTask. 
    @Override 
    protected void onPostExecute(String result) { 
     Toast.makeText(getBaseContext(), "Received!", Toast.LENGTH_LONG).show(); 
     Log.d(TAG,result); 
    } 
} 

В URL я попробовал как путь один находится в коде выше и другой, чтобы передать параметр в URL самого https://tt.student.com/back.json?user=1&student_id=1&[email protected]&from=Fri Oct 10 12:38:00 2014 GMT+0200&to=Sat Oct 11 12:38:00 2014 GMT+0200 для этого он говорит недопустимый символ в URL ...

+0

вместо запроса GET вы должны использовать запрос POST, идентификатор электронной почты будет считаться недопустимым в строке запроса. –

+0

GET - это просто метод, но внутри я делаю запрос POST, почему электронная почта недействительна? – user3290805

+0

добавить код на стороне сервера также –

ответ

1

Я думаю, проблема может быть связана с состоянием сервера или Wifi. ваше устройство подключено только к Wi-Fi, но не передало аутентичность для доступа к Интернету или более технически, для обмена пакетами с сервера.

Я бы порекомендовал вам использовать метод для проверки подключения к устройству, я думаю, что это относится к вам, поскольку у меня было подобное состояние, и я потратил почти 1-2 часа, чтобы заставить его работать. для интернет проверки подключения здесь ссылка

Internet COnnection

Я надеюсь, что это поможет.

+0

Да, это был случай. Немного поздно, но я принимаю его как правильный ответ. В любом случае спасибо – user3290805

0

ссылка https://tt.student.com/back.json нужен сертификат, который должен быть доверенным андроидом. Возможно, вы можете принять сертификат по коду, но вам нужен этот сертификат. Я попытался открыть в браузере и показал мне ненадежный сертификат ....

+0

Я добавил метод, чтобы получить сертификат, который просто не добавлен в вышеприведенный код, кроме того, это неверный url пример – user3290805

+0

Тогда вы не делаете правильный запрос ... ask парень, который сделал сервер, в каком направлении ему нужен запрос .. то есть, что ему нужно в заголовке и что должно быть телом .... вы можете видеть объект запроса, который вы публикуете на сервере ... – karan421

+0

, но когда я отправил запрос от httpclientin chrome с этим https://tt.student.com/back.json?user=1&student_id=1&[email protected]&from=Fri 10 октября 12:38:00 2014 GMT + 0200 & to = сб 11 окт 12 : 38:00 2014 GMT + 0200 запрос, я получаю правильный ответ – user3290805