2017-10-09 17 views
0

J'ai un json données dans l'application android et je veux le passer à une adresse IP avec le port n ° 80. Avec le code ci-dessous, je peux envoyer des données String sans problèmes, cependant quand j'essaie de transmettre les données json moi error "caractère illégal dans la requête à l'index 22: http://192.168.x.x:80/ {" MainUi ": {" IpAddress ":" 192.168.xx », "message": "novembre", .....}comment envoyer des données JSON d'android à l'adresse IP par exemple 192.168.2.1:80?

private class TaskRun extends AsyncTask<String, Void, String> { 

      String server; 

      TaskEsp(String server) { 
       this.server = server; 
      } 

      @Override 
      protected String doInBackground(String... params) { 
       String val = params[0]; 
       System.out.print(val); 
       final String p = "http://" + server + "/" + val; 

       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         Log.v(TAG, p); 
        } 
       }); 


       String serverResponse = ""; 
       HttpClient httpclient = new DefaultHttpClient(); 
       try { 
        HttpGet httpGet = new HttpGet(); 
        httpGet.setURI(new URI(p)); 
        HttpResponse httpResponse = httpclient.execute(httpGet); 
        InputStream inputStream = null; 
        inputStream = httpResponse.getEntity().getContent(); 
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 
        serverResponse = bufferedReader.readLine(); 

        inputStream.close(); 
       } catch (URISyntaxException e) { 
        e.printStackTrace(); 
        serverResponse = e.getMessage(); 
       } catch (ClientProtocolException e) { 
        e.printStackTrace(); 
        serverResponse = e.getMessage(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
        serverResponse = e.getMessage(); 
       } 

       return serverResponse; 
      } 
+0

JSON comme paramètre url ???? –

Répondre

0

Tout d'abord, l'envoi de données Json dans Url est une mauvaise pratique, mais vous devriez envoyer des données dans le corps de la requête HTTP POST ou en tant que paramètres d'URL dans la requête HTTP GET. writi ng caractères dangereux (accolades) dans l'URL.

0
JSONObject jsonObj = new JSONObject(); 
jsonObj.put("name", "Jhon"); 

HttpClient httpClient = new DefaultHttpClient(); 
      try { 
    HttpGet httpGet = new HttpGet(); 
    httpGet.setHeader("Content-type", "application/json"); 
    httpGet.setHeader("Accept-Encoding", "compress, gzip"); 
    httpGet.setHeader("Accept", "application/json"); 
    http.setURI(URI.create(p)); 

    StringEntity entity = new StringEntity(jsonObj.toString(), HTTP.UTF_8); 
    entity.setContentEncoding(HTTP.UTF_8); 
    entity.setContentType("application/json"); 

    HttpResponse httpResponse = httpClient.execute(httpGet); 

    InputStream inputStream = AndroidHttpClient.getUngzippedContent(httpResponse.getEntity()); 

    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 
    serverResponse = bufferedReader.readLine(); 

    inputStream.close(); 
} catch (URISyntaxException e) { 
    e.printStackTrace(); 
    serverResponse = e.getMessage(); 
} catch (ClientProtocolException e) { 
    e.printStackTrace(); 
    serverResponse = e.getMessage(); 
} catch (IOException e) { 
    e.printStackTrace(); 
    serverResponse = e.getMessage(); 
} 
0

Merci à tous pour avoir mis en place le programme.

Le code ci-dessous explique comment j'ai utilisé les données JSON et l'envoyer sous forme de chaîne.

public void writeJSON() { 
     JSONObject LedActivity = new JSONObject(); 
     JSONObject JsonRawData = new JSONObject(); 
     try { 
      LedActivity.put("Type of Light", Spinnerposition); //gets the current spinnerPosition 
      LedActivity.put("Light Brightness", Bit); 
      LedActivity.put("TimeDelay",TimePosition); //gets the seekbar position 
      LedActivity.put("Blink", isBlinkTurned); // gets the state of button 
      LedActivity.put("Fade", isFadeTurned); 

      JsonRawData.put("LedActivity", LedActivity); 
      jsonLight = JsonRawData.toString(1); 
      System.out.println(jsonLight); 
      sendPost(jsonLight); // send the json light string data to send post function 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

Le code ci-dessous envoyer les données dans la chaîne à une adresse IP sur le port 80.

public static void sendPost(final String postData) { 
    Thread thread = new Thread(new Runnable() { 
     @Override 
     public void run() { 
      try { 
       URL url = new URL("http://" + IpSelected + ":80"); 
       HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
       conn.setRequestMethod("POST"); 
       conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8"); 
       conn.setRequestProperty("Accept", "application/json"); 
       conn.setDoOutput(true); 
       conn.setDoInput(true); 

       DataOutputStream os = new DataOutputStream(conn.getOutputStream()); 
       // os.writeBytes(URLEncoder.encode(postData, "UTF-8")); 
       os.writeBytes(postData); 

       os.flush(); 
       os.close(); 

       Log.i("STATUS", String.valueOf(conn.getResponseCode())); 
       Log.i("MSG", conn.getResponseMessage()); 

       conn.disconnect(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
    thread.start(); 
}