【问题标题】:JSOUP parse for android force closesandroid force 的 JSOUP 解析关闭
【发布时间】:2015-11-28 18:58:24
【问题描述】:

我正在尝试使用 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。另外,有没有办法分开吃早餐、午餐和晚餐?谢谢

【问题讨论】:

    标签: android parsing web-scraping jsoup forceclose


    【解决方案1】:

    请发布您的布局 XML R.layout.fragment_sixth。可能您指的是错误的 id,导致 de NullPointerException


    要分别获取每个“早餐”、“午餐”和“晚餐”,您可以简单地遍历 ID 为 MainContent_divDailySpecials 的 HTML 元素内的最后三个 &lt;div&gt; 标记(我确实在网站上找到了该 ID DOM 结构通过 Chrome 开发者工具检查器)。

    因此,作为开始,只需使用

    抓取该元素
    Document document = Jsoup.connect(url).get();
    Element parentDiv = document.getElementById("MainContent_divDailySpecials");
    

    从那里您可以向后迭代以获取该div 的最后三个孩子。 (请记住,如果在任何时候该页面的结构发生更改,您的代码将会中断)。

    【讨论】:

    • 是的,我发现 NullPointerException 我将 textview 命名为错误。
    【解决方案2】:

    查看您附加的错误日志..

    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);),看起来没问题。

    因此,请确保您的布局中有一个 TextView 和 id textView10 fragment_sixth

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-03
      • 2014-05-06
      • 2013-08-27
      • 1970-01-01
      • 2013-09-21
      • 1970-01-01
      相关资源
      最近更新 更多