作者微信 bishe2022

代码功能演示视频在页面下方,请先观看;如需定制开发,联系页面右侧客服
android 一个文件下载的工具类

Custom Tab

主类:

/**
 * <p>
 * Copyright: Copyright (c) 2015
 * Company: 
 * Description: 这里写这个文件是干什么用的
 * </p>
 * @Title ImgDownloadUtil.java
 * @Package c
 * @version 1.0
 * @author 
 * @date 2015年9月9日
 */
package com.iptvclient.android.baseclient.startupad;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.Locale;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

import com.androidsdk.download.DataDownload;
import com.androidsdk.download.bean.DataAttribute;
import com.androidsdk.http.bean.HttpRequest;
import com.androidsdk.http.bean.HttpRequestParams;
import com.androidsdk.http.bean.HttpResponse;
import com.androidsdk.http.download.IHttpDownloadListener;
import com.iptvclient.android.androidsdk.common.LogEx;

/** 
 * 下载保存图片的工具类
 * @ClassName:ImgDownloadUtil 
 * @Description: 这里用一句话描述这个类的作用 
 * @author: 
 * @date: 2015年9月9日
 *  
 */

public class ImgFileUtil
{
    
    private static String LOG_TAG = "StartUpAdUtil";
    
    private Context mContext;
    
    private ImgDownloadListener listener;
    
    private String mDownloadUrl;
    
    private String filename = "startupad";
    
    private boolean saveSuccFlag = false;
    
    
    private String path; 
        
    public ImgFileUtil(Context context, ImgDownloadListener l){
        this.mContext = context;
        this.listener = l;
    }
    public void stratDownloadImg(String url){
        mDownloadUrl = url;
        getFilename(mDownloadUrl);
        path = mContext.getFilesDir()+"/"+filename;
        doDownload(url);
    }
    
    private void getFilename(String url){
        String urlTemp = url.toLowerCase(Locale.US);
        LogEx.i(LOG_TAG, "img url is "+urlTemp);
        if (urlTemp.contains(".gif"))
        {
            filename = filename+".gif";
        }else if (urlTemp.contains(".jpg"))
        {
            filename = filename+".jpg";
        }else if (urlTemp.contains(".png"))
        {
            filename = filename+".png";
        }else if (urlTemp.contains(".bmp"))
        {
            filename = filename+".bmp";
        }
        LogEx.i(LOG_TAG, "filename = "+filename);
    }

    private void doDownload(String url){
        String downloadUrl = "";
        try
        {
            downloadUrl = URLDecoder.decode(url,"UTF-8");
        }
        catch (UnsupportedEncodingException e)
        {
            e.printStackTrace();
            reportSaveFileRet();
            return;
        }
        HttpRequest req = new HttpRequest(HttpRequest.METHOD_GET, downloadUrl);
        
        // 网络请求
        DataAttribute attr = new DataAttribute();
        attr.setMergeMode(DataDownload.FLAG_MERGE_MODE_LAST);
        attr.setUniqueKey(downloadUrl);
        HttpRequestParams params = new HttpRequestParams(attr, req, new IHttpDownloadListener()
        {
            
            @Override
            public void onError(Exception arg0)
            {
                reportSaveFileRet();
            }
            
            @Override
            public void onData(HttpRequest datareq, HttpResponse datarsp)
            {
                do
                {
                    if (null == datarsp)
                    {
                        break;
                    }
                    LogEx.d(LOG_TAG, " datarsp=" + datarsp);

                    LogEx.d(LOG_TAG, "file size = " + datarsp.getContentLength()
                        / 1024 + "B");
                    try
                    {
                        InputStream in = datarsp.getInputStream();

                        int ret = saveFile(in);
                        if (ret ==0)
                        {
                            saveSuccFlag = true;
                        }
                        in.close();
                    }
                    catch (Exception e)
                    {
                        e.printStackTrace();
                        LogEx.w(LOG_TAG, "" + e);
                        break;
                    }
                }
                while (false);
                reportSaveFileRet();
            }
            
            @Override
            public void onCancel(HttpRequest arg0, HttpResponse arg1)
            {
                reportSaveFileRet();
                
            }
        });
        DataDownload.getInstance().sendHttpRequest(params);
    }
    
    private int saveFile(InputStream in){
        if (in == null)
        {
            LogEx.w(LOG_TAG, "input null.");
            return -1;
        }
        
        FileOutputStream output = null;
        try
        {
            output = new FileOutputStream(path);
            byte[] buffer = new byte[1024];
            int len = 0;
            while (-1 != (len = in.read(buffer)))
            {
                output.write(buffer, 0, len);
            }
            output.flush();
        }
        catch (Exception e)
        {

            e.printStackTrace();
            LogEx.w(LOG_TAG, "save file Exception " + e);
            return -1;
        }
        finally
        {
            try
            {
                output.close();
            }
            catch (Exception e)
            {
                e.printStackTrace();
                LogEx.w(LOG_TAG, "save file Exception " + e);
                return -1;
            }
        }
        return 0;

    }
    
