在之前工作的代码中获取NullPointerException

 小丽丽很可爱 发布于 2023-01-29 08:31

我有一个代码来检查PNR号码.由于互联网问题,我想让用户通过短信检查PNR.所以我添加了2个收音机按钮,一个用于互联网,一个用于短信.但问题是,当我单击PNR按钮时,它会给出nullPointer异常.这是我的Main Activity.java

public class MainActivity extends Activity implements OnClickListener {
    /** Called when the activity is first created. */
    private EditText pnrNumber;
    private TextView errMsg;
    private Button getPnr;
    private Button pnrClear;
    Button Yes, No;
    RadioButton checkbyinternet, checkbysms;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        errMsg = (TextView) findViewById(R.id.errMsg);
        pnrNumber = (EditText) findViewById(R.id.pnrNumber_p01);
        getPnr = (Button) findViewById(R.id.checkPNRButton);
        pnrClear = (Button) findViewById(R.id.pnrClear);

        getPnr.setOnClickListener(this);
        pnrClear.setOnClickListener(this);
    }

    public void onClick(View src) {
        // Perform action on click

        if (src.getId() == R.id.checkPNRButton) 
        {
            if (checkbyinternet.isChecked()) 
                {
                    int pnr2 = pnrNumber.getEditableText().length();
                    if (pnr2 != 10) 
                    {
                        errMsg.setText("Length of PNR is Invalid.");

                    } 
                    else 
                    {

                    String pnr = pnrNumber.getEditableText().toString();

                    Bundle b = new Bundle();
                    b.putString("pnr", pnr);

                    System.out.println("Connectivity : "
                            + this.isNetworkAvailable());

                    PNRStatus pnrStatus = null;
                    // Connect to the Server and Get the PNR status
                    try 
                        {

                            String captcha = "37819";
                            String pnr1 = pnrNumber.getText().toString();

                            String reqStr = "lccp_pnrno1=" + pnr1
                                    + "&lccp_cap_val=" + captcha
                                    + "&lccp_capinp_val=" + captcha
                                    + "&submitpnr=Get+Status";
                            PNRStatusCheck check = new PNRStatusCheck();
                            StringBuffer data = check
                                    .getPNRResponse(reqStr,
                                            "http://www.indianrail.gov.in/cgi_bin/inet_pnstat_cgi_28688.cgi");
                            // String pnr1 = pnr; //"1154177041";
                            // String reqStr = "lccp_pnrno1=" + pnr1 +
                            // "&submitpnr=Get+Status";
                            // PNRStatusCheck check = new PNRStatusCheck();
                            // StringBuffer data = check.getPNRResponse(reqStr,
                            // "http://www.indianrail.gov.in/cgi_bin/inet_pnrstat_cgi.cgi");
                            if (data != null) 
                                {
                                    pnrStatus = check.parseHtml(data);
                                    b.putSerializable("pnrStatus", pnrStatus);
                                } 
                            else 
                                {
                                // error
                                }
                        } 
                    catch (Exception e) 
                        {
                            e.printStackTrace();
                        }

                    Intent to = null;
                    if (pnrStatus != null) 
                        {
                            to = new Intent(this, PNRStatusActivity.class);
                            to.putExtras(b);
                            startActivity(to);
                        } 
                    else 
                    {
                        errMsg.setText("Error prcessing PNR. Please try again.");
                    }
                }
            } 
            else if (checkbysms.isChecked()) 
            {
                // Toast.makeText(this, "SMS", Toast.LENGTH_SHORT).show();
                int pnr2 = pnrNumber.getEditableText().length();
                if (pnr2 != 10) 
                    {
                        errMsg.setText("Length of PNR is Invalid.");

                    } 
                else 
                    {
                        openSMSWarningDialog(src);
                    }
            }

        } 
        else if (src.getId() == R.id.pnrClear) 
            {
                errMsg.setText("");
                pnrNumber.setText("");
            }
    }

    public boolean isNetworkAvailable() {
        ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = cm.getActiveNetworkInfo();
        // if no network is available networkInfo will be null, otherwise check
        // if we are connected
        if (networkInfo != null && networkInfo.isConnected()) {
            return true;
        }
        return false;
    }

    public void openSMSWarningDialog(View view) {
        final Dialog dialog = new Dialog(MainActivity.this);
        dialog.setContentView(R.layout.smsdialog);
        dialog.setTitle("Are you sure to use SMS.?");
        Yes = (Button) dialog.findViewById(R.id.yes);
        No = (Button) dialog.findViewById(R.id.no);

        Yes.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                String PnrNum = pnrNumber.getText().toString();
                String messageToSend = ("PNR " + PnrNum);
                String number = "139";
                SmsManager.getDefault().sendTextMessage(number, null,
                        messageToSend, null, null);
                dialog.dismiss();
                Toast.makeText(
                        getBaseContext(),
                        "Please check your inbox in sometime for your PNR Status",
                        Toast.LENGTH_LONG).show();
            }
        });

        No.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                dialog.dismiss();
            }
        });
        dialog.show();
    }
}

这是我的布局:




    

    

    

        
    

    

短信布局:




    
    

    

        

这是我的日志:

02-06 13:54:22.810: E/AndroidRuntime(858): FATAL EXCEPTION: main
02-06 13:54:22.810: E/AndroidRuntime(858): java.lang.NullPointerException
02-06 13:54:22.810: E/AndroidRuntime(858):  at akshat.jaiswal.indianrailways.MainActivity.onClick(MainActivity.java:50)
02-06 13:54:22.810: E/AndroidRuntime(858):  at android.view.View.performClick(View.java:4084)
02-06 13:54:22.810: E/AndroidRuntime(858):  at android.view.View$PerformClick.run(View.java:16966)
02-06 13:54:22.810: E/AndroidRuntime(858):  at android.os.Handler.handleCallback(Handler.java:615)
02-06 13:54:22.810: E/AndroidRuntime(858):  at android.os.Handler.dispatchMessage(Handler.java:92)
02-06 13:54:22.810: E/AndroidRuntime(858):  at android.os.Looper.loop(Looper.java:137)
02-06 13:54:22.810: E/AndroidRuntime(858):  at android.app.ActivityThread.main(ActivityThread.java:4745)
02-06 13:54:22.810: E/AndroidRuntime(858):  at java.lang.reflect.Method.invokeNative(Native Method)
02-06 13:54:22.810: E/AndroidRuntime(858):  at java.lang.reflect.Method.invoke(Method.java:511)
02-06 13:54:22.810: E/AndroidRuntime(858):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
02-06 13:54:22.810: E/AndroidRuntime(858):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
02-06 13:54:22.810: E/AndroidRuntime(858):  at dalvik.system.NativeStart.main(Native Method)

请帮助,我无法得到任何解决方案.

1 个回答
  • checkbyinternetcheckbysms按钮是未初始化的,这就是你在方法中执行NullPointerExceptionwhen的原因.if (checkbyinternet.isChecked())onClick()

    if (src.getId() == R.id.checkPNRButton) // true if you pressed the getPnr button
            {
                if (checkbyinternet.isChecked()) // checkbyinternet is uninitialized yet, so it'll throw a NPE
    

    您还需要在onCreate()方法中初始化它们.

    checkbyinternet = (RadioButton) findViewById(R.id.internet);
    checkbysms = (RadioButton) findViewById(R.id.sms);
    

    2023-01-29 08:43 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有