Android开发中遇到ImageButton背景设置的问题

_zw 2015-09-01 02:57:41
我想在EditUserActivity.java里面,点击一个ImageButton,然后跳到一个fragment,fragment里面有两个按钮,分别是拍照和从相册选择,选择了图片之后,将图片的路径传回给EditUserAcitiviy.java里面,把刚才获得的图片设置为ImageButton的背景图。



错误信息:
09-01 13:55:47.288: I/BBBBBB(14686): 图库
09-01 13:55:55.928: I/TagDialogFragment(14686): imagePath = /storage/sdcard1/baidu/imeface.png
09-01 13:55:55.928: I/@ EditUserActivity.java AAAAAAAAA(14686): /storage/sdcard1/baidu/imeface.png
09-01 13:55:55.928: I/System.out(14686): java.lang.NullPointerException
09-01 13:55:55.928: W/System.err(14686): java.lang.NullPointerException
09-01 13:55:55.928: W/System.err(14686): at android.app.Activity.findViewById(Activity.java:1914)
09-01 13:55:55.928: W/System.err(14686): at com.example.tracemap.activity.EditUserActivity.toDisplayPhoto(EditUserActivity.java:88)
09-01 13:55:55.928: W/System.err(14686): at com.example.tracemap.activity.EditUserActivity.photoUriCallback(EditUserActivity.java:105)
09-01 13:55:55.928: W/System.err(14686): at com.example.tracemap.fragment.SelectPhotoDialogFragment.doPhoto(SelectPhotoDialogFragment.java:200)
09-01 13:55:55.928: W/System.err(14686): at com.example.tracemap.fragment.SelectPhotoDialogFragment.onActivityResult(SelectPhotoDialogFragment.java:210)
09-01 13:55:55.928: W/System.err(14686): at android.support.v4.app.FragmentActivity.onActivityResult(FragmentActivity.java:163)
09-01 13:55:55.928: W/System.err(14686): at android.app.Activity.dispatchActivityResult(Activity.java:5530)
09-01 13:55:55.928: W/System.err(14686): at android.app.ActivityThread.deliverResults(ActivityThread.java:3589)
09-01 13:55:55.928: W/System.err(14686): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3636)
09-01 13:55:55.928: W/System.err(14686): at android.app.ActivityThread.access$1600(ActivityThread.java:141)
09-01 13:55:55.928: W/System.err(14686): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1290)
09-01 13:55:55.928: W/System.err(14686): at android.os.Handler.dispatchMessage(Handler.java:102)
09-01 13:55:55.928: W/System.err(14686): at android.os.Looper.loop(Looper.java:136)
09-01 13:55:55.928: W/System.err(14686): at android.app.ActivityThread.main(ActivityThread.java:5290)
09-01 13:55:55.928: W/System.err(14686): at java.lang.reflect.Method.invokeNative(Native Method)
09-01 13:55:55.928: W/System.err(14686): at java.lang.reflect.Method.invoke(Method.java:515)
09-01 13:55:55.938: W/System.err(14686): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:859)
09-01 13:55:55.938: W/System.err(14686): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:675)
09-01 13:55:55.938: W/System.err(14686): at dalvik.system.NativeStart.main(Native Method)
09-01 13:55:55.938: I/CCCCC(14686): here!


EditUserActivity.java
package com.example.tracemap.activity;

import com.example.tracemap.activity.base.BaseFragmentActivity;
import com.example.tracemap.fragment.SelectPhotoDialogFragment;

public class EditUserActivity extends BaseFragmentActivity {
private ImageButton btnClose;
private ImageButton header;
android.support.v4.app.FragmentManager mFragmentManager = getSupportFragmentManager();

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


btnClose = (ImageButton)findViewById(R.id.btn_back);
header = (ImageButton)findViewById(R.id.header);
btnClose.setOnClickListener(mOnClickListener);
header.setOnClickListener(mOnClickListener);
}

protected Context getActivity() {
// TODO Auto-generated method stub
return this;
}
protected void Close()
{
this.finish();
}


