疑问:Android界面刷新方法
Android 如果返回前面的Activity时能自动更新(刷新)
解答:
第一种方法:
引用函数 setResult和 onActivityResult处理机制
A窗体AActivity和B窗体BActivity,A进入B窗体,然后B窗体返回A窗体并要实现B窗体的界面更新
A窗体需要添加代码:
//切换到B窗体
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(AActivity.this,BActivity.class);
Bundle bundle = new Bundle();
bundle.putString("uid", AActivity.this.toString());
intent.putExtras(bundle);
startActivityForResult(intent,GET_CODE);
}
//重构方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if(requestCode == GET_CODE)
{
}
}
B窗体需要添加代码:
//B窗体结束,返回A窗体
@Override
public void onClick(View v)
{
setResult(RESULT_OK,(new Intent()).setAction(uid));
finish();
}
疑问:Android消息推送机制
Android经常需要APP程序与服务器同步最新数据,并通过声音或者图标提醒用户,一般服务器与客户端同步数据分两种,第一种是客户端使用Pull(拉)的模式,隔一段时间就去服务器上获取信息,看是否有更新的信息出现。第二种就是 服务器使用Push(推送)的模式,当服务器端有新信息了,则把最新的信息Push到客户端上。
如果能实现Push(推送)模式的话就最理想化,不需要客户端定时的去监听服务器的数据,省流量并且用户体验好。
解答:
疑问:Android文字或字体(Textview)加下划线
比如登陆界面中的“忘记密码”一般都有下划线,怎么添加?
解答:
有两种方法:
1)textView.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG)
2)textView.setText(Html.fromHtml("<u>找回密码</u>"))
第一种效果不好,会出现锯齿状的字体,还是采用第二种方法。
疑问:Android手机访问IP地址的webservice网络失败
部署过一个webservice,但因为没有域名,所以地址就用IP地址组成,但很多手机访问的时候出现网络连接失败。而且SDK低版本的可以访问,高版本的不能连接。
android.os.NetworkOnMainThreadException
解答:
怀疑1:初步判断应该是手机安全或管理软件(91助手)屏蔽了IP地址形式访问外网,或者从IP地址外网获取数据
怀疑2:根据反馈情况,android4.0以上的访问都有问题,所以怀疑调用webservice的开发包ksoap2-android-assembly-2.4-jar-with-dependencies.jar需要更新为最新版本,版本有点老
怀疑3:android4.0系统不允许主线程(UI线程)访问网络
最终判断是怀疑3的问题,所以在初始化界面加如下代码就OK了:
if (version >= 11){
//android3.0后调用webservice需要加这段代码
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork() // or .detectAll() for all detectable problems
.penaltyLog()
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
//.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build());
}
疑问:Android界面缓冲
缓冲界面具有进入应用时判断网络、获取平台数据、展示logo等功能,因此在android应用中登陆之前使用图片或者动画做缓冲界面
解答:
public class AppStart extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final View view = View.inflate(this, R.layout.start, null);
setContentView(view);
//渐变展示启动屏
AlphaAnimation aa = new AlphaAnimation(0.3f,1.0f);
aa.setDuration(3000);
view.startAnimation(aa);
aa.setAnimationListener(new AnimationListener()
{
@Override
public void onAnimationEnd(Animation arg0) {
redirectTo();
}
@Override
public void onAnimationRepeat(Animation animation) {}
@Override
public void onAnimationStart(Animation animation) {
}
});
}
/**
* 跳转到...
*/
private void redirectTo(){
Intent intent = new Intent(this, Login.class);
startActivity(intent);
finish();
}
}
疑问:Android怎么读取硬件设备信息
解答:
作者:水煮鱼
出处:http://blog.csdn.net/sheshou2/