当前位置: 首页 > 知识库问答 >
问题:

处理对话框时出错

蓝恩
2023-03-14

Logcat:

致命异常:IntentService[BMI]进程:用户。通用域名格式。test2,PID:3377 java。lang.NullPointerException:尝试调用虚拟方法“java”。字符串java。朗,反对。服务上的空对象引用上的toString()。SendBpRecordServer。android上的onHandleIntent(sendbRecordServer.java:66)。应用程序。IntentService$ServiceHandler。android上的handleMessage(IntentService.java:66)。操作系统。汉德勒。android上的dispatchMessage(Handler.java:102)。操作系统。活套。android上的loop(Looper.java:148)。操作系统。手绢。run(HandlerThread.java:61)

我想做的是:

我使用截取从服务器获取数据,并使用IntentService在后台执行操作。还可以使用ResultReceiver将数据从服务获取到活动。

UpdateData。类

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);
    } 

这与3IntentService相同。

错误获取:-

@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);

    }

调试:

在第二个意图类中,即sendbimRecordServer。类

我很确定问题只在这门课上。因为当我把日志。i(“获取值”,Constants.getValues) 和初始化常量。常量中的getValues=0。类

这是我在1点之前得到的结果


共有1个答案

陶泳
2023-03-14

试试这个

重写onDestroy方法并执行以下操作

 @Override
    public void onDestroy() {
        super.onDestroy();
              if (progressDialog != null && progressDialog.isShowing()) {
                progressDialog.dismiss();
            }
    }
 类似资料:
  • 问题内容: Java noob在这里。当用户按下Windows关闭按钮时,扩展的Swing类不会处理- java.exe保留在内存中。我已经将代码剥离到了这个shell上,但我仍然可以做到这一点。 我看了其他示例,例如Basic Java Swing,如何退出和处置您的应用程序/JFrame。 当我注释掉该示例代码中的两行时,该示例中的类仍然正确处理。我想让我的班级丢掉什么? 问题答案: 您正在创

  • 本文向大家介绍Android AlertDialog实现分享对话框/退出对话框/下载对话框,包括了Android AlertDialog实现分享对话框/退出对话框/下载对话框的使用技巧和注意事项,需要的朋友参考一下 一.摘要 弹窗通常用于提示用户进行某种操作,比如:点击分享按钮,弹窗分享对话框;双击返回按钮,弹窗退出对话框;下载文件,提示下载对话框等等,分享对话框/退出对话框/下载对话框,都可以直

  • 问题内容: 我必须处理打印对话框(在浏览器中单击ctrl-p时出现的对话框)。我尝试过: 但这没用。我也抓不到它的窗口句柄,因为它不是窗口… 是否可以处理这些对象?如何处理? 问题答案: 不幸的是,WebDriver无法处理这些(或任何其他浏览器或OS对话框)。此外,它们在浏览器/系统/语言设置中的外观往往有所不同,因此可能没有明确的答案。您需要检测并处理所有可能的情况,以使其在任何地方都有效。您

  • 问题内容: 我必须处理打印对话框(在浏览器中单击ctrl-p时出现的对话框)。我尝试了: 但这没用。我也抓不到它的窗口句柄,因为它不是窗口… 是否可以处理这些对象?如何处理? 问题答案: 不幸的是,WebDriver无法处理这些(或任何其他浏览器或OS对话框)。此外,它们在浏览器/系统/语言设置中的外观往往有所不同,因此可能没有明确的答案。您需要检测并处理所有可能的情况,以使其在任何地方都有效。您

  • 我必须处理打印对话框(与在浏览器中单击ctrl-p时显示的对话框相同)。我试过: 但它不起作用。而且我抓不到它的窗口把手,因为它不是一个窗口。。。 是否有可能处理这些对象,如何处理?

  • 当我按下文件打开对话框上的取消按钮时(代码如下),我收到以下错误: 错误显示为模式弹出窗口: 到目前为止,我只在Mac电脑上测试过。 我的代码如下: 处理创建对话框的主要过程代码如下: 我的调试器语句从未到达。此外,当实际选择了一些文件时,代码工作正常,只有在按下“取消”时才会失败。 触发IPC调用的代码(ES6 JSX)如下所示: 代码通过巴别塔6进行处理。我的如下: 电子版本:. babel依