如何解决 NullPointerException 问题? [英] How to troubleshoot NullPointerException?

查看:28
本文介绍了如何解决 NullPointerException 问题?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面的程序抛出一个 NullPointerException.在 Log cat 中,它显示:

The below program throws a NullPointerException. In Log cat it shows:

01-09 20:40:34.366: D/RemoteIt(2809): java.lang.NullPointerException

当按钮被点击时,它不会进入 Mousefragment 类.我试图解决它,但我不能 - 如何解决这个问题?

When the button is clicked it doesn't goes to Mousefragment class. I tried to solve it but I can't - how to troubleshoot this?

public class connect extends ListActivity implements OnClickListener{
  WifiApManager wifiApManager;
  TextView tv;
  Button ipscan,con;
  ListView lv;
  EditText tbIp;
  private static final String TAG = "RemoteIt";
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.connect);
    tv =(TextView) findViewById(R.id.iptv);
    ipscan=(Button) findViewById(R.id.scan);
    con=(Button) findViewById(R.id.connect);
    tbIp=(EditText) findViewById(R.id.etIp);
    ipscan.setOnClickListener(this);  
    con.setOnClickListener(this);  
    lv = getListView();
  }
  class scan extends AsyncTask<Void, Void, ArrayList<ClientScanResult>>{ 
    public Context context;
    public scan(Context c)  // constructor to take Context
    {
      context = c;   // Initialize your Context variable
    }

    protected ArrayList<ClientScanResult> doInBackground(Void... params) {
      wifiApManager = new WifiApManager(context);  // use the variable here
      return wifiApManager.getClientList(false);

    }

    protected void onPostExecute(ArrayList<ClientScanResult> clients){
      CustomArrayAdapter cus = new CustomArrayAdapter(connect.this,clients);
      lv.setAdapter(cus);   
    }
  }
  @Override
  public void onClick(View v) {
    // TODO Click Action...
    if(v == ipscan){
      scan myScan = new scan(this); // pass the context to the constructor
      myScan.execute();
    }
    if(v == con){
      onConnectButton();
    }
  }
  private void onConnectButton() {
    // TODO When Btn s Clicked...

    String ip = this.tbIp.getText().toString();
    if (ip.matches("^[0-9]{1,4}\.[0-9]{1,4}\.[0-9]{1,4}\.[0-9]{1,4}$")) {
      try {
        Settings.setIp(ip);
        Intent intent = new Intent(connect.this,MouseFragment.class);
        connect.this.startActivity(intent); 
        //Intent i = new Intent(this, MouseFragment.class);
        //this.startActivity(i);
        this.finish();
      } catch (Exception ex) {

        Toast.makeText(this, this.getResources().getText(R.string.invalid_ip), Toast.LENGTH_LONG).show(); **//this toast is displayed**
        Log.d(TAG, ex.toString());
      }
    } else {
      //this.tvError.setText("Invalid IP address");
      //this.tvError.setVisibility(View.VISIBLE);
      Toast.makeText(this, this.getResources().getText(R.string.in_valid), Toast.LENGTH_LONG).show();
    }
  }; 

  /** OS kills process */
  public void onDestroy() {
    super.onDestroy();
  }

  /** App starts anything it needs to start */
  public void onStart() {
    super.onStart();
  }

  /** App kills anything it started */
  public void onStop() {
    super.onStop();
  }
}

编辑

    01-09 21:23:28.663: W/System.err(5657): java.lang.NullPointerException
01-09 21:23:28.665: W/System.err(5657):     at com.arul.remoteit.Settings.setIp(Settings.java:67)
01-09 21:23:28.668: W/System.err(5657):     at com.arul.remoteit.connect.onConnectButton(connect.java:81)
01-09 21:23:28.668: W/System.err(5657):     at com.arul.remoteit.connect.onClick(connect.java:72)
01-09 21:23:28.669: W/System.err(5657):     at android.view.View.performClick(View.java:4445)
01-09 21:23:28.670: W/System.err(5657):     at android.view.View$PerformClick.run(View.java:18429)
01-09 21:23:28.672: W/System.err(5657):     at android.os.Handler.handleCallback(Handler.java:733)
01-09 21:23:28.673: W/System.err(5657):     at android.os.Handler.dispatchMessage(Handler.java:95)
01-09 21:23:28.673: W/System.err(5657):     at android.os.Looper.loop(Looper.java:136)
01-09 21:23:28.674: W/System.err(5657):     at android.app.ActivityThread.main(ActivityThread.java:5081)
01-09 21:23:28.675: W/System.err(5657):     at java.lang.reflect.Method.invokeNative(Native Method)
01-09 21:23:28.677: W/System.err(5657):     at java.lang.reflect.Method.invoke(Method.java:515)
01-09 21:23:28.678: W/System.err(5657):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:781)
01-09 21:23:28.679: W/System.err(5657):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-09 21:23:28.680: W/System.err(5657):     at dalvik.system.NativeStart.main(Native Method)
01-09 21:25:34.395: W/IInputConnectionWrapper(5657): getTextBeforeCursor on inactive InputConnection
01-09 21:25:34.513: W/IInputConnectionWrapper(5657): getTextBeforeCursor on inactive InputConnection

按钮被点击多少次,异常显示为 invalid_ip toast 消息

How many time the button is clicked the Exception is Showed with the invalid_ip toast message

推荐答案

如上所述,您的问题询问如何解决此问题.

Your question, as stated, asks about how to troubleshoot this.

您需要弄清楚在抛出 Exception 的那条线上什么是 null.为此,您需要查看堆栈跟踪以查看哪一行导致了问题.然后,您可以使用调试器(或一张纸和一支铅笔)逐步执行您的程序,或者只是添加打印语句来确定哪个变量是 null.

You need to figure out what's null on the line throwing the Exception. To do that, you take a look at the stack trace to see which line is causing the problem. Then you either step through your program with a debugger (or a piece of paper and a pencil) or just add print statements to figure out which variable is null.

当你知道哪个变量是null时,你可以通过程序回溯找出为什么它是null.当您知道为什么它是 null 时,您就可以解决您的问题.

When you know which variable is null, you can trace back through the program to figure out why it's null. When you know why it's null, you can fix your problem.

这篇关于如何解决 NullPointerException 问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