出错处理对话框
logcat的:出错处理对话框
致命异常:IntentService [BMI] 过程:user.com.test2,PID:3377 显示java.lang.NullPointerException:尝试调用虚拟方法“java.lang.String中java.lang.Object.toString()'空对象引用 at services.SendBpRecordServer.onHandleIntent(SendBpRecordServer.java:66) at android.app.IntentService $ ServiceHandler.handleMessage(IntentService.java:66) at android .os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) 在android.os.HandlerThread.run(HandlerThread.java:61)
我所试图做的事:
我从服务器使用凌空获取数据,并使用IntentService
做在后台运行。并且还使用ResultReceiver
将服务中的数据转换为活动。
UpdateData.class
public class Updatedata extends AppCompatActivity implements MyResultReceiver.Receiver{
DbHelper dbHelper;
public MyResultReceiver resultReceiver, resultReceiverBMI, resultReceiverBP;
ProgressDialog progressDialog;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.notify);
Log.i("On Creste","Yes");
dbHelper=new DbHelper(this);
//before starting further empty all the tables
dbHelper.emptyTables();
progressDialog=new ProgressDialog(Updatedata.this);
progressDialog.setTitle("Fetching Profile Data");
progressDialog.setMessage("Please Wait...");
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.show();
resultReceiver=new MyResultReceiver(new Handler());
resultReceiver.setReceiver(this);
System.out.println("Fetch Diabetes Data Service "+ SendDiabetesRecordServer.TAG);
Intent intent=new Intent(this, SendDiabetesRecordServer.class);
intent.putExtra("nameTag","fetch");
intent.putExtra("receiverTag",resultReceiver);
startService(intent);
Log.i("Fetch BMI Data ", SendBmiRecordServer.TAG);
resultReceiverBMI=new MyResultReceiver(new Handler());
resultReceiverBMI.setReceiver(this);
Intent intent1=new Intent(this,SendBmiRecordServer.class);
intent1.putExtra("nameTag","fetch");
intent1.putExtra("receiverTagBMI",resultReceiverBMI);
startService(intent1);
Log.i("Fetch BP Data ", SendBpRecordServer.TAG);
resultReceiverBP=new MyResultReceiver(new Handler());
resultReceiverBP.setReceiver(this);
Intent intent2=new Intent(this,SendBpRecordServer.class);
intent2.putExtra("nameTag","fetch");
intent2.putExtra("receiverTagBP",resultReceiverBP);
startService(intent2);
/*if (progressDialog.isShowing()) {
progressDialog.dismiss();
}*/
}
@Override
public void onReceiveResult(int resultCode, Bundle resultData) {
// TODO Auto-generated method stub
Log.d("Diabetes","received result from Service= "+resultData.getString("ServiceTag"));
Log.d("BMI ","received result from Service= "+resultData.getString("ServiceTag"));
/* if (progressDialog.isShowing()) {
progressDialog.dismiss();
}*/
Log.i("Get Values ",Integer.toString(Constants.getValues));
if (resultCode==0 && resultData.getBoolean("Process_Complete"))
Constants.getValues++;
if (resultCode==1 && resultData.getBoolean("Process_Complete_bmi"))
Constants.getValues++;
if (resultCode==2 && resultData.getBoolean("Process_Complete_bp"))
Constants.getValues++;
if (Constants.getValues==3)
{
if (progressDialog.isShowing()) {
progressDialog.dismiss();
}
startActivity(new Intent(this,MainActivity.class));
finish();
}
}
}
IntentService
模板:
@Override
protected void onHandleIntent(Intent intent) {
String recName=intent.getStringExtra("nameTag");
if (recName.equals("fetch"))
{
fetchDatFromServer();
ResultReceiver resultReceiver=intent.getParcelableExtra("receiverTag");
Log.d("diabetes Reseult ",resultReceiver.toString());
Bundle b= new Bundle();
b.putBoolean("Process_Complete",true);
resultReceiver.send(0, b);
}
这是同为3 IntentService
。
错误获取在: -
@Override
protected void onHandleIntent(Intent intent) {
String recName=intent.getStringExtra("nameTag");
if (recName.equals("fetch"))
{
Log.i("Send Data","Yes");
fetchDatFromServer();
ResultReceiver resultReceiver=intent.getParcelableExtra("receiverTag");
**Log.d("BP Reseult ",resultReceiver.toString());** //Getting Error at this line
Bundle bun= new Bundle();
bun.putBoolean("Process_Complete_bp",true);
resultReceiver.send(2, bun);
}
调试:
在第二意图类即SendBmiRecordServer.class
我非常肯定的问题是只有这个类。 因为当我把Log.i("Get Values", Constants.getValues);
和我有Constants.class
这我得到的结果,直到1
试试这个
覆盖的onDestroy方法和做初始化Constants.getValues=0
以下
@Override
public void onDestroy() {
super.onDestroy();
if (progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
}
}
无论你试图显示progressDialog检查!isFinishing()然后只显示progressDialog。 – Raghavendra