2016-04-11 37 views
4

kullanarak nasıl veri gönderilir? API22'den 22'ye geçiş için httpclient kullanılamıyor dediğim için değişiklik yaptım. API22'ye geçtiğimde HttpClient, HttpPost ve NameValuePair.I ile ilgili bir sorun yaşadım. HttpURLConnectionHandler'ı kullanmak için bir çözüm buldum. Aşağıdaki yöntem için nasıl kullanıldığını bilmiyorum. Eğer "mesajı" ve "id" için kendi tane oluşturabilirsiniz daha MessageSenderContent içinHttpURLConnection

public boolean sendPost(MessageSenderContent content) { 

     HttpURLConnection connection; 
     try { 
      URL gcmAPI = new URL("your_url"); 
      connection = (HttpURLConnection) gcmAPI.openConnection(); 

      connection.setRequestMethod("POST");// type of request 
      connection.setRequestProperty("Content-Type", "application/json");//some header you want to add 
      connection.setRequestProperty("Authorization", "key=" + AppConfig.API_KEY);//some header you want to add 
      connection.setDoOutput(true); 

      ObjectMapper mapper = new ObjectMapper(); 
      mapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY); 
      DataOutputStream dataOutputStream = new DataOutputStream(connection.getOutputStream()); 
      //content is the object you want to send, use instead of NameValuesPair 
      mapper.writeValue(dataOutputStream, content); 

      dataOutputStream.flush(); 
      dataOutputStream.close(); 

      responseCode = connection.getResponseCode(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     if (responseCode == 200) { 
      Log.i("Request Status", "This is success response status from server: " + responseCode); 
      return true; 
     } else { 
      Log.i("Request Status", "This is failure response status from server: " + responseCode); 
      return false; 
     } 
} 

Örnek:

public void send(View v) 
{ 

    HttpClient httpclient = new DefaultHttpClient(); 
    // put the address to your server and receiver file here 
    HttpPost httppost = new HttpPost("http://yoursite/yourPHPScript.php"); 
    try { 
     List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
     // we wont be receiving the parameter ID in your server, but it is here to show you how you can send more data 
     nameValuePairs.add(new BasicNameValuePair("id", "12345")); 
     // message is the parameter we are receiving, it has the value of 1 which is the value that will be sent from your server to your Arduino board 
     nameValuePairs.add(new BasicNameValuePair("message", "1")); 
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
     httpclient.execute(httppost); // send the parameter to the server 
    } catch (ClientProtocolException e) { 
     // TODO Auto-generated catch block 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
    } 
} 

Birisi lütfen bana

+0

? (Hangi hata iletilerini alıyorsunuz?) –

+0

HttpPost, HttpClient ve NameValuePair kullanımdan kaldırılmıştır. Bu post yöntemini zaten kullandığım HttpURLConnectionHandler Sınıfı ile kullanmam gerekiyor @ChrisBritt – Shrei

cevap

4

Böyle bir şey yapabiliriz yardımcı

public class MessageSenderContent implements Serializable { 
    private List<String> registration_ids; 
    private Map<String, String> data; 

    public void addRegId(String regId){ 
     if (registration_ids==null){ 
      registration_ids = new LinkedList<>(); 
      registration_ids.add(regId); 
     } 
    } 

    public void createData(String title,String message) { 
     if (data == null) 
      data = new HashMap<>(); 

     data.put("title", title); 
     data.put("message", message); 
    } 

    public Map<String, String> getData() { 
     return data; 
    } 

    public void setData(Map<String, String> data) { 
     this.data = data; 
    } 

    public List<String> getRegIds() { 
     return registration_ids; 
    } 

    public void setRegIds(List<String> regIds) { 
     this.registration_ids = regIds; 
    } 

    @Override 
    public String toString() { 
     return "MessageSenderContent{" + 
       "registration_ids=" + registration_ids + 
       ", data=" + data + 
       '}'; 
    } 

GÜNCELLEME:

Sen build.gradle dosyasında aktarılmasından sonra bu HttpUrlConnection kullanabilirsiniz

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.0" 
    useLibrary 'org.apache.http.legacy' // this one will let you use HttpUrlConnection 
    packagingOptions { 
    exclude 'META-INF/NOTICE' 
    exclude 'META-INF/LICENSE' 
    exclude 'META-INF/LICENSE.txt' 
    exclude 'META-INF/NOTICE.txt' 
} 
    ... 
} 
tam olarak ne yapmaya çalışıyorsun, ve bunu ilgili sorun yaşıyorsanız bu özellikle ne Ne
+0

Çok teşekkürler! Fakat kullandığınız HttpURLConnection sınıfını da alabilir miyim? – Shrei

+0

HttpURLConnection kodunu da gönderebilir misiniz? – Shrei

+0

Bazı kütüphaneleri içe aktardıktan sonra kullanabileceğiniz bir sınıf. Cevabımı güncelledim ... –