Android作为一种流行的移动操作系统,拥有庞大的开发社区和丰富的应用资源。掌握Android编程不仅需要熟悉其API和开发工具,还需要通过实战来积累经验。本文将深入解析50个经典Android编程实例,帮助读者提升实战能力。
实例1:创建简单的Android应用
1.1 目标
创建一个简单的“Hello World”应用,了解Android应用的基本结构和开发流程。
1.2 实现代码
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView = findViewById(R.id.textView);
textView.setText("Hello World");
}
}
1.3 代码解析
MainActivity继承自AppCompatActivity,这是一个抽象类,用于简化Activity的创建和生命周期管理。onCreate方法是Activity的入口,用于初始化界面和组件。setText方法用于设置TextView的文本内容。
实例2:布局文件的使用
2.1 目标
学习如何使用布局文件来设计用户界面。
2.2 实现代码
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World"
android:layout_centerInParent="true"/>
</RelativeLayout>
2.3 代码解析
- 使用XML定义布局文件,通过相对布局(
RelativeLayout)将TextView居中显示。 android:id属性用于设置组件的唯一标识。android:layout_centerInParent属性用于设置组件相对于父布局居中。
实例3:按钮点击事件
3.1 目标
学习如何处理按钮点击事件。
3.2 实现代码
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "Button Clicked", Toast.LENGTH_SHORT).show();
}
});
}
}
3.3 代码解析
- 使用
setOnClickListener方法为按钮设置点击事件监听器。 - 在监听器的
onClick方法中,使用Toast显示提示信息。
实例4:列表视图的使用
4.1 目标
学习如何使用列表视图展示数据。
4.2 实现代码
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView listView = findViewById(R.id.listView);
String[] items = {"Item 1", "Item 2", "Item 3"};
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, items);
listView.setAdapter(adapter);
}
}
4.3 代码解析
- 使用
ListView组件展示数据列表。 - 创建
ArrayAdapter来适配数据,并将适配器设置给列表视图。
实例5:Activity生命周期
5.1 目标
了解Activity的生命周期,以便在适当的时间处理事件。
5.2 实现代码
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// onCreate
}
@Override
protected void onStart() {
super.onStart();
// onStart
}
@Override
protected void onResume() {
super.onResume();
// onResume
}
@Override
protected void onPause() {
super.onPause();
// onPause
}
@Override
protected void onStop() {
super.onStop();
// onStop
}
@Override
protected void onDestroy() {
super.onDestroy();
// onDestroy
}
}
5.3 代码解析
onCreate方法用于初始化界面和组件。onStart、onResume、onPause、onStop和onDestroy方法分别表示Activity的生命周期状态。
实例6:Intent的使用
6.1 目标
学习如何使用Intent在不同Activity之间进行数据传递。
6.2 实现代码
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
}
});
}
}
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
TextView textView = findViewById(R.id.textView);
textView.setText(getIntent().getStringExtra("key"));
}
}
6.3 代码解析
- 使用
Intent创建一个从MainActivity到SecondActivity的跳转。 - 在
SecondActivity中获取从MainActivity传递过来的数据。
实例7:SharedPreferences的使用
7.1 目标
学习如何使用SharedPreferences存储和读取数据。
7.2 实现代码
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SharedPreferences sharedPreferences = getSharedPreferences("MyPrefs", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("key", "Hello World");
editor.apply();
}
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SharedPreferences sharedPreferences = getSharedPreferences("MyPrefs", MODE_PRIVATE);
String value = sharedPreferences.getString("key", "");
TextView textView = findViewById(R.id.textView);
textView.setText(value);
}
}
7.3 代码解析
- 使用
SharedPreferences存储和读取数据。 apply方法用于异步提交修改。
实例8:数据库的使用
8.1 目标
学习如何使用SQLite数据库存储和查询数据。
8.2 实现代码
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SQLiteDatabase database = openOrCreateDatabase("mydatabase.db", MODE_PRIVATE, null);
database.execSQL("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)");
ContentValues values = new ContentValues();
values.put("name", "John Doe");
database.insert("users", null, values);
database.close();
}
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SQLiteDatabase database = openOrCreateDatabase("mydatabase.db", MODE_PRIVATE, null);
Cursor cursor = database.query("users", new String[]{"name"}, null, null, null, null, null);
if (cursor.moveToFirst()) {
String name = cursor.getString(cursor.getColumnIndex("name"));
TextView textView = findViewById(R.id.textView);
textView.setText(name);
}
cursor.close();
database.close();
}
}
8.3 代码解析
- 使用
SQLiteDatabase创建和操作数据库。 - 使用
execSQL执行SQL语句创建表。 - 使用
insert方法插入数据。 - 使用
query方法查询数据。
实例9:网络请求
9.1 目标
学习如何使用HttpURLConnection进行网络请求。
9.2 实现代码
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url = new URL("http://example.com");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.connect();
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
InputStream inputStream = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
runOnUiThread(new Runnable() {
@Override
public void run() {
TextView textView = findViewById(R.id.textView);
textView.setText(response.toString());
}
});
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
}
9.3 代码解析
- 使用
URL和HttpURLConnection发送GET请求。 - 使用
connect方法连接到服务器。 - 使用
getInputStream获取响应数据。 - 使用
runOnUiThread将结果更新到UI线程。
实例10:JSON解析
10.1 目标
学习如何解析JSON数据。
10.2 实现代码
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String json = "{\"name\":\"John Doe\",\"age\":30}";
try {
JSONObject jsonObject = new JSONObject(json);
String name = jsonObject.getString("name");
int age = jsonObject.getInt("age");
runOnUiThread(new Runnable() {
@Override
public void run() {
TextView textView = findViewById(R.id.textView);
textView.setText("Name: " + name + ", Age: " + age);
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
}
10.3 代码解析
- 使用
JSONObject解析JSON数据。 - 使用
getString和getInt方法获取数据。
实例11:图片加载
11.1 目标
学习如何加载和显示图片。
11.2 实现代码
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView imageView = findViewById(R.id.imageView);
String imageUrl = "http://example.com/image.jpg";
Picasso.with(this).load(imageUrl).into(imageView);
}
}
11.3 代码解析
- 使用
Picasso库加载和显示图片。
实例12:权限请求
12.1 目标
学习如何请求和使用运行时权限。
12.2 实现代码
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_CODE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_CODE);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission granted
} else {
// Permission denied
}
}
}
}
12.3 代码解析
- 使用
ContextCompat.checkSelfPermission检查权限。 - 使用
ActivityCompat.requestPermissions请求权限。 - 在
onRequestPermissionsResult方法中处理权限请求结果。
实例13:服务的使用
13.1 目标
学习如何创建和使用服务。
13.2 实现代码
public class MyService extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
new Thread(new Runnable() {
@Override
public void run() {
// 执行后台任务
}
}).start();
return START_STICKY;
}
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent(this, MyService.class);
startService(intent);
}
}
13.3 代码解析
MyService继承自Service,用于执行后台任务。onBind方法返回null,因为服务不提供绑定。onStartCommand方法用于启动服务,并返回START_STICKY表示服务在停止后会尝试重新启动。
实例14:内容提供者的使用
14.1 目标
学习如何创建和使用内容提供者。
14.2 实现代码
public class MyContentProvider extends ContentProvider {
@Override
public boolean onCreate() {
return true;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
// 查询数据
return null;
}
@Override
public String getType(Uri uri) {
return null;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
// 插入数据
return null;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
// 删除数据
return 0;
}
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
// 更新数据
return 0;
}
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ContentResolver contentResolver = getContentResolver();
Uri uri = Uri.parse("content://com.example.provider/mytable");
Cursor cursor = contentResolver.query(uri, new String[]{"name"}, null, null, null);
if (cursor.moveToFirst()) {
String name = cursor.getString(cursor.getColumnIndex("name"));
TextView textView = findViewById(R.id.textView);
textView.setText(name);
}
cursor.close();
}
}
14.3 代码解析
MyContentProvider继承自ContentProvider,用于提供数据。query、insert、delete和update方法分别用于查询、插入、删除和更新数据。
实例15:广播接收器的使用
15.1 目标
学习如何创建和使用广播接收器。
15.2 实现代码
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 处理广播
}
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
IntentFilter filter = new IntentFilter("com.example.broadcast");
registerReceiver(new MyReceiver(), filter);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(new MyReceiver());
}
}
15.3 代码解析
MyReceiver继承自BroadcastReceiver,用于接收广播。registerReceiver和unregisterReceiver分别用于注册和注销广播接收器。
实例16:通知的使用
16.1 目标
学习如何创建和使用通知。
16.2 实现代码
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Notification notification = new Notification.Builder(this)
.setContentTitle("Notification Title")
.setContentText("Notification Content")
.setSmallIcon(R.drawable.ic_notification)
.build();
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
notificationManager.notify(1, notification);
}
}
16.3 代码解析
- 使用
Notification.Builder创建通知。 - 使用
NotificationManager显示通知。
实例17:适配器视图的使用
17.1 目标
学习如何使用适配器视图展示数据。
17.2 实现代码
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RecyclerView recyclerView = findViewById(R.id.recyclerView);
String[] items = {"Item 1", "Item 2", "Item 3"};
MyAdapter adapter = new MyAdapter(items);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
}
}
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private String[] items;
public MyAdapter(String[] items) {
this.items = items;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_view, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.textView.setText(items[position]);
}
@Override
public int getItemCount() {
return items.length;
}
public static class ViewHolder extends RecyclerView.ViewHolder {
TextView textView;
public ViewHolder(View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.textView);
}
}
}
17.3 代码解析
- 使用
RecyclerView组件展示数据列表。 - 创建
MyAdapter适配器来适配数据。 - 使用
LinearLayoutManager设置布局管理器。
