package com.shaweibo.biu.dao;
import android.graphics.Bitmap;
import com.squareup.okhttp.FormEncodingBuilder;
import com.squareup.okhttp.RequestBody;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Set;
public class WeiboParameters extends HashMap<String, Object>
{
// URL Encode
public String encode() {
StringBuilder str = new StringBuilder();
Set<String> keys = keySet();
boolean first = true;
for (String key : keys) {
Object value = get(key);
if (value instanceof Bitmap) {
// Bitmap detected, we should use multipart encode instead
return null;
} else {
if (first) {
first = false;
} else {
str.append("&");
}
try {
str.append(URLEncoder.encode(key, "UTF-8")).append("=").append(URLEncoder.encode(value.toString(), "UTF-8"));
} catch (UnsupportedEncodingException e) {
}
}
}
return str.toString();
}
public RequestBody convertToRequestBody(){
Set<String> keys = keySet();
FormEncodingBuilder builder = new FormEncodingBuilder();
for (String key : keys) {
Object value = get(key);
try {
builder.add(key,URLEncoder.encode(value.toString(), "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return builder.build();
}
public Object[] toBoundaryMsg() {
String b = getBoundaryStr();
StringBuilder str = new StringBuilder();
str.append("--").append(b).append("\r\n");
Set<String> keys = keySet();
Bitmap bitmap = null;
String bmKey = null;
for (String key : keys) {
Object value = get(key);
if (value instanceof Bitmap) {
bitmap = (Bitmap) value;
bmKey = key;
} else {
str.append("Content-Disposition: form-data; name=\"");
str.append(key).append("\"\r\n\r\n");
str.append(value).append("\r\n--");
str.append(b).append("\r\n");
}
}
if (bitmap != null) {
str.append("Content-Disposition: form-data; name=\"");
str.append(bmKey).append("\"; filename=\"").append(System.currentTimeMillis()).append(".jpg");
str.append("\"\r\nContent-Type: image/jpeg\r\n\r\n");
}
return new Object[]{b, bitmap, str.toString()};
}
private String getBoundaryStr() {
return String.valueOf(System.currentTimeMillis() * Math.random() % 1024);
}
}