目录
1.Intent显示跳转
(1)在manifest.xml中注册活动并为活动命名,在要进行跳转的地方写intent
MainActivity.java
Intent intent = new Intent(MainActivity.this,ListActivity.class);
startActivity(intent);
AndroidManifest.xml
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".ListActivity"/> // 目标活动
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> // 原活动
</intent-filter>
</activity>
</application>
(2)发送方利用intent传递参数,借助bundle来封装数据
Intent intent = new Intent();
intent.setClass(Login.this, MainActivity.class);
Bundle bundle = new Bundle();
bundle.putSerializable("user", user); //不同的数据有对应的put方法
intent.putExtras(bundle); //将bundle封装在intent内
this.startActivity(intent);
接收方利用intent获取bundle
Bundle bundle = getIntent().getExtra();
2.访问sqlite
(1)创建数据库访问类
package com.example.studentinfotry;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;
import androidx.annotation.Nullable;
public class MyDBOpenHelper extends SQLiteOpenHelper {
private static final String DBNAME = "student.db"; //数据库名
private static final int VERSION = 1;
public MyDBOpenHelper(@Nullable Context context) {
super(context, DBNAME, null, VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) { //创建表
db.execSQL("create table stu_info(id integer primary key autoincrement," +
"sno varchar(10)," +
"name varchar(10))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
(2)活动里声明并使用数据库
package com.example.studentinfotry;
import androidx.appcompat.app.AppCompatActivity;
import android.content.ContentValues;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
private MyDBOpenHelper mhelper ;
private SQLiteDatabase db ; // 利用SQLiteDatabase句柄操作数据库
@Override
protected void onCreate ( Bundle savedInstanceState ) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
btnAdd();
}
private void initView() { // 初始化数据库
btn_oneadd = findViewById(R.id.create_database);
mhelper = new MyDBOpenHelper(MainActivity.this);
db = mhelper.getWritableDatabase(); //写数据库
}
private void btnAdd(){ // 点击事件插入数据
btn_oneadd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ContentValues values = new ContentValues();
values.put("sno",edit_onesno.getText().toString());
values.put("name",edit_onename.getText().toString());
db.insert("stu_info",null,values);
Toast.makeText(MainActivity.this,"添加成功",Toast.LENGTH_SHORT).show();
}
});
}
}
3.显示数据库内容
package com.example.studentinfotry;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
public class ListActivity<ListViewlistview> extends AppCompatActivity {
ArrayAdapter<String>adapter; //适配器
List<String>Studentlist=new ArrayList<>(); //学生数组列表
private MyDBOpenHelper mhelper ; // 数据库访问对象
private SQLiteDatabase db ; // 数据库使用句柄
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listview);
ListView listview=findViewById(R.id.lv); // 绑定xml界面
adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,Studentlist); // 配置适配器
listview.setAdapter(adapter); // 界面按照适配器的方式显示数据,适配器以一定格式显示数组列表内的数据
mhelper = new MyDBOpenHelper(ListActivity.this);
db = mhelper.getReadableDatabase(); // 以读的方式访问数据库
Cursor cursor=db.query("stu_info",null,
null,null,
null,null,null); //数据库访问游标
if(cursor.moveToFirst()){ //当数据库内有数据时执行以下内容
do {
@SuppressLint("Range")String id = cursor.getString(cursor.getColumnIndex("id"));
@SuppressLint("Range")String sno = cursor.getString(cursor.getColumnIndex("sno"));
@SuppressLint("Range")String name = cursor.getString(cursor.getColumnIndex("name"));
Studentlist.add("序号:" + id + " 学号:" + sno + " 姓名:" + name); //向数组中插入字符串,代表一项
}while (cursor.moveToNext()); //移动游标到下一个位置,直到游标指向NULL结束
}
adapter.notifyDataSetChanged(); //使用notifidatasetchanged来刷新ListView
cursor.close();
}
}
4.toast修改
Toast toast;
//初始化toast显示内容
toast = Toast.makeText(getApplicationContext(),
"Hello world!", Toast.LENGTH_LONG);
//设置toast显示位置
toast.setGravity(Gravity.CENTER, 1666, -1000);
//设置toast显示样式
LinearLayout toastView = (LinearLayout) toast.getView();
//插入要显示的图片
ImageView imageCodeProject = new ImageView(getApplicationContext());
imageCodeProject.setImageResource(R.drawable.icon);
toastView.addView(imageCodeProject, 0);
//显示
toast.show();
5.多线程执行指定任务
(1)创建Handler
当Android
应用程序创建的时候,系统会给每一个进程提供一个Looper
,Looper
是一个死循环,它内部维护一个消息队列,Looper
不停的从消息队列中取Message
,取到的消息就发送给handler
,最后Handler
根据接收的消息去修改UI
等。
//创建Handler消息处理机制
handler = new Handler(){
@Override
public void handleMessage(@NonNull Message msg){
//需要处理的信息
int index;
if(msg.what==0x101){ //当消息的标识为 0x101时执行对应逻辑
//要处理的流程
}
super.handleMessage(msg);
}
};
(2)创建线程,线程内的handler是主线程内声明并初始化的handler
//创建线程
Thread t = new Thread(new Runnable() {
@Override
public void run() {
int index=0;
while(!Thread.currentThread().isInterrupted()){
index = new Random().nextInt(position.length);
Message m = handler.obtainMessage();
m.what=0x101; //设置消息标志
m.arg1=index; //保存地鼠位置的索引值
handler.sendMessage(m); //发送消息通知Handler处理
try{
Thread.sleep(new Random().nextInt(500)+500);//设置休眠
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
t.start();