您的位置:首页 > 编程语言 > Java开发

用eclipse做的一个短信发送器,编译通过但是部署到模拟器上面出错.后来经过多方学习发现是新的sdk原因

2014-06-06 01:56 423 查看
这是我错误的MainActivity.java代码,因为布局文件不变,所以我就不贴出来了。

package com.example.sms;

import java.util.ArrayList;

import android.support.v7.app.ActionBarActivity;
import android.support.v4.app.Fragment;
import android.telephony.SmsManager;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {
private EditText numberText;
private EditText contentText;

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

if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment())
.commit();
}

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 ButtonClickListener());

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}

/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {

public PlaceholderFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
return rootView;
}
}

private final class ButtonClickListener implements View.OnClickListener{

@Override
public void onClick(View v) {

String number=numberText.getText().toString();
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(getApplicationContext(), R.string.success, Toast.LENGTH_LONG).show();;
}

}

}

错误信息指向 onCreate里面的 button.setOnClickListener(new ButtonClickListener());

显示它为空指针,本来我想明明传过去了,后来百度才知道现在都在 PlaceholderFragment 里面的onCreateView方法里面进行查找id以及设置按钮的各种事件。于是将onCreate里面的所有操作删除,不去动它,然后在onCreateView里面进行操作就可以了,还有就是findViewById,应该是使用rootView.findViewById而不是this.findViewById.

需要注意的就是在Toast通知语句后面记得加入show(),那么你的通知才会被显示,另外你要在安卓清单文件(AndroidManifest.xml)中加入 <uses-permission android:name="android.permission.SEND_SMS"/>才能获取发送短信的权限。

下面是我修改后的MainActivity.java代码,贴出来。

package com.example.sms;

import java.util.ArrayList;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.telephony.SmsManager;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.os.Build;

public class MainActivity extends ActionBarActivity {

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

if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment())
.commit();
}
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}

/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {

public PlaceholderFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);

final EditText numberText=(EditText) rootView.findViewById(R.id.number);
final EditText contentText=(EditText) rootView.findViewById(R.id.content);
Button button=(Button) rootView.findViewById(R.id.button);

button.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
String number=numberText.getText().toString();
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(getActivity(),R.string.success,Toast.LENGTH_LONG).show();
}
});
return rootView;
}
}
}


这是我在学习传智播客安卓开发黎活明视频中的短信发送器期间遇到的问题,我们不能照搬视频上面的代码,因为sdk更新了,所以很多操作会不一样。希望这篇简单的博客能对和我一样的安卓初学者有帮助。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