2017-05-31 58 views
1

我怎樣才能得到一個網站的HTML與retrofit獲取帶翻新網站的HTML - Android?

例如我有這個url,我需要得到這個URL的HTML,我怎麼能加載更多。

貝婁是我的代碼:

MainActivity.java:

public class MainActivity extends AppCompatActivity { 
    TextView txt; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     txt = (TextView) findViewById(R.id.txt); 

     OkHttpClient okHttpClient = new OkHttpClient().newBuilder() 
       .build(); 

     Retrofit retrofit = new Retrofit.Builder() 
       .baseUrl("https://www.instagram.com/elde0596/") 
       .addConverterFactory(GsonConverterFactory.create()) 
       .client(okHttpClient) 
       .build(); 

     final Interface_Web request = retrofit.create(Interface_Web.class); 
     Call<ResponseBody> call = request.getHtml(); 
     call.enqueue(new Callback<ResponseBody>() { 
      @Override 
      public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { 
       txt.setText(response.body().source().toString()); 
       Log.i("SDADASDAWEQ", "A " + response.body().toString()); 
      } 

      @Override 
      public void onFailure(Call<ResponseBody> call, Throwable t) { 
       Log.i("SDADASDAWEQ", "B " + t.getMessage()); 
      } 
     }); 

    } 
} 

Interface_Web.java:

public interface Interface_Web { 
    @GET("/") 
    Call<ResponseBody> getHtml(); 
} 

只是告訴我:

[size=9500 text=<!DOCTYPE html>\n<!--[if lt IE 7]>  <html lang="en" class="no…] 

但我需要查看全部html

+0

請註明你嘗試過什麼,並在您的缺乏,並請在這裏把一些代碼 –

回答

0

解決我的問題:

public class SecondClass extends AppCompatActivity { 
    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.class_second); 
     Dispatcher dispatcher = new Dispatcher(Executors.newFixedThreadPool(20)); 
     dispatcher.setMaxRequests(20); 
     dispatcher.setMaxRequestsPerHost(1); 

     OkHttpClient okHttpClient = new OkHttpClient.Builder() 
       .dispatcher(dispatcher) 
       .connectionPool(new ConnectionPool(100, 30, TimeUnit.SECONDS)) 
       .build(); 

     Retrofit retrofit = new Retrofit.Builder() 
       .baseUrl(HttpUrl.parse("https://www.x.x/x/")) 
       .addConverterFactory(PageAdapter.FACTORY) 
       .build(); 

     PageService requestAddress = retrofit.create(PageService.class); 
     Call<Page> pageCall = requestAddress.get(HttpUrl.parse("https://www.x.x/x/")); 
     pageCall.enqueue(new Callback<Page>() { 
      @Override 
      public void onResponse(Call<Page> call, Response<Page> response) { 
       Log.i("ADASDASDASD", response.body().content); 
      } 
      @Override 
      public void onFailure(Call<Page> call, Throwable t) { 

      } 
     }); 
    } 

    static class Page { 
     String content; 

     Page(String content) { 
      this.content = content; 
     } 
    } 

    static final class PageAdapter implements Converter<ResponseBody, SecondClass.Page> { 
     static final Converter.Factory FACTORY = new Converter.Factory() { 
      @Override 
      public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) { 
       if (type == SecondClass.Page.class) return new SecondClass.PageAdapter(); 
       return null; 
      } 
     }; 

     @Override 
     public SecondClass.Page convert(ResponseBody responseBody) throws IOException { 
      Document document = Jsoup.parse(responseBody.string()); 
      Element value = document.select("script").get(1); 
      String content = value.html(); 
      return new SecondClass.Page(content); 
     } 
    } 

    interface PageService { 
     @GET 
     Call<SecondClass.Page> get(@Url HttpUrl url); 
    } 
} 
0

我認爲這對你有幫助。如果您創建您的通話對象ResponseBody你可以得到HTML這樣的:

Call<ResponseBody> call = Interface_Web.getJSONSignIn(...) 
call.enqueue(new Callback<ResponseBody>() { 
    @Override 
    public void onResponse(Response<ResponseBody> response, Retrofit retrofit) { 
     // access response code with response.code() 
     // access string of the response with response.body().string() 
    } 

    @Override 
    public void onFailure(Throwable t) { 
     t.printStackTrace(); 
    } 
});