2016-06-15 5 views
1

Momentan lade ich Daten über eine externe URL ab, die ein PHP-Skript aktiviert und JSON-Werte zurückgibt. Es funktioniert gut.Post-String zu externer URL über Asynctask

Aber wie sende ich eine Zeichenfolge für die Suche verwendet werden, so dass ich die folgende an dem PHP-Skript tun kann:

$name = $_POST['name']; //this was sent from the Android app. How do I send this from the app. 
$sql = "SELECT name FROM tablename WHERE category = '$name'"; 
$result = mysqli_query($con, $sql) or die("Error in Selecting"); 

Hinweis: Ich will nicht, Volley verwenden.

Meine erweiterte AsyncTask-Klasse, die derzeit keinen Wert an die URL sendet.

class BackgroundTask extends AsyncTask<Void,Void,String> { 

     final String jsonUrl = "http://example.com/getdata.php"; 

     @Override 
     protected String doInBackground(Void... params) { 
      try { 
       URL url = new URL(jsonUrl); 
       HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection(); 
       InputStream in = httpURLConnection.getInputStream(); 
       BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in)); 
       StringBuilder stringBuilder = new StringBuilder(); 

       while ((jsonString = bufferedReader.readLine()) != null){ 
        stringBuilder.append(jsonString+"\n"); 
       } 

       bufferedReader.close(); 
       in.close(); 
       httpURLConnection.disconnect(); 
       return stringBuilder.toString().trim(); 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

      return null; 
     } 

     @Override 
     protected void onPostExecute(String s) { 
      super.onPostExecute(s); 

      products = new ArrayList<>(); 

      try { 
       jsonObject = new JSONObject(s); 
       String category = jsonObject.getString("viewProduct"); 
       JSONArray jsonArray = new JSONArray(category); 

       for(int x=0; x < jsonArray.length(); x++){ 
        JSONObject jsonPart = jsonArray.getJSONObject(x); 
        products.add(jsonPart.getString("name")); 
       } 

       adapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1, android.R.id.text1, products); 
       productListView.setAdapter(adapter); 

      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
+0

Sie einen String in der URL angehängt werden soll selbst ? – jitinsharma

+0

@jitinsharma nein, ich möchte nur eine Zeichenfolge an die URL senden. – JasSy

Antwort

0

Wenn Sie sprechen nur über Daten als den Körper des POST-Anfrage senden, können Sie es mit so etwas tun:

HttpURLConnection conn= (HttpURLConnection) url.openConnection();   
conn.setDoOutput(true); 
conn.setRequestMethod("POST"); 
conn.setRequestProperty("Content-Length", Integer.toString(postDataLength)); 
try { 
    DataOutputStream wr = new DataOutputStream(conn.getOutputStream()); 
    wr.write(postData); 
} catch (IOException ex) {} 
+0

Ich vermute, dies geschieht innerhalb der doInBackground-Methode? – JasSy

+0

Yup, es beinhaltet synchrone Netzwerkübertragung, so dass Sie es definitiv vom Hauptthread wollen. –

+0

Wie sende ich in diesem Fall die Zeichenfolge aus. wr.write-Methodensignaturen, die nur int- und byte-Arrays für diesen postData-Wert verwenden. – JasSy