Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Android中发送多部分表单数据_Java_Android_Http_Multipartform Data - Fatal编程技术网

Java 在Android中发送多部分表单数据

Java 在Android中发送多部分表单数据,java,android,http,multipartform-data,Java,Android,Http,Multipartform Data,我使用以下代码(取自SO)将一些数据发布到PHP脚本: HttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(Web.API_PREFIX_GENERAL + "ajax/process.AL.php"); MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); req

我使用以下代码(取自SO)将一些数据发布到PHP脚本:

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("abcd@abcd.com"));
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/process.AL.php?mail=abcd@abcd.com&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
,因为我以后还要发布图像


谢谢。

我测试了您的代码,并使用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("abcd@abcd.com"));
        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();
    }
} 
类MyTask扩展了AsyncTask{
@凌驾
受保护的Void doInBackground(Void…参数){
testUpload();
返回null;
}
}
public void testUpload(){
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(“http://www.google.com/“+”ajax/process.AL.php”);
试一试{
MultipartEntity reqEntity=新的MultipartEntity(HttpMultipartMode.BROWSER_兼容);
reqEntity.addPart(“邮件”),新的StringBody(“abcd@abcd.com"));
请求实体添加部分(“远程”,新的StringBody(“1”);
要求实体添加部件(“altitle”,新纵梁主体(“GHI”);
要求实体添加部分(“aldesc”,新的StringBody(“JKL”);
要求添加部件(“t”,新的纵梁主体(“N”);
要求实体添加部分(“p”,新的主体(“全部”);
httpPost.setEntity(reqEntity);
httpClient.execute(httpPost);
}捕获(不支持的编码异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(客户端协议例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
} 

我认为问题不在客户端,而在服务器端。 在第二个示例中,您发送的是HTTP POST,但发送的参数类似于GET


通常在发送数据文件(即上载文件)时使用多部分请求,但在我看来,您的代码中没有发送任何数据文件,因此不应使用多部分请求。

您可能在整数到字符串的转换方面有问题。试试这个:

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

您可以使用
lati+“”
代替
Integer.toString(lati)

,但这不起作用。这是什么意思?您是否收到任何错误?请将代码放入try-catch块并检查您的stacktrace@javapirate事实上,它是有效的。但什么也没发生。没有错误,也没有发布内容。@Roshnal
process.AL.php
使用$\u GET代替$_POST@SherifelKhatib不,它应该正常工作,因为iPhone应用程序(属于同一个项目,但由另一个项目完成。不是我)使用此链接工作。还有Windows 8应用程序。是的,可能是这样。我必须和服务器端编程人员核实一下,然后我会在这里发帖。