如何解决 NullPointerException 问题? [英] How to troubleshoot 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屋!