2016-03-04 3 views
1
class MySync extends AsyncTask{ ProgressDialog mProgressDialog; 

    protected void onPreExecute(){ 
     mProgressDialog = ProgressDialog.show(MainActivity.this, "Loading...", "Data is Loading..."); 
    } 
    @Override 
    protected Integer doInBackground(String... params) { 
     int result = 0; 
     //String url="http://192.168.0.108:8080/sbi/login?"+"key1="+params[0]+"&key2="+params[1]"; 
     int code; 
     try { 
      URL hp=new URL("http://192.168.0.108:8080/sbi/login?"+"key1="+params[0]+"&key2="+params[1]); 
      HttpURLConnection urlConnection=(HttpURLConnection)hp.openConnection(); 
      urlConnection.connect(); 
      Log.i("A", "connect"); 
      code=urlConnection.getResponseCode(); 
      Log.i("A","code"); 
      boolean a=check(code); 

      if(a){ 
       //urlConnection.setDoInput(true); 
       Log.i("A", "input"); 
       // urlConnection.setDoOutput(true); 
       Log.i("A", "output"); 
       urlConnection.setRequestMethod("GET"); 
       Log.i("A", "get"); 
       byte [] buf=("key1=" + params[0] + "&key2=" + params[1]).getBytes(); 
       urlConnection.getOutputStream().write(buf); 
       Log.i("A", "sent"); 
      } 
      else{ 
       Log.i("A","error"); 
       result=3; 
      } 
     } 
     catch (MalformedURLException e) { 
      Log.i("e", "Error"); 
     } 
     catch (IOException e){ 
      e.printStackTrace(); 
     } 
    protected boolean check(int c){ 
      if(c==200) return true; 
      else return false; 
     } 
    } 

Этот код дает метод ошибки не поддерживает тело запроса: get? также, если я вставляю setdooutput (true), то он дает ошибку, уже связанную. Я новичок в андроид и я делаю мой колледж проектМетод не поддерживает тело запроса: GET

+0

Метод Http get не поддерживает наличие тела запроса, если вы хотите передать пары значений ключа, чтобы получить их, чтобы передать их с помощью Url – Bhargav

+1

Что делать, если вы удалите 'urlConnection.getOutputStream(). Write (buf);' и не пытайтесь использовать 'setDoOutput'. –

+0

Кажется, вы пытаетесь «отправить» данные через OutputStream. проверьте с изменением параметра setRequestMethod с «GET» на «POST» –

ответ

1

, если вы действительно хотите отправить пары ключ-значение для сервера в теле запроса, а затем изменить

urlConnection.setRequestMethod("GET"); 

в

urlConnection.setRequestMethod("POST"); 

Или, если сервер не поддерживает POST, но вам необходимо сделать GET, затем удалите строки

byte [] buf=("key1=" + params[0] + "&key2=" + params[1]).getBytes(); 
urlConnection.getOutputStream().write(buf); 

Как я могу видеть из этой линии

URL hp=new URL("http://192.168.0.108:8080/sbi/login?"+"key1="+params[0]+"&key2="+params[1]); 

Вы уже строите Url правильно для запроса GET Http, но вы добавляете тело запроса к способу запроса HTTP, который не поддерживает тело запроса (GET http метод в этом случае).

Посмотрите на this wikipidea страницу для получения более подробной информации о REST и REST с HTTP/S, чтобы получить более детальное представление об этой архитектуре

+0

Что делать, если я хочу отправить через после? можете ли вы предоставить мне базовый код, пожалуйста, –

+0

@MayankSingh Я уже ответил, что здесь, если вы хотите отправить через 'POST', просто измените метод запроса, как я сказал в ответ' urlConnection.setRequestMethod («POST»); – Bhargav

0

подготовить URL соединения, как показано ниже

HttpURLConnection conn = null; 
    try { 
     conn = (HttpURLConnection) (url.openConnection()); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

вызов

String dataToSend = "(\"key1=\" + params[0] + \"&key2=\" + params[1])"; 
conn.setRequestMethod("POST");// do not use "GET" in your case 

conn.setRequestProperty("Content-Type", "application/json");//whatever you want 

conn.setRequestProperty("Content-Length", "" + dataToSend.getBytes().length); 

conn.setUseCaches(false);//set true to enable Cache for the req 
conn.setDoOutput(true);//enable to write data to output stream 
OutputStream os = conn.getOutputStream(); 
os.write(dataToSend.getBytes()); 
os.flush(); 
os.close(); 

dot забыть позвонить по методу внизу

conn.connect();