2013-04-21 5 views
3

Я использовал следующий код (взятый из SO), чтобы отправить некоторые данные в PHP скрипт:Отправка Multipart данных формы в Android

HttpClient httpClient = new DefaultHttpClient(); 
HttpPost httpPost = new HttpPost(Web.API_PREFIX_GENERAL + "ajax/process.AL.php"); 

MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 
reqEntity.addPart("mail", new StringBody("[email protected]")); 
reqEntity.addPart("remote", new StringBody("1")); 
reqEntity.addPart("altitle", new StringBody("GHI")); 
reqEntity.addPart("aldesc", new StringBody("JKL")); 
reqEntity.addPart("t", new StringBody("N")); 
reqEntity.addPart("lat", new StringBody(lati)); 
reqEntity.addPart("long", new StringBody(longi)); 
reqEntity.addPart("p", new StringBody("all")); 

httpPost.setEntity(reqEntity); 
httpClient.execute(httpPost); 

... И это не производит ничего. Нет ошибки, но ничего не публикуется.

Однако, если я использую что-то вроде ниже и имеют никаких частей не добавлено reqEntity,

String url = Web.API_PREFIX_GENERAL + "ajax/[email protected]&remote=1&altitle=GHI" + 
        "&aldesc=JKL&t=N&lat=" + lati + "&long=" + longi + "&p=all"; 

HttpClient httpClient = new DefaultHttpClient(); 
HttpPost httpPost = new HttpPost(url); 

MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 

httpPost.setEntity(reqEntity); 
httpClient.execute(httpPost); 

... это работает

Я все необходимые библиотеки Apache настроить также. Итак, любая идея, почему это так?

Мне нужно использовать MultipartEntity, потому что мне также придется отправить изображение позже.

Спасибо.

+2

** И это не работает. ** Что это значит? Вы получаете какую-либо ошибку? –

+0

поместите свой код в блок try-catch и проверьте свой стек. – shiladitya

+0

@javapirate На самом деле, он работает. Но ничего не происходит. Никакой ошибки, никаких опубликованных материалов тоже. – Roshnal

ответ

0

Я проверил ваш код и проверил HTTP-запрос с помощью прокси-сервера http. Это работает. Возможно, в вашем php-коде возникла некоторая ошибка.

class MyTask extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected Void doInBackground(Void... params) { 
     testUpload(); 
     return null; 
    } 

} 

public void testUpload() { 
    HttpClient httpClient = new DefaultHttpClient(); 
    HttpPost httpPost = new HttpPost("http://www.google.com/" + "ajax/process.AL.php"); 

    try { 
     MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 
     reqEntity.addPart("mail", new StringBody("[email protected]")); 
     reqEntity.addPart("remote", new StringBody("1")); 
     reqEntity.addPart("altitle", new StringBody("GHI")); 
     reqEntity.addPart("aldesc", new StringBody("JKL")); 
     reqEntity.addPart("t", new StringBody("N")); 
     reqEntity.addPart("p", new StringBody("all")); 

     httpPost.setEntity(reqEntity); 
     httpClient.execute(httpPost); 
    } catch (UnsupportedEncodingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (ClientProtocolException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 
1

Я думаю, что проблема не в стороне клиента, а на стороне сервера. Во втором примере вы отправляете HTTP POST, но вы отправляете такие параметры, как GET.

Обычно, когда вы отправляете файл данных (например, загружаете файл), используется многостраничный запрос, но мне кажется, что в коде вы не отправляете какой-либо файл данных, поэтому вам не следует использовать многостраничный запрос.

+0

Да, это может быть так. Я должен проверить с парнями на стороне сервера, а затем я отправлю сюда. – Roshnal

0

Возможно, возникла проблема с преобразованием целых чисел в строку. Попробуйте это:

reqEntity.addPart("lat", new StringBody(Integer.toString(lati))); 
reqEntity.addPart("long", new StringBody(Integer.toString(longi))); 

Вы можете использовать lati + "" вместо Integer.toString(lati).

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