2016-09-15 2 views
1

Я использую скрипт python для динамического изменения содержимого моей веб-страницы. Ссылка на веб-странице: [HERE]Невозможно получить динамически измененный HTML-контент (по JavaScript) в android с помощью AsyncTask.

веб-страница содержит таблицу, которая имеет два столбца:
1) значения от 1 до 5.
2) и время, когда он закачал на этой странице.

Он динамически отображается на JavaScript на странице. См. Источник страницы, открывающей ссылку выше.

Теперь я создаю приложение для Android, которое отображает значения в текстовом представлении, извлекая эту страницу и анализируя HTML. Но источник страницы содержит только код JavaScript. Поэтому всякий раз, когда я извлекаю HTML, он отображает только JavaScript, даже если он содержит несколько строк со значениями.

Мой вопрос заключается в том, как получить эти значения динамически?

Я использую AsyncTask и планирую его каждые 10 секунд. Мой код:

public class MainActivity extends AppCompatActivity { 

TextView et ; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    et = (TextView) findViewById(R.id.editText); 

    DownloadWebPageTask task = new DownloadWebPageTask(); 
    task.execute(new String[]{"https://rasppiclient.herokuapp.com/"}); 

callAsynchronousTask(); 

} 



public void callAsynchronousTask() { 
    final Handler handler = new Handler(); 
    Timer timer = new Timer(); 
    TimerTask doAsynchronousTask = new TimerTask() { 
     @Override 
     public void run() { 
      handler.post(new Runnable() { 
       public void run() { 
        try { 
         DownloadWebPageTask performBackgroundTask = new DownloadWebPageTask(); 
         // PerformBackgroundTask this class is the class that extends AsynchTask 
         performBackgroundTask.execute(new String[]{"https://rasppiclient.herokuapp.com/"}); 
        } catch (Exception e) { 
         // TODO Auto-generated catch block 
        } 
       } 
      }); 
     } 
    }; 
    timer.schedule(doAsynchronousTask, 0, 10000); //execute in every 50000 ms 
} 



public class DownloadWebPageTask extends AsyncTask<String, Void, String> { 
    @Override 
    protected String doInBackground(String... urls) { 
     String response = ""; 
     for (String url : urls) { 
      DefaultHttpClient client = new DefaultHttpClient(); 
      HttpGet httpGet = new HttpGet(url); 
      try { 
       HttpResponse execute = client.execute(httpGet); 
       InputStream content = execute.getEntity().getContent(); 

       BufferedReader buffer = new BufferedReader(new InputStreamReader(content)); 
       String s = ""; 
       while ((s = buffer.readLine()) != null) { 
        response += s; 
       } 

      } catch (Exception e) { 


      } 
     } 
     return response; 
    } 

    @Override 
    protected void onPostExecute(String s) { 
     super.onPostExecute(s); 

     Toast.makeText(MainActivity.this,s,Toast.LENGTH_LONG).show(); 

    } 
}} 
+0

Это не работает с 'DefaultHttpClient'. Вам нужно открыть сайт, чтобы выполнить javascript, а затем отмените его. –

+0

Как это сделать в Android? @MuratK. –

ответ

0

Это не работает с DefaultHttpClient. Вы могли бы оценить javascript, а затем получить контент с AndroidJSCore.

JSContext context = new JSContext(); 
context.evaluateScript(yourJsString); 
context.property("getWhatYouWantHere"); 

Пример из GitHub выглядит следующим образом

JSContext context = new JSContext(); 
context.evaluateScript("a = 10"); 
JSValue newAValue = context.property("a"); 
System.out.println(df.format(newAValue.toNumber())); // 10.0 
String script = 
    "function factorial(x) { var f = 1; for(; x > 1; x--) f *= x; return f; }\n" + 
    "var fact_a = factorial(a);\n"; 
context.evaluateScript(script); 
JSValue fact_a = context.property("fact_a"); 
System.out.println(df.format(fact_a.toNumber())); // 3628800.0 
+0

Но у меня есть JavaScript, который создает табличное представление для страницы. Так что я должен установить весь JavaScript в виде строки здесь? –

+0

Смотрите сценарий на странице, которую я упомянул –

+0

@ 14bce109 Да, но это не сработает для ajax. В этом случае вы можете использовать класс android 'WebView' для загрузки и скребли. –

Смежные вопросы