我在eclipse上编写的安卓短信发送器运行不了,意外停止

  1. 图片说明

换种写法,一般用内部类:
private OnClickListener clicklistener =new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Button btn=(Button) v;
            switch (btn.getId()) {
            case R.id.button:
                //点击后需要执行的的操作
                break;
                default:
                break;
            }
        }
    };

按钮监听改成: button.setOnClickListener( clicklistener);

07-16 21:45:19.197: E/AndroidRuntime(784): FATAL EXCEPTION: main
07-16 21:45:19.197: E/AndroidRuntime(784): java.lang.NullPointerException
07-16 21:45:19.197: E/AndroidRuntime(784): at com.example.sms.MainActivity$ButtonOnClickListener.onClick(MainActivity.java:41)
07-16 21:45:19.197: E/AndroidRuntime(784): at android.view.View.performClick(View.java:2408)
07-16 21:45:19.197: E/AndroidRuntime(784): at android.view.View$PerformClick.run(View.java:8816)
07-16 21:45:19.197: E/AndroidRuntime(784): at android.os.Handler.handleCallback(Handler.java:587)
07-16 21:45:19.197: E/AndroidRuntime(784): at android.os.Handler.dispatchMessage(Handler.java:92)
07-16 21:45:19.197: E/AndroidRuntime(784): at android.os.Looper.loop(Looper.java:123)
07-16 21:45:19.197: E/AndroidRuntime(784): at android.app.ActivityThread.main(ActivityThread.java:4627)
07-16 21:45:19.197: E/AndroidRuntime(784): at java.lang.reflect.Method.invokeNative(Native Method)
07-16 21:45:19.197: E/AndroidRuntime(784): at java.lang.reflect.Method.invoke(Method.java:521)
07-16 21:45:19.197: E/AndroidRuntime(784): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-16 21:45:19.197: E/AndroidRuntime(784): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-16 21:45:19.197: E/AndroidRuntime(784): at dalvik.system.NativeStart.main(Native Method)

package com.example.sms;

import java.util.ArrayList;

import android.R.string;
import android.support.v7.app.ActionBarActivity;
import android.telephony.SmsManager;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {

private EditText numberText;
private EditText contentText;

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

    numberText = (EditText) this.findViewById(R.id.number);
    contentText = (EditText) this.findViewById(R.id.content);
    Button button=(Button) this.findViewById(R.id.button);
    button.setOnClickListener(new ButtonOnClickListener());

}

private final class ButtonOnClickListener implements View.OnClickListener{


    public void onClick(View v){
        EditText getText = (EditText) findViewById(R.id.number);
        String number = numberText.getText().toString();
        EditText contentText = (EditText) findViewById(R.id.content);
        String content = contentText.getText().toString();
        SmsManager manager = SmsManager.getDefault();
        ArrayList<String> texts = manager.divideMessage(content);
        for(String text : texts){
            manager.sendTextMessage(number, null, text, null, null);
        }
        Toast.makeText(MainActivity.this, R.string.success, Toast.LENGTH_LONG).show();



    }
}

}

<?xml version="1.0" encoding="utf-8"?>

<string name="app_name">2短信发送器</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string>
<string name="number">请输入手机号</string>
<string name="content">请输入短信内容</string>
<string name="button">发送</string>
<string name="success">发送完成</string>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/number" />
<EditText
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@+id/number" />
<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/content" />
<EditText
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:minLines="3"
    android:text="@+id/content" />
<Button 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/button"
    android:id="@+id/button" 
    />

错误提示41行代码有nullpointer异常。对照检查一下。

java.lang.NullPointerException,建议你单步调试一下,这样可以发现是哪一句引起的 java.lang.NullPointerException,然后再分析原因吧。

E/AndroidRuntime(784): java.lang.NullPointerException
你可以测试一下为什么会产生空指针异常

我照着教程对照了,应该没错呀!

1 你是要完成在一个文本框里写点东西,然后点击按钮发送到指定号码人么,大概步骤就是取得那个id的文本,
然后取得文本值,把这个值传递给号码人,按照一个协议吧,我忘记了,

2 作为一个初学者,要会使用debug,就是测试单步,就是有个小虫子样子的按钮,我没打开eclipse,不给你截图了,你先在onclick方法里,双击代码行左侧
空白区域,会出现一个断点,然后你就重新启动虚拟机,执行程序时候,会停止运行,进入到debug模式,就是在等你单步运行,看具体是哪里的值没取到
一般运行功能时候,会弹出对话框,问你要不要进入debug模式,点击yes即可;

你的错误是07-16 21:45:19.197: E/AndroidRuntime(784): at com.example.sms.MainActivity$ButtonOnClickListener.onClick(MainActivity.java:41)
41行代码处空值了,你仔细看看41行,祝你好运!累死我了。。。求采纳哦

   // EditText getText = (EditText) findViewById(R.id.number);
    String number = numberText.getText().toString();
   // EditText contentText = (EditText) findViewById(R.id.content);
    String content = contentText.getText().toString();
    SmsManager manager = SmsManager.getDefault();

            第二句被我注释掉是因为初始化的时候就拿到空的string,发短信会异常。

首先你有没有加上短信的权限?



其次,你按照你出错的locat,点击报错的信息,看ecliipse给你跳转到哪个语句,你贴出来看看

图片说明这是权限
图片说明双击第四个
图片说明双击后

图片说明

你看清楚,你的Edittext中是:android:text=“@+id/number”而不是 android:id=“@+id/number”。。。。。。。。。。。。。。