android 的 JSOUP 解析强制关闭
JSOUP parse for android force closes
我正在尝试使用 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.access0(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。另外,有没有办法把早餐、午餐和晚餐分开吃?谢谢
查看您附加的错误日志..
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)
它在 SixthFragment
第 82 行中的 TextView
上讨论了 NullPointerException
,即 textview.setText(MENU);
textview
已初始化 (textview = (TextView) rootView.findViewById(R.id.textView10);
),看起来没问题。
因此,请确保您的布局 fragment_sixth
中有一个 ID 为 textView10
的 TextView
。
请post你的布局XMLR.layout.fragment_sixth
。可能您指的是错误的 ID,这会导致 de NullPointerException
.
要分别获取每个 "Breakfast"、"Lunch" 和 "Dinner",您可以简单地遍历 HTML 元素内的最后三个 <div>
标记id MainContent_divDailySpecials
(我通过 Chrome Developer Tools inspector 查看网站 DOM 结构时确实发现了那个 id)。
因此,作为开始,只需使用
获取该元素
Document document = Jsoup.connect(url).get();
Element parentDiv = document.getElementById("MainContent_divDailySpecials");
从那里开始,您可以向后迭代以获得 div
的最后三个 children。 (请记住,如果在任何时候该页面的结构发生变化,您的代码就会中断)。
我正在尝试使用 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.access0(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。另外,有没有办法把早餐、午餐和晚餐分开吃?谢谢
查看您附加的错误日志..
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)
它在 SixthFragment
第 82 行中的 TextView
上讨论了 NullPointerException
,即 textview.setText(MENU);
textview
已初始化 (textview = (TextView) rootView.findViewById(R.id.textView10);
),看起来没问题。
因此,请确保您的布局 fragment_sixth
中有一个 ID 为 textView10
的 TextView
。
请post你的布局XMLR.layout.fragment_sixth
。可能您指的是错误的 ID,这会导致 de NullPointerException
.
要分别获取每个 "Breakfast"、"Lunch" 和 "Dinner",您可以简单地遍历 HTML 元素内的最后三个 <div>
标记id MainContent_divDailySpecials
(我通过 Chrome Developer Tools inspector 查看网站 DOM 结构时确实发现了那个 id)。
因此,作为开始,只需使用
获取该元素Document document = Jsoup.connect(url).get();
Element parentDiv = document.getElementById("MainContent_divDailySpecials");
从那里开始,您可以向后迭代以获得 div
的最后三个 children。 (请记住,如果在任何时候该页面的结构发生变化,您的代码就会中断)。