質問

私は、私はそれをダウンロードする前に、ファイルのサイズを取得しようとしています。私はこれを行うにはconn.getContentLength();を使用して、それは私の自宅のコンピュータアンドロイド2.1エミュレータ上の罰金に動作します。

私は自分の携帯電話(WiFiまたは3Gのどちらか)から私のアプリを実行すると、それはまた、私は私の仕事のラップトップアンドロイド2.1エミュレータから、それを実行したときに動作しません一度それはしかし、仕事をしません。

んの誰もが、このための回避策を知っていますか?私は多分HttpURLConnectionを使用せずに、ファイルのサイズを取得することができます別の方法があります。

役に立ちましたか?

解決

この情報は常に利用できません。通常、あなたがダウンロードしているファイルの長さを知ることができます。 Webサーバによっては、プロトコル、接続、およびダウンロードの方法は、この情報は常に利用できない場合があります。

それはこのような状況に対処できるように、

あなたは間違いなくあなたのアプリケーションを変更する必要があります。私はあなたが別の接続方法を使用して、異なるデバイスがこれに異なる結果を提供することがわかりになると思います。

他のヒント

を使用するには、あなたのファイルのダウンロードのためにHttpVersion.HTTP_1_0。これを防止「チャンク転送エンコーディング」の使用

を参照してください: http://en.wikipedia.org/wiki/Chunked_transfer_encodingする

あなたはどのHTTPバージョンを指定することができるように、たとえば、コンストラクタをオーバーロード:

public class HTTPrequest
{
    //member variables
    private SchemeRegistry mSchemeRegistry;
    private HttpParams mHttpParams;
    private SingleClientConnManager mSCCmgr;
    private HttpClient mHttpClient;
    private HTTPrequestListener mHTTPrequestListener = null;

    //constants
    private final int TIMEOUT_CONNECTION = 20000;//20sec
    private final int TIMEOUT_SOCKET = 30000;//30sec

    //interface for callbacks
    public interface HTTPrequestListener
    {
        public void downloadProgress(int iPercent);
    }

    /**
     * Creates an HttpClient that uses plain text only.
     * note: Default constructor uses HTTP 1.1
     */
    public HTTPrequest()
    {
        this(HttpVersion.HTTP_1_1);
    }

    /**
     * Creates an HttpClient that uses plain text only.
     * @param httpVersion HTTP Version (0.9, 1.0, 1.1)
     */
    public HTTPrequest(HttpVersion httpVersion)
    {
        //define permitted schemes
        mSchemeRegistry = new SchemeRegistry();
        mSchemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));

        //define http parameters
        mHttpParams = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(mHttpParams, TIMEOUT_CONNECTION);
        HttpConnectionParams.setSoTimeout(mHttpParams, TIMEOUT_SOCKET);
        HttpProtocolParams.setVersion(mHttpParams, httpVersion);
        HttpProtocolParams.setContentCharset(mHttpParams, HTTP.UTF_8);

        //tie together the schemes and parameters
        mSCCmgr = new SingleClientConnManager(mHttpParams, mSchemeRegistry);

        //generate a new HttpClient using connection manager and parameters
        mHttpClient = new DefaultHttpClient(mSCCmgr, mHttpParams);
    }

    public void setHTTPrequestListener(HTTPrequestListener httpRequestListener)
    {
        mHTTPrequestListener = httpRequestListener;
    }

    //other methods for POST and GET
}

あなたは、ファイルのダウンロードの利用HTTPrequest httpRequest = new HTTPrequest(HttpVersion.HTTP_1_0);をしたいとあなたがPOSTまたはGETの使用をしたいときHTTPrequest httpRequest = new HTTPrequest();

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top