Android 如何在AsyncTask或Fragment中处理Null?

Android 如何在AsyncTask或Fragment中处理Null?,android,android-fragments,android-asynctask,Android,Android Fragments,Android Asynctask,在AsyncTask中,我得到了一个对象文档,以便在片段中与他进一步合作。问题是有时我得到document=NULL。我可以捕捉到这个异常,但不知道如何处理它。假设我得到了一个空值。但下一步该怎么办呢?如果我得到数据,我就形成我的片段。但是如果我得到一个空值,我就不知道该怎么做了 我的任务: public class MyAsincTask extends AsyncTask<String, Void, Document> { private Document documen

在AsyncTask中,我得到了一个对象文档,以便在片段中与他进一步合作。问题是有时我得到document=NULL。我可以捕捉到这个异常,但不知道如何处理它。假设我得到了一个空值。但下一步该怎么办呢?如果我得到数据,我就形成我的片段。但是如果我得到一个空值,我就不知道该怎么做了

我的任务:

public class MyAsincTask extends AsyncTask<String, Void, Document> {
    private Document document;
    private final ProgressDialog progressDialog;

    public MyAsincTask(Context context) {
        progressDialog = MyProgress.getProgressDialog(context);
    }

    @Override
    protected void onPreExecute() {
        progressDialog.show();
        super.onPreExecute();
    }

    @Override
    protected Document doInBackground(String... params) {
        try {
            document = Jsoup.connect(params[0]).timeout(0).get();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return document;
    }

    @Override
    protected void onPostExecute(Document document) {
        progressDialog.cancel();
        super.onPostExecute(document);
    }
}
在这里,如果成功接收到数据,我将形成我的片段。但如果你来了怎么办

public void setData() {
        String link = String.format("http://core.android?key=pe=xml", guestid, hotel);
       new MyAsincTask(getActivity()){
           @Override
           protected void onPreExecute() {
               super.onPreExecute();
           }

           @Override
           protected void onPostExecute(Document document) {
               super.onPostExecute(document);
               Elements elementsId = document.select("id");
               Elements elementsCheckin = document.select("checkin");
               Elements elementsCheckout = document.select("checkout");
               Elements elementsNights = document.select("nights");

               for (int i = 0; i < elementsId.size(); i++) {
                   HistoryBean historyBean = new HistoryBean();
                   historyBean.setId(elementsId.get(i).ownText());
                   historyBean.setCheckin(elementsCheckin.get(i).ownText());
                   historyBean.setCheckout(elementsCheckout.get(i).ownText());
                   historyBean.setNigth(elementsNights.get(i).ownText());
                   historyBeans.add(historyBean);
               }
               listView.setAdapter(historyAdapter);
           }
       }.execute(link);
    }
片段示例:

public class Folio extends Fragment {
    private ArrayList<FolioBean> folioBeans;
    private TableLayout tableFolio;
    private String guestId;
    private String hotel;
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.folio, null);
         guestId = getArguments().getString("guestid");
         hotel = getArguments().getString("hotel");

        folioBeans = new ArrayList<>();
        tableFolio = (TableLayout) v.findViewById(R.id.tableFolio);
        if (InternetResiver.isOnline(getActivity())) {
            setData();
        } else {
            AlertDialog alert = InternetResiver.getAlertDialog(getActivity());
            alert.show();
        }
        return v;
    }

    public static Folio newInstance(String guestid,String hotel,String room) {
        Folio f = new Folio();
        Bundle b = new Bundle();
        b.putString("guestid", guestid);
        b.putString("hotel", hotel);
        b.putString("room", room);
        f.setArguments(b);
        return f;
    }

    public void setData() {
        String link = String.format("htype=xml", guestId, hotel);
        new MyAsincTask(getActivity()){
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
            }

            @Override
            protected void onPostExecute(Document document) {
                super.onPostExecute(document);
                Elements elementsDate = document.select("date");
                Elements elementsName = document.select("name");
                Elements elementsSumm = document.select("summa");

                for (int i = 0; i < elementsName.size(); i++) {
                    FolioBean folioBean = new FolioBean();
                    folioBean.setDate(elementsDate.get(i).ownText());
                    folioBean.setName(elementsName.get(i).ownText());
                    folioBean.setSumm(elementsSumm.get(i).ownText());
                    folioBeans.add(folioBean);
                }
                TableRow.LayoutParams row_params = new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT, TableRow.LayoutParams.WRAP_CONTENT, 20f);
                TableRow.LayoutParams row_params2 = new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT, TableRow.LayoutParams.WRAP_CONTENT, 30f);

                for (FolioBean folioBean : folioBeans) {
                    TableRow tableRow = new TableRow(App.get());
                    TextView data = new TextView(App.get());
                    TextView name = new TextView(App.get());
                    TextView summ = new TextView(App.get());
                    data.setTextSize(10);
                    name.setTextSize(10);
                    summ.setTextSize(10);
                    name.setTextColor(Color.BLACK);
                    summ.setTextColor(Color.BLACK);
                    data.setTextColor(Color.BLACK);
                    if (folioBean.getName().contains("Проживание")){
                        data.setTypeface(null, Typeface.BOLD);
                        name.setTypeface(null, Typeface.BOLD);
                        summ.setTypeface(null, Typeface.BOLD);
                    }
                    data.setText(" " + folioBean.getDate());
                    name.setText(" " + folioBean.getName() + " ");
                    summ.setText(folioBean.getSumm() + " ");
                    tableRow.addView(data, row_params2);
                    tableRow.addView(name, row_params2);
                    tableRow.addView(summ, row_params);
                    tableFolio.addView(tableRow);
                }
            }
        }.execute(link);
    }
}

在onPost方法中对文档进行检查

if (document!=null){

      Elements elementsId = document.select("id");
           Elements elementsCheckin = document.select("checkin");
           Elements elementsCheckout = document.select("checkout");
           Elements elementsNights = document.select("nights");

           for (int i = 0; i < elementsId.size(); i++) {
               HistoryBean historyBean = new HistoryBean();
               historyBean.setId(elementsId.get(i).ownText());
               historyBean.setCheckin(elementsCheckin.get(i).ownText());
               historyBean.setCheckout(elementsCheckout.get(i).ownText());
               historyBean.setNigth(elementsNights.get(i).ownText());
               historyBeans.add(historyBean);
           }
           listView.setAdapter(historyAdapter);
}

为文档添加空签入onPostExecute是的,我也这么认为。但是如果document==null怎么办?当你写这行document.selectid;如果文档为空,则不会将元素名称作为id,您将得到NullPointerException您不太了解我。有时我会得到一个空值。我点击打开的片段并得到Null。片段等待数据。但他们并不在场。我会写一张支票来证明我没有去,但是我该怎么处理我的碎片呢?我能放上任何铭文的碎片吗?怎么做?例如not Collected是的,你可以通过检查列表的大小来完成,如果列表的大小为零,那么你可以相应地更新你的片段,就像你说的not Collected告诉我如何做?因此,我问这个问题,因为我不明白它是如何做到的。如果要显示消息的内容,请使用Null而不是工作表