Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.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
Android HttpEntity目标主机不能为空_Android_Post_Multipart - Fatal编程技术网

Android HttpEntity目标主机不能为空

Android HttpEntity目标主机不能为空,android,post,multipart,Android,Post,Multipart,我正在尝试从我的android虚拟机发布到我的开发主机上运行的web API。 我可以做一个GET请求和一个普通的JSON POST,但是当我尝试作为一个多部分来做时,它变得很棘手 经过一些研究,我从穆罕默德·巴巴尔那里找到了一个很好的答案。这有助于HTTP实体 因此,错误是: java.lang.IllegalStateException:目标主机不能为null,也不能在参数中设置。scheme=null,host=null,path= 当代码到达以下位置时发生: HttpResponse r

我正在尝试从我的android虚拟机发布到我的开发主机上运行的web API。 我可以做一个GET请求和一个普通的JSON POST,但是当我尝试作为一个多部分来做时,它变得很棘手

经过一些研究,我从穆罕默德·巴巴尔那里找到了一个很好的答案。这有助于HTTP实体

因此,错误是: java.lang.IllegalStateException:目标主机不能为null,也不能在参数中设置。scheme=null,host=null,path=

当代码到达以下位置时发生:

HttpResponse response = client.execute(post);
我的代码:

public class MainActivity extends Activity {
    private DefaultHttpClient mHttpClient;
    private String result;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    public void ServerCommunication(View view) {
        HttpParams params = new BasicHttpParams();
        params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
        mHttpClient = new DefaultHttpClient(params);
        uploadUserPhoto();
    }



    public void uploadUserPhoto() {
        try{
            String uri = URLEncoder.encode( "http://10.0.2.2:53918/api/Problems","UTF-8");
            HttpClient client = new DefaultHttpClient();
            HttpPost post = new HttpPost(uri);


            MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
            entityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

            entityBuilder.addTextBody("Id", "7");
            entityBuilder.addTextBody("DateReported", "22/04/2015");
            entityBuilder.addTextBody("Category", "C");

            HttpEntity entity = entityBuilder.build();
            post.setEntity(entity);
            HttpResponse response = client.execute(post);
            HttpEntity httpEntity = response.getEntity();
            result = EntityUtils.toString(httpEntity);
            Log.v("result", result);
        }

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



    }
请帮助我解决上面的IllegalStateException。

URLEncoder旨在进行编码,而不是创建带有scheme、host和port的URI。而是将URI移动到HttpPost的构造函数,例如新的HttpPosthttp://10.0.2.2.


此外,此API在API级别22时已被弃用,请参阅以获取较新的替代API。

@birmsi别忘了接受最好的答案,并采取适当的措施。