关于如何在LogCat中找问题以及处理问题

关于如何在LogCat中找问题以及处理问题

我们都说一个厉害的程序员,不是他敲代码敲的多快,敲得有多少,而是他处理问题的能力,就是当你碰到一个问题之后能尽快的解决。

那么我们怎么才能快速的找到我们的错误所在呢。其实在我们学习Java的时候就已经学习过了,异常处理机制就是帮我们找到问题的所在,而且在java中出现问题之后往往会在抛出的异常中有出错代码的行数的,双击之后就可以直接跳转并选择错误的行数。然后我们可以结合异常原因查找自己所写的代码错在哪里(最好是自己查找错误,因为代码是自己写的别人也不知道你写过什么,只能竟尽可能的帮你缩小查找的范围)。

先以Java为例,怎么查找和处理问题:

public class Test {

public static void main(String[] args) {

// TODO Auto-generated method stub

try {

String age = "30d";

int number = Integer.parseInt(age);

catch (Exception e) {

e.printStackTrace();

}

System.out.println("程序结束");

}

}

这是一个关于字符串转换数字所抛出的异常:

程序结束

java.lang.NumberFormatException: For input string: "30d"

at java.lang.NumberFormatException.forInputString(Unknown Source)

at java.lang.Integer.parseInt(Unknown Source)

at java.lang.Integer.parseInt(Unknown Source)

at Test.main(Test.java:7)

 

at java.lang.NumberFormatException.forInputString(Unknown Source)

这是异常名称,其实这些异常都是比较常见的,当我们见得多了就能快速定位哪里出错了,就算不去看出错的代码行数,这里的代码行数也显示出来了at Test.main(Test.java:7)双击就可以直接定位到第七行,即

int number = Integer.parseInt(age);

然后就在往上查找

String age = "30d";

就能马上查找到是这个字符串的值有问题,字符串转换成数字,字符串里面的每个字符必须是数字,当然还有字符个数问题,只要对症下药就能解决问题。

 

然后就是关于Android里面的LogCat了,其实我们一般使用eclipse开发工具,开发环境其实是和一般的java开发是差不多的,那么问题的处理也应该是差不多的了

就以一个发送短信的Activity为例吧

package com.example.baseadapter;

import android.os.Bundle;

import android.app.Activity;

import android.telephony.SmsManager;

import android.telephony.gsm.SmsMessage;

import android.view.Menu;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

import android.widget.TextView;

import android.widget.Toast;

 

public class SMSActivity extends Activity implements OnClickListener{

private EditText et_content;

private TextView tv_number;

private Button send;

private String SMScontent;

private String number;

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.massage_layout);

et_content = (EditText) findViewById(R.id.et_content);

tv_number = (TextView) findViewById(R.id.tv_number);

send = (Button) findViewById(R.id.btn_send);

number = getIntent().getStringExtra("number");

tv_number.setText(number);

SMScontent = et_content.getText().toString().trim();

send.setOnClickListener(this);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.sm, menu);

return true;

}

@Override

public void onClick(View view) {

// TODO Auto-generated method stub

SmsManager sm = SmsManager.getDefault();

sm.sendTextMessage(number, null, SMScontent, null, null);

}

}

 

当我们启动Activity的时候是没有问题的,但是当我编辑完短信内容,然后点击发送的时候这个Activity就停止运行了,到底是什么原因呢?这时候我们就可以去查看我们的LogCat日志文件了

我们会发现这里有一大堆的信息,那么哪个是我们需要的呢?一般来说错误信息都是红色的,而且错误类型都是在前几行的

01-30 21:47:07.718: E/AndroidRuntime(20265): FATAL EXCEPTION: main

01-30 21:47:07.718: E/AndroidRuntime(20265): java.lang.IllegalArgumentException: Invalid message body

01-30 21:47:07.718: E/AndroidRuntime(20265):  at android.telephony.SmsManager.sendTextMessage(SmsManager.java:81)

01-30 21:47:07.718: E/AndroidRuntime(20265):  at com.example.baseadapter.SMSActivity.onClick(SMSActivity.java:52)

01-30 21:47:07.718: E/AndroidRuntime(20265):  at android.view.View.performClick(View.java:4171)

01-30 21:47:07.718: E/AndroidRuntime(20265):  at android.view.View$PerformClick.run(View.java:17097)

01-30 21:47:07.718: E/AndroidRuntime(20265):  at android.os.Handler.handleCallback(Handler.java:615)

01-30 21:47:07.718: E/AndroidRuntime(20265):  at android.os.Handler.dispatchMessage(Handler.java:92)

01-30 21:47:07.718: E/AndroidRuntime(20265):  at android.os.Looper.loop(Looper.java:137)

01-30 21:47:07.718: E/AndroidRuntime(20265):  at android.app.ActivityThread.main(ActivityThread.java:4914)

01-30 21:47:07.718: E/AndroidRuntime(20265):  at java.lang.reflect.Method.invokeNative(Native Method)

01-30 21:47:07.718: E/AndroidRuntime(20265):  at java.lang.reflect.Method.invoke(Method.java:511)

01-30 21:47:07.718: E/AndroidRuntime(20265):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:808)

01-30 21:47:07.718: E/AndroidRuntime(20265):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:575)

01-30 21:47:07.718: E/AndroidRuntime(20265):  at dalvik.system.NativeStart.main(Native Method)

 

查看前面这里的第二行的时候就看到IllegalArgumentException此异常表明向方法传递了一个不合法或不正确的参数,这就是错误原因,然后就是查找相应的位置了。

然后我们再往下看几行

01-30 21:47:07.718: E/AndroidRuntime(20265):  at android.telephony.SmsManager.sendTextMessage(SmsManager.java:81)

01-30 21:47:07.718: E/AndroidRuntime(20265):  at com.example.baseadapter.SMSActivity.onClick(SMSActivity.java:52)

上面的其实是我们出现异常的真正原因,我们填写的参数不符合这个方法的参数要求,由于这个是Android系统的方法,我们也改变不了,所以我们只能再查找我们自己所创建的activity了,接着就看下一个错误代码的行数。仔细看一下我们可以看到错误行数的前面有我们的项目工程名,其实我们看的时候可以根据前面的工程名来筛选不需要的提示。找到错误行数就定位到相应的代码呗,当然你也可以自己去一个个的找(闲的蛋疼)

sm.sendTextMessage(number, null, SMScontent, null, null);

这里的有参数有问题,经过查找我发现这里的SMScontent的内容是null,为什么呢?

原来我们在启动这个activity的时候就已经给它赋值了,而一开始的时候EditText里面是没有数据的,当我们触发点击事件的时候也没有给他重新赋值,所以就有null,参数传递不符合要求的异常了。

然后我们将SMScontent = et_content.getText().toString().trim();挪到onClick方法中之后程序就能发送短信了。

其实查找错误也是一个追根溯源的过程,查找到问题源头就能解决问题。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值