HttpEntity目标主机不能为空

时间:2015-04-23 18:16:25

标签: android post multipart

我正在尝试从我的Android虚拟机发布POST到我的开发主机上运行的Web API。 我可以做一个GET请求和一个“正常”的JSON POST,但当我尝试将它作为一个MultiPart时,它变得棘手。

经过一些研究后,我从穆罕默德巴巴尔Post multipart request with Android SDK找到了一个很好的答案。这有助于HTTP实体。

所以,错误:
java.lang.IllegalStateException:目标主机不能为null,或者在参数中设置。 scheme = null,host = null,path = http://10.0.2.2:53918/api/Problems

当代码到达:

时会发生
kmalloc()

我的代码:

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(); } }

1 个答案:

答案 0 :(得分:0)

URLEncoder旨在编码query parameters,而不是使用scheme,host和port创建URI。而是将URI移动到HttpPost的构造函数,例如new HttpPost("http://10.0.2.2")

此外,此API已在API级别22弃用,请参阅documentation了解更新的替代API。