出错处理对话框

问题描述:

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

+0

无论你试图显示progressDialog检查!isFinishing()然后只显示progressDialog。 – Raghavendra

试试这个

覆盖的onDestroy方法和做初始化Constants.getValues=0以下

@Override 
    public void onDestroy() { 
     super.onDestroy(); 
       if (progressDialog != null && progressDialog.isShowing()) { 
       progressDialog.dismiss(); 
      } 
    } 
+0

没有帮助..仍然得到相同的错误.. –

+0

获取相同的错误@Amsheer –

+0

您的活动仍然打开吗? – Amsheer