Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 安卓改型从服务器下载/读取文本文件_Java_Android_Http_Retrofit_Rx Java - Fatal编程技术网

Java 安卓改型从服务器下载/读取文本文件

Java 安卓改型从服务器下载/读取文本文件,java,android,http,retrofit,rx-java,Java,Android,Http,Retrofit,Rx Java,如何下载和读取文本文件使用改装或更好的Rx改装 下面是一个示例,它是如何在改装之前完成的。 真正的问题是如何在改造中转换下面的代码 样本: 我真的很感谢你的帮助。谢谢编辑: 自版本改型1.6以来,有一个@Streaming注释可用于提供原始输入流。可用于下载文件 IMO改造不是下载文件的最佳工具(除非文件包含JSON) 使用改装(版本2)意味着您在引擎盖下使用OkHttp。OkHttp是下载文件的更好工具 使用OkHttp的异步get如下所示: private final OkHttpClien

如何下载和读取文本文件使用改装或更好的Rx改装

下面是一个示例,它是如何在改装之前完成的。 真正的问题是如何在改造中转换下面的代码 样本:

我真的很感谢你的帮助。谢谢

编辑: 自版本改型1.6以来,有一个
@Streaming
注释可用于提供原始
输入流
。可用于下载文件

IMO改造不是下载文件的最佳工具(除非文件包含JSON)

使用改装(版本2)意味着您在引擎盖下使用OkHttp。OkHttp是下载文件的更好工具

使用OkHttp的异步get如下所示:

private final OkHttpClient client = new OkHttpClient();

  public void run() throws Exception {
    Request request = new Request.Builder()
        .url("http://publicobject.com/helloworld.txt")
        .build();

    client.newCall(request).enqueue(new Callback() {
      @Override public void onFailure(Request request, IOException throwable) {
        throwable.printStackTrace();
      }

      @Override public void onResponse(Response response) throws IOException {
        if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);

        Headers responseHeaders = response.headers();
        for (int i = 0; i < responseHeaders.size(); i++) {
          System.out.println(responseHeaders.name(i) + ": " + responseHeaders.value(i));
        }

        System.out.println(response.body().string());
      }
    });
  }
private final-OkHttpClient=new-OkHttpClient();
public void run()引发异常{
Request Request=newrequest.Builder()
.url(“http://publicobject.com/helloworld.txt")
.build();
client.newCall(request).enqueue(new Callback()){
@重写公共void onFailure(请求,IOException throwable){
printStackTrace();
}
@重写公共void onResponse(响应响应)引发IOException{
如果(!response.issusccessful())抛出新IOException(“意外代码”+响应);
Headers responseHeaders=response.Headers();
对于(int i=0;i
更多信息请访问

也可以从wiki:

响应体上的string()方法对于 小文件。但如果响应体较大(大于1 MiB),避免使用string(),因为它会将整个文档加载到 记忆。在这种情况下,您更愿意将主体作为流进行处理

编辑: 使用RxJava

public interface Api {

    @Streaming
    @GET("path to file")
    Observable<ResponseBody> getFile();
}

api.getFile()
            .flatMap(responseBody -> {
                try {
                    return Observable.just(responseBody.string());
                } catch (IOException e) {
                    return Observable.error(e);
                }
            })
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(System.out::println);
公共接口Api{
@流式
@获取(“文件路径”)
可观察的getFile();
}
api.getFile()
.flatMap(响应体->{
试一试{
返回Observable.just(responseBody.string());
}捕获(IOE异常){
返回可观测误差(e);
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(System.out::println);
同样,对于较大的文件,您可能不应该使用
responseBody.string()

编辑: 自版本改型1.6以来,有一个
@Streaming
注释可用于提供原始
输入流
。可用于下载文件

IMO改造不是下载文件的最佳工具(除非文件包含JSON)

使用改装(版本2)意味着您在引擎盖下使用OkHttp。OkHttp是下载文件的更好工具

使用OkHttp的异步get如下所示:

private final OkHttpClient client = new OkHttpClient();

  public void run() throws Exception {
    Request request = new Request.Builder()
        .url("http://publicobject.com/helloworld.txt")
        .build();

    client.newCall(request).enqueue(new Callback() {
      @Override public void onFailure(Request request, IOException throwable) {
        throwable.printStackTrace();
      }

      @Override public void onResponse(Response response) throws IOException {
        if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);

        Headers responseHeaders = response.headers();
        for (int i = 0; i < responseHeaders.size(); i++) {
          System.out.println(responseHeaders.name(i) + ": " + responseHeaders.value(i));
        }

        System.out.println(response.body().string());
      }
    });
  }
private final-OkHttpClient=new-OkHttpClient();
public void run()引发异常{
Request Request=newrequest.Builder()
.url(“http://publicobject.com/helloworld.txt")
.build();
client.newCall(request).enqueue(new Callback()){
@重写公共void onFailure(请求,IOException throwable){
printStackTrace();
}
@重写公共void onResponse(响应响应)引发IOException{
如果(!response.issusccessful())抛出新IOException(“意外代码”+响应);
Headers responseHeaders=response.Headers();
对于(int i=0;i
更多信息请访问

也可以从wiki:

响应体上的string()方法对于 小文件。但如果响应体较大(大于1 MiB),避免使用string(),因为它会将整个文档加载到 记忆。在这种情况下,您更愿意将主体作为流进行处理

编辑: 使用RxJava

public interface Api {

    @Streaming
    @GET("path to file")
    Observable<ResponseBody> getFile();
}

api.getFile()
            .flatMap(responseBody -> {
                try {
                    return Observable.just(responseBody.string());
                } catch (IOException e) {
                    return Observable.error(e);
                }
            })
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(System.out::println);
公共接口Api{
@流式
@获取(“文件路径”)
可观察的getFile();
}
api.getFile()
.flatMap(响应体->{
试一试{
返回Observable.just(responseBody.string());
}捕获(IOE异常){
返回可观测误差(e);
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(System.out::println);

同样,对于较大的文件,您可能不应该使用
responseBody.string()

谢谢,我需要将正文作为流进行处理。你会试试吗?有没有可能用AndroidX改进这段代码?谢谢,谢谢,我需要把尸体处理成一条流。你会试试吗?有没有可能用AndroidX改进这段代码?谢谢