/* * Copyright (c) 2013. wyouflf (wyouflf@gmail.com) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.lidroid.xutils.http.client.entity; import com.lidroid.xutils.http.client.util.URLEncodedUtils; import com.lidroid.xutils.util.LogUtils; import org.apache.http.NameValuePair; import org.apache.http.entity.AbstractHttpEntity; import org.apache.http.message.BasicNameValuePair; import org.apache.http.protocol.HTTP; import java.io.*; import java.util.ArrayList; import java.util.List; /** * Author: wyouflf * Date: 13-7-26 * Time: 下午4:21 */ public class BodyParamsEntity extends AbstractHttpEntity implements Cloneable { protected byte[] content; private boolean dirty = true; private String charset = HTTP.UTF_8; private List<NameValuePair> params; public BodyParamsEntity() { this((String) null); } public BodyParamsEntity(String charset) { super(); if (charset != null) { this.charset = charset; } setContentType(URLEncodedUtils.CONTENT_TYPE); params = new ArrayList<NameValuePair>(); } public BodyParamsEntity(List<NameValuePair> params) { this(params, null); } public BodyParamsEntity(List<NameValuePair> params, String charset) { super(); if (charset != null) { this.charset = charset; } setContentType(URLEncodedUtils.CONTENT_TYPE); this.params = params; refreshContent(); } public BodyParamsEntity addParameter(String name, String value) { this.params.add(new BasicNameValuePair(name, value)); this.dirty = true; return this; } public BodyParamsEntity addParams(List<NameValuePair> params) { this.params.addAll(params); this.dirty = true; return this; } private void refreshContent() { if (dirty) { try { this.content = URLEncodedUtils.format(params, charset).getBytes(charset); } catch (UnsupportedEncodingException e) { LogUtils.e(e.getMessage(), e); } dirty = false; } } public boolean isRepeatable() { return true; } public long getContentLength() { refreshContent(); return this.content.length; } public InputStream getContent() throws IOException { refreshContent(); return new ByteArrayInputStream(this.content); } public void writeTo(final OutputStream outStream) throws IOException { if (outStream == null) { throw new IllegalArgumentException("Output stream may not be null"); } refreshContent(); outStream.write(this.content); outStream.flush(); } /** * Tells that this entity is not streaming. * * @return <code>false</code> */ public boolean isStreaming() { return false; } public Object clone() throws CloneNotSupportedException { return super.clone(); } }