2015-08-11 2 views
1

Я хочу, чтобы позвонить по следующему адресу:Android HttpURLConnection с JSon строки

http://192.168.0.196:8080/openapi/localuser/set?{"syskey":"1234","usrname":"256","usrpwd":"556"} 

Используйте этот адрес для добавления нового пользователя в базу данных. Для этого я использую HttpURLConnection в моем AsyncTask классе

try { 

       URL myUrl = new URL(params[0]); 
       HttpURLConnection conn = (HttpURLConnection) myUrl.openConnection(); 
       conn.setReadTimeout(10000); 
       conn.setConnectTimeout(15000); 
       conn.setRequestMethod("POST"); 
       conn.setDoInput(true); 
       // Starts the query 
       conn.connect(); 
       int response = conn.getResponseCode(); 

       Log.d("lab", "The response is: " + response); 

       statusMap.put("addUser", Integer.toString(response)); 

       Log.d("lab", "URL: " + params[0]); 

      }catch (Exception e){ 
       Log.d("lab", "Error2: " + e.getMessage()); 
      } 

params[0] = http://192.168.0.196:8080/openapi/localuser/set?{"syskey":"1234","usrname":"256","usrpwd":"556"}

К сожалению, этот призыв не работает. Я не получаю ошибку. catch null

+1

Из вашей ссылки 'param', мне кажется, вам нужно только' conn.setRequestMethod ("GET"); 'и не нужно' conn.setDoInput (true); '. Кроме того, вы должны использовать «Log.getStackTraceString (e)» вместо «e.getMessage()», а затем добавьте здесь logcat. – Minhtdh

+0

Когда я удаляю 'conn.setDoInput (true)' мой код работает. Благодаря! – lukassz

ответ

1

Попробуйте этот путь. Вам нужно добавить несколько строк в свой код.

public JSONObject makeHttpRequest(String requestURL, JSONObject register) { 

     try { 

      url = new URL(requestURL); 

      connection = (HttpURLConnection) url.openConnection(); 

      connection.setReadTimeout(150000); 
      connection.setConnectTimeout(150000); 

      connection.setAllowUserInteraction(true); 
      connection.setRequestMethod("POST"); 
      connection.setRequestProperty("Accept-Charset", "UTF-8"); 
      connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
      connection.setRequestProperty("Accept-Language", "en-US,en;q=0.5"); 
      connection.setFixedLengthStreamingMode(register.toString().getBytes().length); 
      connection.setDoInput(true); 
      connection.setDoOutput(true); 
      OutputStreamWriter outputStream = new OutputStreamWriter(connection.getOutputStream()); 

      outputStream.write(register.toString()); 

      outputStream.flush(); 

      Log.e("URL", connection.getURL().toString()); 
      Log.e("JSONObject", register.toString()); 
     } catch (Exception e) { 
      Log.e("MAIN Exception", e.toString()); 
     } 
     try { 

      int statuscode = connection.getResponseCode(); 

      if (statuscode == HttpURLConnection.HTTP_OK) { 
       is = connection.getInputStream(); 
      } else { 

      } 
     } catch (IOException e) { 
      Log.e("IOException", e.toString()); 
     } 

     try { 

      rd = new BufferedReader(new InputStreamReader(is)); 

      response = new StringBuffer(); 

      while ((line = rd.readLine()) != null) { 
       response.append(line); 
       response.append('\n'); 
      } 
      Log.e("Response", response.toString() + " "); 

      rd.close(); 
     } catch (IOException e) { 
      Log.e("BUFFER_READER", e.toString()); 
     } catch (NullPointerException e) { 
      Log.e("NullPointerException", e.toString()); 
     } finally { 
      connection.disconnect(); 
     } 

     try { 


      return new JSONObject(response.toString()); 
     } catch (JSONException e) { 
      Log.e("JSONException", e.toString()); 

     } 
     return null; 
    } 

Также вы используете localHost, у вас должен быть эмулятор, который может подключаться к локальному хосту. Если он не будет работать на каком-либо устройстве.

1

попробовать это:

private String post(String url) throws JSONException { 
    JSONObject json = new JSONObject(); 
    try { 
     String query = ""; 
     String EQ = ":"; 
     String AMP = "&"; 
     for (NameValuePair param : parameters) { 
      query = json.put(param.getName(), param.getValue()) + ","; 

     } 

     // url+= "?" + query; 
     HttpClient client = new DefaultHttpClient(); 
     HttpPost post = new HttpPost(url); 

     if (parameters != null) { 

      StringEntity se = new StringEntity(query.toString()); 
      se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, 
        "application/json")); 

      post.setEntity(se); 

      Log.d("POSTQuery", url + parameters); 
     } 

     HttpResponse response = client.execute(post); 
     StatusLine statusLine = response.getStatusLine(); 
     Log.d("Status Code", "" + statusLine.getStatusCode()); 
     if (statusLine.getStatusCode() == 200) { 
      return StringifyResponse(response); 
     } 

     Log.d("POSTQuery", url); 

     // Log.d("response", response.toString()); 
     return StringifyResponse(response); 

    } catch (ClientProtocolException e) { 
    } catch (IOException e) { 
     Log.d("response", e.toString()); 
     return "IOException"; 
    } 

    return null; 
} 
+0

'HttpClient' устарел сейчас. Вы не должны его использовать. – Minhtdh

+0

Да, вы правы @Minhtdh, как сказал разработчик Android [здесь] (http://developer.android.com/reference/org/apache/http/client/HttpClient.html), он устарел от уровня API 22. –

0

необходимо отформатировать все URL-адрес строки запроса, а затем использовать outputwriter промывать данные:

// Create data variable for sent values to server 

     String data = URLEncoder.encode("syskey", "UTF-8") 
        + "=" + URLEncoder.encode("1234", "UTF-8"); 

     data += "&" + URLEncoder.encode("usrname", "UTF-8") + "=" 
        + URLEncoder.encode("256", "UTF-8"); 

     data += "&" + URLEncoder.encode("usrpwd", "UTF-8") 
        + "=" + URLEncoder.encode("556", "UTF-8"); 

, а затем промывать данные:

 URLConnection conn = url.openConnection(); 
     conn.setDoOutput(true); 
     OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
     wr.write(data); 
     wr.flush(); 

Ссылка здесь: http://androidexample.com/How_To_Make_HTTP_POST_Request_To_Server_-_Android_Example/index.php?view=article_discription&aid=64&aaid=89

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