此代码以前工作正常。我没有改变任何东西。因为我已经把我的类作为一个片段并将滑动插入到另一个片段,它不起作用。
如果'
,我会得到例外 if (checkInput(tvWaybillDate.getText().toString(), etFlightNo.getText().toString(), etLitresObserved.getText().toString(), etTempObserved.getText().toString(), etDensity
.getText().toString(), strAirlinesId, strAirportsId, tvBouzer.getText().toString(), strLocationID, tvVCF.getText().toString(), tvLitres.getText().toString(), tvMT
.getText().toString(), tvA15.getText().toString()) == 13) {
.............
}
我的字段确实为空或某些""。但我在checkInput中检查它们的值。
checkInput:
private int checkInput(String waybillDate, String flightNo, String litresObserved, String tempObserved, String density, String airlineId, String airportId, String bouzer,
String locationId, String vcf, String litres, String mt, String a15) {
int count = 0;
valueList = new ArrayList<String>();
if (!waybillDate.equals("")) {
count++;
} else {
valueList.add("Waybill Date");
}
if (!flightNo.equals("") && !flightNo.equals("0") && flightNo != null) {
count++;
} else {
valueList.add("Flight No");
}
if (!litresObserved.equals("") && !litresObserved.equals("0") && litresObserved != null) {
count++;
} else {
valueList.add("Litres Observed");
}
if (!tempObserved.equals("") && !tempObserved.equals("0") && tempObserved != null) {
count++;
} else {
valueList.add("Temp Observed");
}
.
.
.
.
.
.}
以下是我得到的例外情况:
05-29 17:11:21.063: E/AndroidRuntime(10039): FATAL EXCEPTION: AsyncTask #3
05-29 17:11:21.063: E/AndroidRuntime(10039): java.lang.RuntimeException: An error occured while executing doInBackground()
05-29 17:11:21.063: E/AndroidRuntime(10039): at android.os.AsyncTask$3.done(AsyncTask.java:299)
05-29 17:11:21.063: E/AndroidRuntime(10039): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
05-29 17:11:21.063: E/AndroidRuntime(10039): at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
05-29 17:11:21.063: E/AndroidRuntime(10039): at java.util.concurrent.FutureTask.run(FutureTask.java:239)
05-29 17:11:21.063: E/AndroidRuntime(10039): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
05-29 17:11:21.063: E/AndroidRuntime(10039): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
05-29 17:11:21.063: E/AndroidRuntime(10039): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
05-29 17:11:21.063: E/AndroidRuntime(10039): at java.lang.Thread.run(Thread.java:838)
05-29 17:11:21.063: E/AndroidRuntime(10039): Caused by: java.lang.NullPointerException
05-29 17:11:21.063: E/AndroidRuntime(10039): at petrolina.pptaviation.NewWaybillPage1.sendWaybill(NewWaybillPage1.java:468)
05-29 17:11:21.063: E/AndroidRuntime(10039): at petrolina.pptaviation.NewWaybillPage1.access$28(NewWaybillPage1.java:465)
05-29 17:11:21.063: E/AndroidRuntime(10039): at petrolina.pptaviation.NewWaybillPage1$AsyncSend.doInBackground(NewWaybillPage1.java:1717)
05-29 17:11:21.063: E/AndroidRuntime(10039): at petrolina.pptaviation.NewWaybillPage1$AsyncSend.doInBackground(NewWaybillPage1.java:1)
05-29 17:11:21.063: E/AndroidRuntime(10039): at android.os.AsyncTask$2.call(AsyncTask.java:287)
05-29 17:11:21.063: E/AndroidRuntime(10039): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
05-29 17:11:21.063: E/AndroidRuntime(10039): ... 4 more
任何想法都错了吗?
答案 0 :(得分:0)
在if语句之前是否初始化了像tvWaybillDate这样的视图?
类似的东西:
TextView tvWaybillDate = (TextView) findViewById(R.id.xxx);
其中xxx是布局中的id。
此外,在函数checkInput中,您应检查字符串是否为空,然后再检查它们是否为空。所以,而不是:
if (!waybillDate.equals(""))
你应该写
if(waybillDate!= null&amp;&amp;!waybillDate.equals(“”))
每个字符串。
答案 1 :(得分:0)
如果您设置&#34;为什么TextView可能为null?在onCreate()中,您可能会尝试在视图本身实际可见之前设置它们。当您确定在视图中绘制视图时,您需要使用视图。为此,将您的视图集移动到onStart,即:
@Override
public void onStart(){
super.onStart();
tvWaybillDate.setText("some text");
...
}
这取决于您的活动http://developer.android.com/training/basics/activity-lifecycle/starting.html或片段http://developer.android.com/guide/components/fragments.html
的生命周期尝试将null作为参数传递是可以的,但是尝试将null转换为对象或基元是错误的来源。您需要将自己的视图或它们包含的文本字符序列传递给您的方法。例如:
tvWaybillDate.getText().toString();
如果tvWaybillDate为null,将抛出NPE;你不能将null转换为字符串。但是传递
checkInput(tvWaybillDate, ...
...
public void checkInput(TextView tvWaybillDate, ...){
int count = 0;
if(tvWaybillDate != null) count++;
...
return count;
}
这样做,或类似的事情,例如为你的所有观点传递CharacterSequence tvWaybillDate.getText()
,你应该没事。