当前位置: 首页 > 知识库问答 >
问题:

改造 - 从Android服务器下载csv文件

宰父子安
2023-03-14

我正在尝试使用改造从服务器下载文件。使用HttpLoggingInterceptor我尝试记录正在发生的事情。我可以找到文件名。但是响应正文是空的。

我是使用改造的新手。有人能指出我犯错的正确方向吗?

改进客户端界面:

public interface DownloadTransactions {

@Streaming
@GET("common/frontend/member/download.aspx")
Call<Void> getBalancesAndTransactions(@Header("Cookie") String header);

}

Java呼叫:

void downloadData() {

    OkHttpClient.Builder client = new OkHttpClient.Builder();
    client.connectTimeout(15, TimeUnit.SECONDS)
            .readTimeout(15, TimeUnit.SECONDS);

    if (BuildConfig.DEBUG) {
        HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
        logging.setLevel(HttpLoggingInterceptor.Level.BODY);

        client.addInterceptor(logging);
    }


    Retrofit.Builder builder = new Retrofit.Builder();
    Retrofit retrofit = builder.client(client.build())
            .baseUrl("https://" + getString(R.string.root_url))
            .addConverterFactory(ScalarsConverterFactory.create())
            .build();

    DownloadTransactions downloadTransactions = retrofit.create(DownloadTransactions.class);
    Call<Void> call = downloadTransactions.getBalancesAndTransactions(CommsManager.getInstance().getASPSessionId());
    call.enqueue(new Callback<Void>() {
        @Override
        public void onResponse(Call<Void> call, retrofit2.Response<Void> response) {
            Log.v(TAG, "success transactions: --------" + response);
        }

        @Override
        public void onFailure(Call<Void> call, Throwable t) {
            Log.v(TAG, "failure transactions: --------");
        }
    });


}

日志中的响应:

<-- 200 OK https://xxxxx.com/common/xxx/member/download.aspx (387ms)
D/OkHttp: Cache-Control: private
D/OkHttp: Content-Type: text/csv; charset=utf-16
D/OkHttp: Server: Microsoft-IIS/8.5
D/OkHttp: Content-Disposition: attachment; filename=Account_Summary_8978_04062018_142921.csv
D/OkHttp: X-AspNet-Version: 4.0.30319
D/OkHttp: X-Powered-By: ASP.NET
D/OkHttp: Date: Mon, 04 Jun 2018 13:29:21 GMT
D/OkHttp: Connection: keep-alive
D/OkHttp: Content-Length: 446900
D/OkHttp: Set-Cookie: xxx; path=/; Httponly; Secure
D/OkHttp: <-- END HTTP (binary 446900-byte body omitted)


D/Accounts Overview: success transactions: --------
Response{protocol=http/1.1, code=200, message=OK, url=xxx}

共有1个答案

司寇安宜
2023-03-14

但响应正文为空。

改型使用API接口中定义的方法的返回类型来确定响应的类型。

< code > getBalancesAndTransactions 的返回类型是< code>Void,这表示没有任何意义。

解决方案:定义您的自定义POJO类并将Void替换为'POJO

或者只是为了测试目的,您可以使用< code>Object,它可以处理任何类型的响应,但是您必须对特定的操作使用强制转换

例如

@Streaming
@GET("common/frontend/member/download.aspx")
Call<Object> getBalancesAndTransactions(@Header("Cookie") String header);

参考资料:

我们如何处理改型2的不同响应类型?

在Android系统中使用改造

 类似资料:
  • 编辑 当我在模拟器中运行这段代码时,代码仍然不能工作-文件没有下载。

  • 问题内容: 我有一个URL,用于保存我的工作中的一些项目,它们大部分是MDB文件,但也有一些JPG和PDF。 我需要做的是列出该目录中的每个文件(已完成)并为用户提供下载它的选项。 使用PHP如何实现? 问题答案: 要读取目录内容,可以使用readdir()并使用脚本(在我的示例中)来下载文件 在其中,您可以强制浏览器发送下载数据,并使用basename()来确保客户端不会传递其他文件名,例如

  • 我正试图下载一些公共数据文件。我通过screensrap获取指向文件的链接,这些文件看起来都是这样的: 我在Requests library网站上找不到任何文档。

  • 我创建了一个web应用程序,它允许其用户从运行应用程序的同一服务器下载文件。然而,我不能让它按照我希望的方式工作,现在我甚至不确定这是否可能。

  • 问题内容: 我正在尝试从node.js服务器流式传输文件。服务器部分非常简单: 在我的角度控制器中,我正在尝试做这样的事情 在我看来,单击按钮时会调用此函数: 我查看了有关从Angular服务器中下载文件的其他答案,但没有找到适合我的方法。有一种常见的方法吗?看起来应该很简单。 问题答案: 服务返回一个具有两个回调方法的,如下所示。

  • 问题内容: 嗨,我有一堆.mp3文件,我想与NSFileManager一起使用并存储在documents文件夹中。有没有一种方法可以在线下载.mp3文件,然后将其保存到documents文件夹?这就是我正在使用的本地文件。 问题答案: 编辑/更新: Xcode 11.5•Swift 5.2 原始答案 Xcode 8.3.2•Swift 3.1