Android 如何在AsyncTask或Fragment中处理Null?
在AsyncTask中,我得到了一个对象文档,以便在片段中与他进一步合作。问题是有时我得到document=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
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而不是工作表