    private void reportSaveFileRet(){
        if (null == listener)
        {
            LogEx.w(LOG_TAG, "IStartAdFileListener is null");
            return;
        }
        LogEx.i(LOG_TAG, "IStartAdFileListener is notified");
        if (saveSuccFlag)
        {
            listener.onImgDownloaded(filename);
        }else{
            listener.onImgDownloadFail();
        }
    }
    
    public static InputStream readDataFile(Context context, String fileName) {
        FileInputStream fis = null;
        try {
            fis = context.openFileInput(fileName);
        } catch (FileNotFoundException e) {
            LogEx.w(LOG_TAG, "Read Data_No Such File");
            e.printStackTrace();
        }
        return fis;
    }

    
    public static  Bitmap File2Bitmap(Context context,String filename) {
        String path = context.getFilesDir()+"/"+filename;
        return BitmapFactory.decodeFile(path);
    }
    
    
    public interface ImgDownloadListener{
        public void onImgDownloaded(String filename);
        public void onImgDownloadFail();
        
    }
}

HttpRequest类:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package com.androidsdk.http.bean;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.http.NameValuePair;

public class HttpRequest {
    public static final String METHOD_GET = "Get";
    public static final String METHOD_POST = "Post";
    public static final String METHOD_PUT = "Put";
    String method;
    Map<String, String> headerMap;
    String url;
    List<NameValuePair> params;
    String body;
    Object extra;
    boolean canceled;
    boolean bAutoRedirect = true;

    public HttpRequest(String method) {
        this.method = method;
        this.headerMap = new HashMap();
    }

    public HttpRequest(String method, String url) {
        this.method = method;
        this.url = url;
        this.headerMap = new HashMap();
    }

    public HttpRequest(String method, String url, List<NameValuePair> params) {
        this.method = method;
        this.url = url;
        this.params = params;
        this.headerMap = new HashMap();
    }

    public HttpRequest(String method, String url, String body) {
        this.method = method;
        this.url = url;
        this.body = body;
        this.headerMap = new HashMap();
    }

    public HttpRequest(String method, String url, List<NameValuePair> params, String body) {
        this.method = method;
        this.url = url;
        this.params = params;
        this.body = body;
        this.headerMap = new HashMap();
    }

    public boolean compareTo(Object o) {
        if(null == o) {
            return false;
        } else if(!(o instanceof HttpRequest)) {
            return false;
        } else {
            HttpRequest request = (HttpRequest)o;
            if(null == this.method && null != request.getMethod()) {
                return false;
            } else if(null != this.method && !this.method.equalsIgnoreCase(request.getMethod())) {
                return false;
            } else if(null == this.url && null != request.getUrl()) {
                return false;
            } else if(null != this.url && !this.url.equalsIgnoreCase(request.getUrl())) {
                return false;
            } else if((null != this.params || null == request.getParams()) && (null == this.params || null != request.getParams())) {
                if(null == this.params && null == request.getParams()) {
                    return true;
                } else {
                    ArrayList params1 = new ArrayList();
                    ArrayList params2 = new ArrayList();
                    Iterator i$;
                    NameValuePair nvp;
                    if(null != this.params && !this.params.isEmpty()) {
                        i$ = this.params.iterator();

                        while(i$.hasNext()) {
                            nvp = (NameValuePair)i$.next();
                            if(null != nvp && null != nvp.getName() && null != nvp.getValue()) {
                                params1.add(nvp);
                            }
                        }
                    }

                    if(null != request.getParams() && !request.getParams().isEmpty()) {
                        i$ = request.getParams().iterator();

                        while(i$.hasNext()) {
                            nvp = (NameValuePair)i$.next();
                            if(null != nvp && null != nvp.getName() && null != nvp.getValue()) {
                                params2.add(nvp);
                            }
                        }
                    }

                    if(params1.size() != params2.size()) {
                        return false;
                    } else {
                        i$ = params1.iterator();

                        boolean bFound;
                        do {
                            if(!i$.hasNext()) {
                                if(null == this.body && null != request.getBody()) {
                                    return false;
                                }

                                if(null != this.body && !this.body.equals(request.getBody())) {
                                    return false;
                                }

                                if(this.bAutoRedirect != request.isAutoRedirect()) {
                                    return false;
                                }

                                return true;
                            }

                            nvp = (NameValuePair)i$.next();
                            bFound = false;
                            Iterator i$1 = params2.iterator();

                            while(i$1.hasNext()) {
                                NameValuePair nvp2 = (NameValuePair)i$1.next();
                                if(nvp.getName().equals(nvp2.getName())) {
                                    if(!nvp.getValue().equals(nvp2.getValue())) {
                                        return false;
                                    }

                                    bFound = true;
                                    break;
                                }
                            }
                        } while(bFound);

                        return false;
                    }
                }
            } else {
                return false;
            }
        }
    }

