2015-03-20 3 views
-1

Как я могу выполнить запрос Put, чтобы изменить значение атрибута Val в этом XML-файле? :Rest Put Request

<str href= "http://..../" is= "WritablePoint" writable= "true" status= "ok" val= "Off" > . 

Я попытался с помощью:

public class MainActivity extends Activity { 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main_layout); 

    HttpClient client = new DefaultHttpClient(); 
    HttpPut put = new HttpPut("http://../"); 
    List<NameValuePair> pairs = new ArrayList<NameValuePair>(); 
    pairs.add(new BasicNameValuePair("val", "on")); 
    pairs.add(new BasicNameValuePair("val = ", "on")); 
    try { 
     put.setEntity(new UrlEncodedFormEntity(pairs)); 
    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } 

} 
} 

Но does'nt работу.

+0

1. Что ваше требование REST API? 2. Вы не вызываете put.execute() ;. 3. В android вы должны поместить свой HTTP-запрос в отдельный поток. –

ответ

0

Не могли бы вы использовать то, что ожидает служба RESTful? Он ожидает формат XML для содержимого своего содержимого запроса? Если это так, вы пытаетесь отправить форму, а не содержимое XML.

Я вижу два варианта:

  • Вы можете использовать библиотеку для создания контента XML и передать его в виде строки метод setEntity, как описано ниже:

    HttpClient httpClient = new DefaultHttpClient(); 
    HttpPost httpPost = new HttpPost("http://..."); 
    httpPost.setEntity(new StringEntity("<str val=\"On\" />")); 
    httpPost.setHeader("Accept", "application/xml"); 
    httpPost.setHeader("Content-type", "application/xml"); 
    

    Что касается способа использования XML для Android, вы можете посмотреть на эти ссылки: http://www.ibm.com/developerworks/opensource/library/x-android/ и https://xjaphx.wordpress.com/2011/10/27/android-xml-adventure-create-write-xml-data/.

  • Вы можете использовать соевый подход с рамками REST высокого уровня, как Restlet, как описано ниже:

    ClientResource cr = new ClientResource("http://..."); 
    RequestContentBean bean = new RequestContentBean(); 
    bean.setIs("WritablePoint") 
    bean.setWritable(true); 
    bean.setStatus("ok"); 
    bean.setVal("Off"); 
    cr.put(bean); 
    

    Классом RequestContentBean является определенным пользователем класса (бобы/POJO, который содержит данные, будет отправлено на запрос:

    public class RequestContentBean { 
        private String is; 
        private boolean writable; 
        private String status; 
        private String val; 
    
        // Getters and setters 
        (...) 
    } 
    

    в этом случае, вы можете использовать конвертор сервис Restlet для преобразования компонент с ожидаемым содержанием XML для получения более подробной информации, вы можете посмотреть по этой ссылке:. http://restlet.com/technical-resources/restlet-framework/guide/2.3/editions/android/sample ,

    Вы можете заметить, что если вы хотите отправить непосредственно XML-строку вместо этого, вы можете использовать следующий код (я думаю, что это то, что может вам больше по душе - подход к компоненту может оказаться немного сложным на первом зрение):

    ClientResource cr = new ClientResource("http://..."); 
    cr.put(new StringRepresentation(
          "<str val=\"On\" />", 
          MediaType.APPLICATION_XML)); 
    

    Вы можете скачать Android издание рамках Restlet по следующему адресу: http://restlet.com/downloads/current/. В поле выбора выберите значение Android.

    Если вы используете Maven, вы можете добавить это в ваших зависимости:

    <dependencies> 
        (...) 
        <dependency> 
         <groupId>org.restlet.gae</groupId> 
         <artifactId>org.restlet</artifactId> 
         <version>2.3.1</version> 
        </dependency> 
        (...) 
    </dependencies> 
    
    <repositories> 
        <repository> 
         <id>maven-restlet</id> 
         <name>Public online Restlet repository</name> 
         <url>http://maven.restlet.com</url> 
        </repository> 
    </repositories> 
    

Надеется, что это помогает вам, Тьерри

+0

Привет, спасибо за ваш полный ответ! В первом примере я не вижу, как идентифицировать значение для изменения ... Restlet кажется легким .. но что делает RequestContentBean(), является ли это рецептом? – Stark

+0

Я обновил свой ответ с более подробной информацией о Restlet. В противном случае вы могли бы указать формат, который ожидает ваш REST-сервис (содержимое XML, форма кодируется, JSON, ...)? Благодаря! –

+0

Спасибо, ваши ответы очень полезны! Я думаю, что он ожидает XML-контента, я новичок в этом. Я не очень уверен.но я знаю, что значение атрибута val файла xml является целью, я должен изменить его на «on». Я думаю, что это строка. Я сделал это на javascript следующим образом: if (Val == 'On') {Data = ; } else {Data = ; } recup.open ('PUT', адрес xml, false); recup.send (данные) exit() – Stark