public SelectPhotoDialogFragment.DialogCallback selectPhotoCallback = new SelectPhotoDialogFragment.DialogCallback (){

@Override
public void onSuccess(Bundle data) {
// TODO Auto-generated method stub
}

};
OnClickListener mOnClickListener = new OnClickListener() {

@SuppressLint("NewApi")
@Override
public void onClick(View v) {
switch(v.getId())
{
case R.id.btn_back:
Close();
break;
case R.id.header:
SelectPhotoDialogFragment fragment = SelectPhotoDialogFragment.getInstance(selectPhotoCallback);
Bundle bundle = new Bundle();
//FragmentTransaction ft = getFragmentManager().beginTransaction();
//FragmentTransaction ft = getFragmentManager().beginTransaction();
fragment.show(mFragmentManager, SelectPhotoDialogFragment.TAG);
break;

}
}
};

/**
* 将选择的图片显示在头像位置
* @param photoUri
*/
private void toDisplayPhoto(String picPath){

ImageButton imageButton = (ImageButton)findViewById(R.id.header);
//Bitmap mHeader = BitmapFactory.decodeStream(getClass().getResourceAsStream(picPath));
Drawable drawable = Drawable.createFromPath(picPath);
imageButton.setBackground(drawable);
//imageButton.setImageResource(R.drawable.ic_camera);
}


/**
* 回调函数
* @param photoUri
*/
public void photoUriCallback(String picPath){

Log.i("@ EditUserActivity.java AAAAAAAAA", picPath);

//toDisplayPhoto(picPath);
try {
toDisplayPhoto(picPath);
} catch (Exception e) {
// TODO: handle exception
Log.i("EditUserActivity.java-line:107", "");
System.out.println(e);
e.printStackTrace();
}
}



}



SelectPhotoDialogFragment.java
package com.example.tracemap.fragment;

import com.example.tracemap.activity.EditUserActivity;

public class SelectPhotoDialogFragment extends DialogFragment implements OnClickListener {

public final static String TAG = TagDialogFragment.class.getSimpleName();

public static final int SELECT_PIC_BY_TACK_PHOTO = 1; // 使用照相机拍照获取图片
public static final int SELECT_PIC_BY_PICK_PHOTO = 2; // 使用相册中的图片
public static final String KEY_PHOTO_PATH = "photo_path"; // 从Intent获取图片路径的KEY

private String picPath; // 获取到的图片路径
private Uri photoUri;
private Intent lastIntent;

DialogCallback mCallback;
RelativeLayout bg;

private SelectPhotoDialogFragment(DialogCallback callback) {
this.mCallback = callback;
}

private static SelectPhotoDialogFragment mInstance;

public synchronized static SelectPhotoDialogFragment getInstance(DialogCallback callback) {
if (mInstance == null) {
mInstance = new SelectPhotoDialogFragment(callback);
}
return mInstance;
}

@SuppressLint("NewApi")
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.fragment_dialog_selectphoto, container, false);

initView(view);

return view;
}


@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
dialog.setCanceledOnTouchOutside(false);

dialog.setOnCancelListener(new OnCancelListener() {

@Override
public void onCancel(DialogInterface dialog) {
//
}
});
return dialog;
}


private void initView(View view){

Button btnTakePhoto = (Button) view.findViewById(R.id.btn_take_photo);
Button btnPickPhoto = (Button) view.findViewById(R.id.btn_pick_photo);

btnTakePhoto.setOnClickListener(this);
btnPickPhoto.setOnClickListener(this);
}

@Override
public void onClick(View v) {
switch (v.getId()) {

case R.id.btn_take_photo:
Log.i("AAAAAA", "拍照");
takePhoto();
break;
case R.id.btn_pick_photo:
Log.i("BBBBBB", "图库");
pickPhoto();
break;
default:break;
}
}


/**
* 拍照获取图片
*/
private void takePhoto() {

// 执行拍照之前,先检查SD卡是否存在
String SDState = Environment.getExternalStorageState();

if (SDState.equals(Environment.MEDIA_MOUNTED)) {

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

ContentValues values = new ContentValues();
photoUri = getActivity().getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, photoUri);

startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO);
} else {
Toast.makeText(getActivity(), "内存卡不存在", Toast.LENGTH_LONG).show();
}
}

/**
* 从相册中取图片
*/
private void pickPhoto() {

Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);

startActivityForResult(intent, SELECT_PIC_BY_PICK_PHOTO);
}


public interface DialogCallback {
public void onSuccess(Bundle data);
}


