用eclipse做的一个短信发送器,编译通过但是部署到模拟器上面出错.后来经过多方学习发现是新的sdk原因
2014-06-06 01:56
423 查看
这是我错误的MainActivity.java代码,因为布局文件不变,所以我就不贴出来了。
错误信息指向 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代码,贴出来。
这是我在学习传智播客安卓开发黎活明视频中的短信发送器期间遇到的问题,我们不能照搬视频上面的代码,因为sdk更新了,所以很多操作会不一样。希望这篇简单的博客能对和我一样的安卓初学者有帮助。
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更新了,所以很多操作会不一样。希望这篇简单的博客能对和我一样的安卓初学者有帮助。
相关文章推荐
- 用eclipse做的一个短信发送器,编译通过但是部署到模拟器上面出错
- Java动态编译一个简单的例子(我转载的,但是经过修定,可以在Eclipse下运行)
- PB编译通过,但是make时出错
- cocos2d-x学习之旅(五):1.5 使用eclipse编译cocos2d-x示例项目,创建cocos2d-x android项目并部署到真机
- java中short s1 = 1;s1 = s1 + 1;会出错而short s1+=1;能编译通过的原因
- SpringBoot在Eclipse内能够运行,但是部署在Tomcat8上启动时会有一个logback的异常
- MT6573 Android在Eclipse中Debug方式分两种,一种是编译模拟器,在模拟器的基础上进行调试,还有一种是通过真机remote debug。
- WinXP 无线技巧“区域没有通过无线网络中的发现”一个可能的原因!
- servlet层调用biz业务层出现浏览器 500错误,解决方法 dao数据访问层 数据库Util工具类都可能出错 通过新建一个测试类复制代码逐步测试查找出最终出错原因
- 现在有一个城市销售经理,需要从公司出发,去拜访市内的商家,已知他的位置以及商家的位置,但是由于城市道路交通的原因,他只能在左右中选择一个方向,在上下中选择一个方向,现在问他有多少种方案到达商家地址。给定一个地图map及它的长宽n和m,其中1代表经理位置,2代表商家位置,-1代表不能经过的地区,0代表可以经过的地区,请返回方案数,保证一定存在合法路径。保证矩阵的长宽都小于等于10。
- Eclipse 使用AWT时出错的一个原因(路径找不到)
- 使用动态分配和指针操作求 9 个 double 数的乘积(编译通过了,但是运行时出错,谁能帮我看看出了什么问题啊)[em08]
- Eclipse可以运行但是命令行窗口却执行出错的原因
- eclipse 工程上面显示 错误 但是却没有发现错误
- 我用myeclipse导入了一个用eclipse开发的项目,项目上有个差报错,是里面几个页面报的假错,部署到tomcat后,tomcat配置里这个项目的running值是false,访问就报404错误,而且不编译class文件
- mfc对话框程序在ide编译可运行,但编译完毕的debug和release版本不能运行。。后来发现原因是:用到的sqlite数据库文件没在对应目录下,而代码中没有try..catch..
- 设置了全局钩子,但是发现有的程序钩不到,这个问题可能的一个原因
- 集成百度地图,真机和模拟器其中一个编译不通过
- 今天发现一个隐蔽的条件编译BUG,不容易发现,编译不会出错。是否可以用断言来解决?
- C# VS中进行编译发现没有错误但是无法生成的原因