我正在尝试使用JSOUP从网站(http://hdh.ucsd.edu/mobile/dining/locationdetails.aspx?l=11)获取菜单数据,但是每当我尝试获取链接时,我的android应用就会崩溃。是什么原因?这是我的代码
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。另外,有没有办法分别获取早餐,午餐和晚餐?谢谢
请发布您的布局XML R.layout.fragment_sixth
。可能是您指的是错误的ID,这会导致de NullPointerException
。
要分别获取每个“早餐”,“午餐”和“晚餐”,您可以简单地遍历<div>
具有id的HTML元素内的最后三个标签MainContent_divDailySpecials
(我确实通过Chrome开发者工具检查器发现了id来查看网站DOM结构)。
因此,一开始,只需使用
Document document = Jsoup.connect(url).get();
Element parentDiv = document.getElementById("MainContent_divDailySpecials");
从那里开始,您可以向后迭代以获取其中的最后三个孩子div
。(请记住,如果在任何时间更改该页面的结构,您的代码都会被破坏)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句