/**
* 获取图片的路径
*/
private void doPhoto(int requestCode, Intent data) {

if (requestCode == SELECT_PIC_BY_PICK_PHOTO) {
if (data == null) {
Toast.makeText(getActivity(), "选择图片文件出错", Toast.LENGTH_LONG).show();
return;
}
photoUri = data.getData();
if (photoUri == null) {
Toast.makeText(getActivity(), "选择图片文件出错", Toast.LENGTH_LONG).show();
return;
}
}


String[] pojo = { MediaStore.Images.Media.DATA };

Cursor cursor = getActivity().managedQuery(photoUri, pojo, null, null, null);

if (cursor != null) {
int columnIndex = cursor.getColumnIndexOrThrow(pojo[0]);
cursor.moveToFirst();
picPath = cursor.getString(columnIndex);

if(VERSION.SDK_INT < 14) {
cursor.close();
}
}

Log.i(TAG, "imagePath = " + picPath);

if (picPath != null
&& (picPath.endsWith(".png") || picPath.endsWith(".PNG")
|| picPath.endsWith(".jpg") || picPath.endsWith(".JPG"))) {

//将picPath传给EditUserActivity

EditUserActivity editUserActivity = new EditUserActivity();
editUserActivity.photoUriCallback(picPath);
} else {
Toast.makeText(getActivity(), "选择图片文件不正确", Toast.LENGTH_LONG).show();
}
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
if (resultCode == Activity.RESULT_OK) {
doPhoto(requestCode, data);
Log.i("CCCCC", "here!");
}
super.onActivityResult(requestCode, resultCode, data);
}

}







...全文
402 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
_zw 2015-09-01
  • 打赏
  • 举报
回复
问题已经找到,在SelectPhotoDialogFragment.java的第170行
EditUserActivity editUserActivity = new EditUserActivity();
这里实例化了多一个EditUserActivity ,导致控件看起来是一样的,但是实际上已经不是同一个Activity的控件了。T_T
_zw 2015-09-01
  • 打赏
  • 举报
回复
引用 1 楼 hjq2013 的回复:
ImageButton imageButton = (ImageButton)findViewById(R.id.header); 确认imageButton 不为空
是的,imageButton不为空。就不知道问题出现在哪里。无论怎么样我都修改不了它的背景。
baidu_29096973 2015-09-01
  • 打赏
  • 举报
回复
跟代码吧!!
Hare_ 2015-09-01
  • 打赏
  • 举报
