編輯:關於Android編程
和之前一樣,成功發布一條文字信息搞了N久;現在為了實現發布帶圖片的微博,又搞了我兩個星期(抱歉,低效率,源於一天不過1小時搞這個),今天終於成功了。主要還是自己對HttpClient不太熟悉的緣故導致,這次是參考開放平台的SDK源代碼寫成的。不過,個人還是用自己寫的basestring、簽名函數,重要的參考在於HttpPost如何帶上文件參數。見代碼。
要點1:參數"pic"不加入簽名
要點2:由於上傳的實體除了文本信息外,還有附件,所以選用MultipartEntity,此處需要
import org.apache.http.entity.mime
由於Andriod本身lib不帶這個,所以得自己添加mime庫,可以從騰訊開放平台提供的Android SDK裡面找到,或者自己百度搜索下載去。
[java]
/**發布一張圖片*/
public static String SendMessage (Oauth oauth,String content,String clientip,String jing,String wei,String picpath){
//System.out.println("sendMessage(圖片)");
String url="http://open.t.qq.com/api/t/add_pic";
oauth.oauth_nonce=Utils.getRandomString(32);
oauth.oauth_timestamp=String.valueOf(System.currentTimeMillis()/1000);
BaseString bs=new BaseString();
bs.setHttpMethod("POST");
bs.setURL(url);
bs.addParams("oauth_consumer_key", oauth.oauth_consumer_key);
bs.addParams("oauth_token", oauth.oauth_token);
bs.addParams("oauth_nonce", oauth.oauth_nonce);
bs.addParams("oauth_timestamp", oauth.oauth_timestamp);
bs.addParams("oauth_signature_method","HMAC-SHA1");
bs.addParams("oauth_version","1.0");
bs.addParams("format", "json");
bs.addParams("content", URLEncoder.encode(content));
bs.addParams("longitude", jing);//經緯度是可選參數
bs.addParams("latitude", wei);
bs.addParams("syncflag", "1");
bs.addParams("clientip", clientip);
//bs.addParams("pic", picpath);//注意,pic不用於簽名,所以此處屏蔽掉
oauth.oauth_signature=Utils.getSignature(bs.getBaseString(),oauth.oauth_consumer_secret+"&"+oauth.oauth_token_secret);
System.out.println("signature="+oauth.oauth_signature);
//以上部分,各位朋友看了可能有點暈,這裡有關簽名的方法,可以參考我之前發布的騰訊微博開放平台入門1-5
//各位也可自己用其他方法獲取簽名
try{
HttpPost post=new HttpPost(url);
post.getParams().setParameter("http.socket.timeout",new Integer(20000));
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("oauth_consumer_key",oauth.oauth_consumer_key));
params.add(new BasicNameValuePair("oauth_token",oauth.oauth_token));
params.add(new BasicNameValuePair("oauth_version","1.0"));
params.add(new BasicNameValuePair("oauth_signature_method","HMAC-SHA1"));
params.add(new BasicNameValuePair("oauth_signature",oauth.oauth_signature));
params.add(new BasicNameValuePair("oauth_nonce",oauth.oauth_nonce));
params.add(new BasicNameValuePair("oauth_timestamp",oauth.oauth_timestamp));
params.add(new BasicNameValuePair("format","json"));
params.add(new BasicNameValuePair("content",content));
params.add(new BasicNameValuePair("longitude",jing));
params.add(new BasicNameValuePair("latitude",wei));
params.add(new BasicNameValuePair("syncflag", "1"));
params.add(new BasicNameValuePair("clientip", clientip));
//此處params不添加pic
MultipartEntity mEntity=new MultipartEntity();//此處用上了Multipartentity
StringBody stringBody;
FormBodyPart fbp;
//實話識貨,這個for沒看懂,懶得百度去,反正大概就是將params的每個參數轉換後添加到mEntity
for (NameValuePair queryParam : params) {
stringBody = new StringBody(queryParam.getValue(), Charset.forName("UTF-8"));
fbp = new FormBodyPart(queryParam.getName(), stringBody);
mEntity.addPart(fbp);
}
//圖片是文件,下面請看清楚了
File file=new File(picpath);
FileBody fb=new FileBody(file,"image/png", "UTF-8");
fbp = new FormBodyPart("pic", fb);
mEntity.addPart(fbp);
//剩下都是一樣的了
post.setEntity(mEntity);
DefaultHttpClient httpClient=new DefaultHttpClient();
HttpResponse response=httpClient.execute(post);
StatusLine sl=response.getStatusLine();
int code = sl.getStatusCode();
System.out.println("運行到code="+String.valueOf(code));
if(code==200){
String result = EntityUtils.toString(response.getEntity());
System.out.println("result="+result);
return result;
}else{
return "false";
}
}catch(Exception ex){
return "false";
}
}
ViewAndroid所有的控件都是View或者View的子類,它其實表示的就是屏幕上的一塊矩形區域,用一個Rect來表示,left,top表示View相對於它的pare
Android手機的碎片化問題不用贅述,在此對適配什麼及適配方法進行一次總結。我們先來看被適配的對象。 第一類是操作系統適配,即適配Android 2.X,4.X,5.X
前言:這段時候有點忙,因為在趕項目,說忙也都是在敷衍,時間擠擠還是有的,從開始寫博客的那一刻起就應該一直堅持下來,不要三天打魚兩天曬網,上次寫過一個Android進階之(