我正在尝试从我的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();
}
}
。
答案 0 :(得分:0)
URLEncoder
旨在编码query parameters,而不是使用scheme,host和port创建URI。而是将URI移动到HttpPost
的构造函数,例如new HttpPost("http://10.0.2.2")
。
此外,此API已在API级别22弃用,请参阅documentation了解更新的替代API。