回复
ImageButton imageButton = (ImageButton)findViewById(R.id.header); 确认imageButton 不为空
内容简介   《Android开发入门与实战》内容上涵盖了用Android开发的大部分场景,从Android基础介绍、环境搭建、SDK介绍、Market使用,到应用剖析、组件介绍、实例演示等方面。从技术实现上,讲解了5个Android平台下的完整综合实例及源代码分析,分别是RSS阅读器、基于Google Map的个人GPS、豆瓣网(Web 2.0)客户端、在线音乐播放器、手机信息查看助手。《Android开发入门与实战》注重对实际动手能力的指导,在遵循技术研发知识体系的严密性同时,在容易产生错误、不易理解的环节配以了翔实的开发情景截图,并将重要的知识点和开发技巧以“小实验”、“小提醒”、“小知识”、“注意”等的活泼形式呈现给读者。在程序实例的讲解方面,主要将实例安插在Android开发的精髓知识章节,这为初学者学习与实践结合提供了很好的指导。《Android开发入门与实战》配套有400多分钟的全程开发视频光盘,指导读者快速、无障碍地学通Android实战开发技术。《Android开发入门与实战》适合具备一定软件开发经验,想快速进入Android开发领域的程序员;具备一些手机开发经验的开发者和Android开发爱好者学习用书;也适合作为相关培训学校的Android培训教材。 目录 第1章 掀起你的盖头来——初识Android 1.1 认识Android 1.2 Android背景 1.2.1 Android的历史 1.2.2 Android的发展 1.3 我的Android我做主 1.3.1 开发基于Android平台的应用 1.3.2 参加Android开发者大赛 1.3.3 个人英雄主义再现——得到更多人的认可和尊重 1.3.4 获得应有的收益——AndroidMarket 1.4 真实体验——Android模拟器 1.4.1 模拟器概述 1.4.2 模拟器和真机的区别 1.4.3 模拟器使用注意事项 1.5 更上一层楼——加入Android开发社区 1.6 本章小结 第2章 工欲善其事 必先利其器——搭建Android开发环境 2.1 开发Android应用前的准备 2.1.1 Android开发系统要求 2.1.2 Android软件开发包 2.1.3 其他注意事项 2.2 Windows开发环境搭建 2.2.1 JDK、Eclipse、AndroidSDK软件安装 2.2.2 SDK的家在哪里——设定AndroidSDKHome 2.2.3 真的准备好了吗——开发环境验证 2.2.4 创建Android虚拟设备(AVD) 2.3 Linux一族——Ubuntu开发环境搭建 2.3.1 Java、Eclipse和ADT插件安装 2.3.2 设定AndroidSDKHome 2.4 MacOS一族——苹果开发环境搭建 2.5 本章小结 第3章 清点可用资本——AndroidSDK介绍 3.1 AndroidSDK基础 3.2 深入探寻AndroidSDK的密码 3.2.1 AndroidSDK目录结构 3.2.2 android.jar及内部结构 3.2.3 SDK文档及阅读技巧 3.2.4 先来热热身——AndroidSDK例子解析 3.2.5 SDK提供的工具介绍 3.3 Android典型包分析 3.3.1 开发的基石——AndroidAPI核心开发包介绍 3.3.2 拓展开发外延——Android可选API介绍 3.4 本章小结 第4章 赚钱的市场——AndroidMarket及应用发布 4.1 GoogleMarket产生背景与目的 4.2 体验“选货”的乐趣——在G1上体验Market的使用 4.3 Android开发活动及特色应用 4.3.1 开发应用的领域 4.3.2 AndroidMarket特色应用一览 4.4 你也可以做东家——申请Market账号 4.4.1 卖东西要先入伙——准备工作 4.4.2 入伙过程——申请 4.5 开张了——在Market上发布应用 4.5.1 发布时可能遇到的错误 4.5.2 卖东西也要签名——生成签名文件 4.5.3 打包、签名、发布应用 4.6 本章小结 第5章 千里之行始于足下——第一个应用HelloWorld 5.1 HelloWorld应用分析 5.1.1 新建一个Android工程 5.1.2 填写工程的信息 5.1.3 编程实现 5.1.4 运行项目 5.2 调试项目 5.2.1 设置断点 5.2.2 Debug项目 5.2.3 断点调试 5.3 本章小结 第6章 磨刀不误砍柴工——Android应用程序结构介绍 6.1 Android体系结构介绍 6.1.1 应用程序(Application) 6.1.2 应用程序框架(ApplicationFramework) 6.1.3 库(Libraries)和运行环境(RunTime) 6.2 Android应用程序组成 6.2.1 Activity介绍 6.2.2 BroadcastIntentReceiver介绍 6.2.3 Service介绍 6.2.4 ContentProvider介绍 6.3 Android应用工程文件组成 6.4 本章小结 第7章 良好的学习开端——Android基本组件介绍 7.1 第一印象很重要——界面UI元素介绍 7.1.1 视图组件(View) 7.1.2 视图容器组件(Viewgroup) 7.1.3 布局组件(Layout) 7.1.4 布局参数(LayoutParams) 7.2 我的美丽我做主——Android应用界面布局 7.2.1 实例操作演示 7.2.2 实例编程实现 7.3 不积跬步无以至千里——常用widget组件介绍 7.3.1 创建widget组件实例 7.3.2 按钮(Button)介绍与应用 7.3.3 文本框(TextView)介绍与应用 7.3.4 编辑框(EditText)介绍与应用 7.3.5 多项选择(CheckBox)介绍与应用 7.3.6 单项选择(RadioGroup)介绍与应用 7.3.7 下拉列表(Spinner)介绍与应用 7.3.8 自动完成文本(AutoCompleteTextView) 7.3.9 日期选择器(DatePicker)介绍与应用 7.3.10 时间选择器(TimePicker)介绍与应用 7.3.11 滚动视图(ScrollView)介绍与应用 7.3.12 进度条(ProgressBar)介绍与应用 7.3.13 拖动条(SeekBar)介绍与应用 7.3.14 评分组件(RatingBar)介绍与应用 7.3.15 图片视图(ImageView)介绍与应用 7.3.16 图片按钮(ImageButton)介绍与应用 7.3.17 切换图片(ImageSwitcher&Gallery) 7.3.18 网格视图(GridView)介绍与应用 7.3.19 标签(Tab)介绍与应用 7.4 友好的菜单——menu介绍与实例 7.4.1 实例操作演示 7.4.2 实例编程实现 7.5 Android应用的灵魂——Intent和Activity介绍与实例 7.5.1 实例操作演示 7.5.2 实例编程实现 7.6 用好列表,做好程序——列表(ListView)介绍与实例 7.6.1 实例程序演示 7.6.2 实例编程实现 7.7 友好地互动交流——对话框(Dialog)介绍与实例 7.8 温馨的提醒——Toast和Notification应用 7.8.1 实例操作演示 7.8.2 实例编程实现 7.9 本章小结 第8章 移动信息仓库——Android的数据存储操作 8.1 Android数据存储概述 8.2 轻轻地我保护——SharedPreferences存储 8.3 谁的文件,谁主宰——文件存储 8.4 打造自己的数据库存储——SQLite存储方式 8.4.1 Android对数据库操作 8.4.2 完整地操作数据库——日记本实例 8.5 我的数据你来用——ContentProvider介绍 8.5.1 初识ContentProvider 8.5.2 使用ContentProvider读取系统数据 8.5.3 使用ContentProvider操作数据日记本实例 8.6 再学一招——网络存储 8.7 本章小结 第9章 我来“广播”你的“意图”——Intent和Broadcast面对面 9.1 Android应用程序的核心——Intent 9.1.1 Intent基础 9.1.2 用Intent启动一个新的Activity 9.1.3 Intent详细讲解 9.1.4 Android解析Intent实现 9.2 用广播告诉你——利用Intent来广播(BroadCast)事件 9.2.1 实现Android的广播事件 9.2.2 BroadCastReceiver介绍 9.3 应用实例详解 9.3.1 程序操作演示 9.3.2 实例编程实现 9.4 本章小结 第10章 一切为用户服务——Service应用实例 10.1 认识Service 10.2 使用Service 10.3 Service的生命周期 10.4 实例学习Service 10.4.1 精彩实例一——定时提醒 10.4.2 精彩实例二——音乐播放器 10.5 本章小结 第11章 循序渐进——开发Android应用的基本步骤 11.1 兵马未动粮草先行——应用规划及架构设计 11.2 应用开发步骤 11.2.1 界面设计始终是第一位——实现UI 11.2.2 必备的动力源泉——数据操作和存储 11.2.3 华丽转身——实现多页面跳转 11.2.4 始终为用户做好服务——增加Service 11.2.5 细节决定成败——完善应用细节 11.3 成功就在眼前——应用测试和发布 11.3.1只欠东风——应用测试 11.3.2 可以赚钱了——发布到AndroidMarket 11.4 本章小结 第12章 Android综合案例一——RSS阅读器实例 12.1 RSS介绍 12.1.1 RSS基础 12.1.2 RSS的历史 12.1.3 RSS语法介绍 12.2 SAX介绍 12.2.1 SAX基础 12.2.2 使用SAX的作用 12.2.3 怎样使用SAX 12.3 RSS阅读器设计 12.3.1 RSS阅读器功能设计 12.3.2 RSS阅读器UI和交互流程设计 12.4 RSS阅读器的实现 12.4.1 程序实体解析 12.4.2 实现一个自己的ContentHandler 12.4.3 Activity的实现 12.5 本章小结 第13章 Android综合案例二——基于GoogleMap开发个人移动地图 13.1 项目UI规划 13.2 数据存储实现 13.2.1 设计数据库及表结构 13.2.2 设计SharePreference存储 13.3 项目实现流程 13.3.1 创建项目工程 13.3.2 项目各功能及界面实现 13.3.3 实现数据存取 13.3.4 实现Service 13.3.5 应用流程整体实现 13.3.6 后续开发完善 13.4 项目程序演示 13.5 项目程序签名、打包和发布 13.6 本章小结 第14章 Android综合案例三——基于Android的豆瓣网(Web2.0)移动客户端开发 14.1 关于豆瓣网和豆瓣网API 14.1.1 豆瓣网介绍 14.1.2 豆瓣网API介绍 14.1.3 豆瓣网API认证 14.1.4 豆瓣网API快速入门 14.1.5 豆瓣网APIJava库介绍 14.2 豆瓣网(Web2.0)客户端设计 14.2.1 客户端功能规划设计 14.2.2 UI和交互流程设计 14.2.3 数据存储设计 14.3 豆瓣网(Web2.0)客户端实现 14.3.1 申请APIKey 14.3.2 Activity实现 14.4 本章小结 第15章 Android综合案例四——在线音乐播放器 15.1 关于YOBO和YOBOAPI 15.1.1 YOBO简介 15.1.2 YOBO功能特点 15.1.3 YOBOAPI介绍 15.2 在线播放器架构设计 15.2.1 在线播放器功能规划设计 15.2.2 在线播放器UI设计 15.2.3 在线播放器数据存储设计 15.3 在线播放器的编程实现 15.3.1 申请APIKey 15.3.2 基础功能实现 15.3.3 实现Activity 15.3.4 实现Service 15.3.5 后续开发展望 15.4 在线音乐播放器应用演示 15.5 在线音乐播放器应用打包、签名和发布 15.6 本章小结 第16章 Android综合案例五——手机信息查看助手 16.1 手机信息查看助手功能规划和可行性分析 16.1.1 手机信息查看助手功能规划 16.1.2 手机信息查看助手可行性分析 16.2 手机信息查看助手功能实现 16.2.1 手机信息查看助手主界面 16.2.2 查看系统信息实现 16.2.3 查看硬件信息 16.2.4 查看软件信息 16.2.5 获取运行时信息 16.2.6 文件浏览器 16.2.7 项目的细节完善 16.3 手机信息查看助手功能展望 16.4 项目的打包、签名和发布 16.5 本章小结 第17章 芝麻开门——Android底层开发和移植概述 17.1 Android原始码下载 17.2 实机测试 17.2.1 NeoFreeRunner介绍 17.2.2 烧录androidfs.jffs2 17.3 Android移植技术概论 17.3.1 Android底层技术的重要性 17.3.2 Android移植项目介绍 17.3.3 Android的技术优点 ·收起全部<< 前言   随着3G的到来,无线带宽越来越高,使得更多内容丰富的应用程序布置在手机上成为可能,如视频通话、视频点播、移动互联网冲浪、在线看书/听歌、内容分享等。为了承载这些数据应用及快速部署,手机功能将会越来越智能,越来越开放,为了实现这些需求,必须有一个好的开发平台来支持,在此由Google公司发起的OHA联盟走在了业界的前列,2007年11月推出了开放的Android平台,任何公司及个人都可以免费获取到源代码及开发SDK。由于其开放性和优异性,Android平台得到了业界广泛的支持,其包括各大手机厂商和著名的移动运营商等。继2008年9月第一款基于Android平台的手机G1发布之后,预计三星、摩托罗拉、索爱、LG、华为等公司都将推出自Gflg~Android平台的手机,国移动也将联合各手机厂商共同推出基于Android平台的OPhone。按目前的发展态势,我们有理由相信,Android平台能够在短时间内跻身智能手机开发平台的前列。   由于Android平台被推出的时间才一年左右,了解Android平台软件开发技术的程序员还不多,如何迅速地推广和普及Android平台软件开发技术,让越来越多的人参与到Android应用的开发,是整个产业链都在关注的一个话题。本书作者较早就从事Android的研究与开发工作,为了帮助开发者更快地进入Android开发行列,他们不辞辛劳地编写了Android开发教程-《Google Android开发入门与实战》。本书系统讲解了Android软件开发的基础知识,图文并茂地帮助读者学习和掌握SDK、开发流程以及常用的API等。书以讲述实战实例为导向,用一个个典型应用生动地引领读者进行项目开发实践。作为一本既及时、又翔实、理论实践相结合的教程,《Google Android开发入门与实战》一书很值得入门者阅读。   值得一提的是,书开发实例很有创意,将传统互联网的内容/服务与移动平台紧密结合起来,如书的豆瓣网客户端、在线音乐播放器等应用,都体现了移动互联网应用所需的创新精神及良好的用户体验理念,这个设计思路很值得大家去思考和学习。   最后,祝广大开发者的技术日益精进,早日开始Android开发之旅,赶上移动互联网的第一班车,共赢国3G未来!

80,471

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