WeiboのAndroidSDKをアプリに統合しているときに、HttpClient
そこに含まれるクラスが、Androidが非常に嫌う古いライブラリを使用していることを発見しました(実際、JavaSDKをAndroidEclipseプロジェクトに貼り付けて出荷しただけだと思います)。このライブラリは、Weibo内でPOSTリクエストを(PostMethod
クラスを使用して)アセンブルしてWeiboサーバーに送信するという単一の機能のみを実行しているようです。HttpPost
これをAndroidに含まれている標準のApacheに置き換えるのは比較的簡単だと思いました。
残念ながら、このPart
クラスには単純な同等のものがないようです。少なくともいくつかのsはクラスでPart
置き換えることができますが、Weiboによって定義されたカスタムがあります。これは。のように見えます。BasicNameValuePair
Part
ByteArrayEntity
multPartUrl
(タイプミスではなく)と呼ばれる2つの方法を調べる
最初のものはここに複製されます(2番目は非常に似ていますが、異なるタイプのコンテンツに貼り付けられます):
public Response multPartURL(String url, PostParameter[] params,ImageItem item,boolean authenticated) throws WeiboException{
PostMethod post = new PostMethod(url);
try {
org.apache.commons.httpclient.HttpClient client = new org.apache.commons.httpclient.HttpClient();
long t = System.currentTimeMillis();
Part[] parts=null;
if(params==null){
parts=new Part[1];
}else{
parts=new Part[params.length+1];
}
if (params != null ) {
int i=0;
for (PostParameter entry : params) {
parts[i++]=new StringPart( entry.getName(),(String)entry.getValue());
}
parts[parts.length-1]=new ByteArrayPart(item.getContent(), item.getName(), item.getImageType());
}
post.setRequestEntity( new MultipartRequestEntity(parts, post.getParams()) );
List<Header> headers = new ArrayList<Header>();
if (authenticated) {
if (basic == null && oauth == null) {
}
String authorization = null;
if (null != oauth) {
// use OAuth
authorization = oauth.generateAuthorizationHeader( "POST" , url, params, oauthToken);
} else if (null != basic) {
// use Basic Auth
authorization = this.basic;
} else {
throw new IllegalStateException(
"Neither user ID/password combination nor OAuth consumer key/secret combination supplied");
}
headers.add(new Header("Authorization", authorization));
log("Authorization: " + authorization);
}
client.getHostConfiguration().getParams().setParameter("http.default-headers", headers);
client.executeMethod(post);
Response response=new Response();
response.setResponseAsString(post.getResponseBodyAsString());
response.setStatusCode(post.getStatusCode());
log("multPartURL URL:" + url + ", result:" + response + ", time:" + (System.currentTimeMillis() - t));
return response;
} catch (Exception ex) {
throw new WeiboException(ex.getMessage(), ex, -1);
} finally {
post.releaseConnection();
}
}
にいくつかのPart
sが追加されMultiPartRequestEntity
、最後がバイト配列またはファイルであることがわかります。
MultiPartRequestEntity
(もしあれば)より最新のApacheライブラリと同等のものは何ですか?- バイト配列をに追加する方法はあり
UrlEncodedFormEntity
ますか? - あるいは、名前と値のペアを?に追加する方法はあり
ByteArrayEntity
ますか? - 私が完全に見逃しているものは他にありますか?