2015-11-28 2 views
0

Я пытаюсь использовать JSOUP для получения данных меню с сайта (http://hdh.ucsd.edu/mobile/dining/locationdetails.aspx?l=11), но всякий раз, когда я пытаюсь найти ссылки, приложение для Android аннулируется. Какова причина? Это код, у меня естьJSOUP parse for android force закрывается

public class SixthFragment extends Fragment { 

String url = "http://hdh.ucsd.edu/mobile/dining/locationdetails.aspx?l=11"; 
ProgressDialog mProgressDialog; 
String MENU; 
String HOURS; 
TextView textview; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.fragment_sixth, container, false); 
    textview = (TextView) rootView.findViewById(R.id.textView10); 

    new JSOUP().execute(); 
    return rootView; 

} 

public class JSOUP extends AsyncTask<Void, Void, Void>{ 
    ProgressDialog dialog; 

    @Override 
    protected void onPreExecute(){ 
     super.onPreExecute(); 
     dialog = new ProgressDialog(getActivity()); 
     dialog.setMessage("loading..."); 
     dialog.show(); 

    } 

    @Override 
    protected Void doInBackground(Void... params){ 
     try{ 

      Document document = Jsoup.connect(url).get(); 
      Elements elements = document.select("a[href]"); 
      //HOURS = elements.text(); 
      System.out.println(elements.size()); 
      for(int i = 0; i<elements.size(); i++){ 

       MENU += "\n" + elements.get(i).text(); 
       System.out.println(i); 

      } 

     } 

     catch (Exception e){ 

     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result){ 
     dialog.dismiss(); 

     textview.setText(MENU); 
     super.onPostExecute(result); 
    } 

} 

} 

И моя ошибка появляется, как это

11-28 13:48:59.175 23230-23230/com.lamdevs.tritonbites E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.lamdevs.tritonbites, PID: 23230 
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference 
at com.lamdevs.tritonbites.fragments.SixthFragment$JSOUP.onPostExecute(SixthFragment.java:82) 
at com.lamdevs.tritonbites.fragments.SixthFragment$JSOUP.onPostExecute(SixthFragment.java:43) 
at android.os.AsyncTask.finish(AsyncTask.java:632) 
at android.os.AsyncTask.access$600(AsyncTask.java:177) 
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5221) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 

Что я не понимаю, потому что элементы имеет размер 61, когда выходной размер элементов. Кроме того, есть ли способ получить завтрак, обед и ужин отдельно? Спасибо

ответ

0

Пожалуйста, разместите свой макет XML R.layout.fragment_sixth. Вероятно, вы имеете в виду неправильный идентификатор, который вызывает de NullPointerException.


Чтобы получить каждый «завтрак», «обед» и «ужин» по отдельности, вы можете просто перебирать последние три <div> теги внутри HTML-элемента с идентификатором MainContent_divDailySpecials (я нашел, что идентификатор, глядя на веб-сайте DOM через инспектор Chrome Developer Tools).

Итак, как начать, просто захватить этот элемент с

Document document = Jsoup.connect(url).get(); 
Element parentDiv = document.getElementById("MainContent_divDailySpecials"); 

и оттуда вы можете перемещаться в обратном направлении, чтобы получить последние трое детей этого div. (Имейте в виду, что если в любой момент времени структура этой страницы изменится, ваш код сломается).

+0

Да, я понял, что NullPointerException я неправильно назвал textview. –

0

Глядя на журнал ошибок, прилагается ..

java.lang.NullPointerException: Attempt to invoke virtual method 
'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference 
at com.lamdevs.tritonbites.fragments.SixthFragment$JSOUP.onPostExecute(SixthFragment.java:82) 

Это говорит о NullPointerException на TextView в SixthFragment линии 82 т textview.setText(MENU);

textview инициализируется (textview = (TextView) rootView.findViewById(R.id.textView10);), который выглядит хорошо ,

Итак, убедитесь, что у вас есть TextView с идентификатором textView10 в вашем макете fragment_sixth.

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