    public Map<String, String> getHeaderMap() {
        return this.headerMap;
    }

    public void setHeaderMap(Map<String, String> headerMap) {
        this.headerMap = headerMap;
    }

    public void enableAutoRedirect(boolean bEnable) {
        this.bAutoRedirect = bEnable;
    }

    public boolean isAutoRedirect() {
        return this.bAutoRedirect;
    }

    public void addHeader(String name, String value) {
        if(null != name && !"".equals(name.trim())) {
            if(null != value && !"".equals(value.trim())) {
                String newName = name.trim();
                String newValue = value.trim();
                if(this.headerMap.containsKey(newName)) {
                    String val = (String)this.headerMap.get(newName);
                    if(null != val && !"".equals(val)) {
                        String[] valArray = val.split(";");
                        String[] sb = valArray;
                        int len$ = valArray.length;

                        for(int i$ = 0; i$ < len$; ++i$) {
                            String v = sb[i$];
                            if(v.equalsIgnoreCase(newValue)) {
                                return;
                            }
                        }

                        StringBuilder var11 = new StringBuilder(val);
                        var11.append(";").append(newValue);
                        newValue = var11.toString();
                    }
                }

                this.headerMap.put(newName, newValue);
            }
        }
    }

    public void setHeader(String name, String value) {
        if(null != name && !"".equals(name.trim())) {
            if(null != value && !"".equals(value.trim())) {
                this.headerMap.put(name.trim(), value.trim());
            }
        }
    }

    public String getMethod() {
        return this.method;
    }

    public void setMethod(String method) {
        this.method = method;
    }

    public String getUrl() {
        return this.url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public List<NameValuePair> getParams() {
        return this.params;
    }

    public void setParams(List<NameValuePair> params) {
        this.params = params;
    }

    public String getBody() {
        return this.body;
    }

    public void setBody(String body) {
        this.body = body;
    }

    public Object getExtra() {
        return this.extra;
    }

    public void setExtra(Object extra) {
        this.extra = extra;
    }

    public boolean isCanceled() {
        return this.canceled;
    }

    public void setCanceled(boolean canceled) {
        this.canceled = canceled;
    }
}

DataAttribute接口:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package com.androidsdk.download.bean;

public class DataAttribute {
    int mergeMode;
    int concurrentNum;
    String uniqueKey;

    public DataAttribute() {
    }

    public int getMergeMode() {
        return this.mergeMode;
    }

    public void setMergeMode(int mergeMode) {
        this.mergeMode = mergeMode;
    }

    public int getConcurrentNum() {
        return this.concurrentNum;
    }

    public void setConcurrentNum(int concurrentNum) {
        this.concurrentNum = concurrentNum;
    }

    public String getUniqueKey() {
        return this.uniqueKey;
    }

    public void setUniqueKey(String uniqueKey) {
        this.uniqueKey = uniqueKey;
    }
}

HttpRequestParams接口:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package com.androidsdk.http.bean;

import com.androidsdk.download.bean.DataAttribute;
import com.androidsdk.http.bean.HttpAttribute;
import com.androidsdk.http.bean.HttpRequest;
import com.androidsdk.http.download.IHttpDownloadListener;

public class HttpRequestParams {
    DataAttribute attr;
    HttpAttribute httpAttr;
    HttpRequest req;
    IHttpDownloadListener listener;

    public HttpRequestParams(DataAttribute attr, HttpRequest req, IHttpDownloadListener listener) {
        this.attr = attr;
        this.req = req;
        this.listener = listener;
    }

    public HttpRequestParams(DataAttribute attr, HttpAttribute httpAttr, HttpRequest req, IHttpDownloadListener listener) {
        this.attr = attr;
        this.httpAttr = httpAttr;
        this.req = req;
        this.listener = listener;
    }

    public DataAttribute getAttr() {
        return this.attr;
    }

    public HttpAttribute getHttpAttr() {
        return this.httpAttr;
    }

    public void setHttpAttr(HttpAttribute httpAttr) {
        this.httpAttr = httpAttr;
    }

    public HttpRequest getReq() {
        return this.req;
    }

    public IHttpDownloadListener getListener() {
        return this.listener;
    }

    public void setListener(IHttpDownloadListener listener) {
        this.listener = listener;
    }
}

IHttpDownloadListener回调接口:

package com.androidsdk.http.download;

import com.androidsdk.http.bean.HttpRequest;
import com.androidsdk.http.bean.HttpResponse;

public interface IHttpDownloadListener {
    void onError(Exception var1);

    void onData(HttpRequest var1, HttpResponse var2);

    void onCancel(HttpRequest var1, HttpResponse var2);
}


Home
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689
作者Q:549710689