2016-01-02 7 views
1

Я пытаюсь разобрать некоторые данные с помощью JSoup, все это происходит в части asynctask (doInBackground) моей MainActivity. К сожалению, все элементы (9) пусты при выполнении приложения.JSoup разобранные элементы

Когда я отлаживаю ниже кодировку, я на самом деле получаю полный сайт, это все. Метод readMultipleLinesRespone() находится в другом классе HttpUtility, где я также называю мои сообщения и запросы на получение.

Я протестировал это заранее, сохранив сайт как файл и используя JSoups активы умение, оно отлично работало тогда.

setupAdapter() метод onPostExecute заполняет ExpandableListview с данными, должны быть эта информация nessecary. Если вам нужно больше информации, спрашивайте.

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

response1 = util.readMultipleLinesRespone(); < --- отлаживается и все данные (кажется), но есть isn`t.

Edit: Если я печатаю response1, там действительно нет данных для синтаксического анализа. Выход Logcat:

Е/Resonse :: [Ljava.lang.String; @ 3d3410a

Ниже приведен способ readMultipleLinesRespone из класса HttpUtility:

public String[] readMultipleLinesRespone() throws IOException { 
    InputStream inputStream = null; 
    if (httpConn != null) { 
     inputStream = httpConn.getInputStream(); 
    } else { 
     throw new IOException("Connection is not established."); 
    } 

    BufferedReader reader = new BufferedReader(new InputStreamReader(
      inputStream)); 
    List<String> response = new ArrayList<String>(); 

    String line = ""; 
    while ((line = reader.readLine()) != null) { 
     response.add(line); 
    } 
    reader.close(); 

    return (String[]) response.toArray(new String[0]); 
} 

Асинхронная система, где все это происходит:

private class FetchWebsiteData extends AsyncTask<Void, Void, Void> { 
    ProgressDialog mProgressDialog; 

    @Override 
    protected void onPreExecute() { 
     this.mProgressDialog = new ProgressDialog(getActivity()); 
     mProgressDialog.setMessage("Laden..."); 
     mProgressDialog.setIndeterminate(false); 
     mProgressDialog.show(); 
    } 

    @Override 
    protected Void doInBackground(Void... result) { 

     try { 
      util.sendGetRequest("https://mobile.somesite.nl/Data", null); 
      response1 = util.readMultipleLinesRespone(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     if (response1.length > 0) { 
      Document doc = Jsoup.parse(response1.toString()); 

      // Get the html document title 
      Elements els = doc.select("span[class=item-value pull-right]"); 

       if (els.size() > 0) { 
        fac_naam = els.get(0).text(); 
        fac_straat = els.get(1).text(); 
        fac_post = els.get(2).text(); 
        con_tel = els.get(3).text(); 
        con_email = els.get(4).text(); 
        betaal_reknr = els.get(5).text(); 
        betaal_houd = els.get(6).text(); 
        zig_gebruiker = els.get(7).text(); 
        zig_wacht = els.get(8).text(); 
       } 
     } 
     return null; 
     } 

    @Override 
    protected void onPostExecute(Void result) { 
     super.onPreExecute(); 
     setupAdapter(); 
     mProgressDialog.dismiss(); 
    } 
} 

ответ

1

В то же время я решил проблему. Я не передал строку ответа правильно в асинтезу, которая анализирует необходимые элементы. Просто требуется публичную строку, в которой ответ создается и передается (не изящный способ, но он работает):

public static String HttpResponse = ""; 

В классе HttpUtility:

public String[] readMultipleLinesRespone() throws IOException { 
     ... 

     TabFragment1.HttpResponse = response.toString(); 
    ... 
     return (String[]) response.toArray(new String[0]); 
    } 

Затем передать его AsyncTask :

@Override 
     protected Void doInBackground(Void... result) { 

      try { 
       util.sendGetRequest(LoginActivity.PersData_URL, null); 

       util.readMultipleLinesRespone(); 

      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      if (HttpResponse.length() > 0) { 
       Document doc = Jsoup.parse(HttpResponse.toString()); 
       // Get the html document title 
       Elements els = doc.select("span[class=item-value pull-right]"); 
       ... 

      } 
      return null; 
     } 
Смежные вопросы