Android+java程序开发笔记|持续更新

—————————————————————————————————Android板块——————————————————————————————————————
//设置编辑框光标位置
editText.setSelection(username.length());
//https SSL
android:usesCleartextTraffic="true"
//关闭标题栏 android:theme="@style/Theme.AppCompat.Light.NoActionBar">

 //获取文字id状态
TextView lblTitle=(TextView)findViewById(R.id.a1);
//获取文本信息
String name=liblTitle.getText().toString();
//修改文字内容
lblTitle.setText("这是显示的内容");
 
 
//获取图片id状态
ImageView b=(ImageView)findViewById((R.id.a2));
//修改图片
b.setImageDrawable(getDrawable(R.drawable.huanqi)); 

manifests界面添加内容: 
<activity android:name=".MainActivity2"> 
<intent-filter> 
<action android:name="android.intent.action.MY"/> 
<category android:name="android.intent.category.DEFAULT"/> </intent-filter> 
</activity> 

//等待3秒跳转界面 
final Intent intent = new Intent(MainActivity.this, Main2Activity.class); 
Timer timer = new Timer(); 
TimerTask task = new TimerTask() 
{     
@Override public void run() 
{         
startActivity(intent);     
} 
}; 
timer.schedule(task, 3000); 
//重复延迟跳转
timer.schedule(task,0,3000);
//跳转后结束当前界面 finish();     
//提示 
Toast.makeText(getApplicationContext(),"哈哈", Toast.LENGTH_SHORT); 
Toast toast= Toast.makeText(getApplicationContext(),"哈哈", Toast.LENGTH_SHORT);       
toast.show(); 
//判断 当dlzh1等于25时执行 
if (dlzh1.equals("25")) 
{
} 
DriverManager类:依据数据库的不同管理jdbc驱动       
Connection接口:负责连接数据库并担任传送数据的任务。       
Statement 接口:友Connection产生,负责执行sql语句。       
ResultSet接口:负责保存Statement执行后所产生的查询结果。 
//隐藏标题栏状态栏 requestWindowFeature(Window.FEATURE_NO_TITLE);
//隐藏标题栏 
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
//隐藏状态栏 //放在setContentView(R.layout.activity_main3);前面 //限制输入内容只能为:
android:digits="0123456789qwertyuioplkjhgfdsazxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM" 
//布局显示
Visibility final TextView textView2= (TextView)findViewById(R.id.text2); 
int a=textView2.getVisibility(); 
if (a==8) 
{ 
textView2.setVisibility(View.VISIBLE); 
} 
else 
{ 
textView2.setVisibility(View.GONE); 
} 权限 
//因特网 
<uses-permission android:name="android.permission.INTERNET" /> 
//移动数据 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
//WIFI数据 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

//修改控件长度
ViewGroup.LayoutParams layoutParams=linearLayout.getLayoutParams();
layoutParams.width=100;
linearLayout.setLayoutParams(layoutParams);

//FrameLayout frameLayout
//frameLayout.getChildCount()获取frameLayout有多少个
// frameLayout.getChildAt(i)获取frameLayout的view
for (int i=0;i<frameLayout.getChildCount();i++){
    frameLayout.getChildAt(i).setVisibility(View.GONE);
}
—————————————————————————————————VideoView类[VideoView使用板块]——————————————————————————————————————
int getCurrentPosition():获取当前播放的位置。 
int getDuration():获取当前播放视频的总长度。 
isPlaying():当前VideoView是否在播放视频。 
void pause():暂停 void seekTo(int msec):从第几毫秒开始播放。 
void resume():重新播放。 
void setVideoPath(String path):以文件路径的方式设置VideoView播放的视频源。 
void setVideoURI(Uri uri):以Uri的方式设置VideoView播放的视频源,可以是网络Uri或本地Uri。 
void start():开始播放。 void stopPlayback():停止播放。 
setMediaController(MediaController controller):设置MediaController控制器。 setOnCompletionListener(MediaPlayer.onCompletionListener l):监听播放完成的事件。 setOnErrorListener(MediaPlayer.OnErrorListener l):监听播放发生错误时候的事件。 setOnPreparedListener(MediaPlayer.OnPreparedListener l)::监听视频装载完成的事件。
—————————————————————————————————XML类[XML使用板块]——————————————————————————————————————
使用XmlPullParser解析xml数据: 
pullParser.setInput(xml, "UTF-8");给pull解析器一个输入流数据。
int eventType = pullParser.getEventType();获取当前事件类型。
while (eventType != XmlPullParser.END_DOCUMENT) 比对当前事件类型是否为xml文档中的"END_DOCUMENT",若“是”则结束解析。
eventType = pullParser.next();顺移当前解析器的指针。
case XmlPullParser.START_TAG:当解析遇到元素的开始标识时,判断具体是哪个元素,获取所需的数据。
case XmlPullParser.END_TAG:当解析遇到元素的结束标识时,判断是否为一个完整数据的结束标识,若“是”则打包一条数据。
—————————————————————————————————SQLiteOpenHelper[SQLite使用板块]——————————————————————————————————————
package com.android.xuexi2;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
//创建类SQLiteHelperSQLiteOpenHelper
public class SQLiteHelper extends SQLiteOpenHelper {
//创建无参
    public SQLiteHelper(Context context){
        super(context,"bxg.db",null,1);
    }
//创建onCreate方法用于创建数据表
    @Override
    public void onCreate(SQLiteDatabase db) {
//执行SQL语句创建命令
        db.execSQL("CREATE TABLE IF NOT EXISTS userinfo(_id INTEGER PRIMARY KEY AUTOINCREMENT,userName VARCHAR,nickName VARCHAR,sex VARCHAR,signature VARCHAR)");

    }
//更新数据表版本
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//执行SQL版本更新语句
        db.execSQL("DROP TABLE IF EXISTS userinfo);
        onCreate(db);
    }
}

//数据库版本号  private static final int DATABASE_VERSION = 1;  
//作用:更新数据库表结构 //调用时机:数据库版本发生变化的时候回调(取决于数据库版本) 
// 创建SQLiteOpenHelper子类对象的时候,必须传入一个version参数 
//该参数就是当前数据库版本, 只要这个版本高于之前的版本, 就会触发这个onUpgrade()方法,
如下面代码 @Override       
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
{           
//使用SQL的ALTER语句         
String sql = "alter table person add sex varchar(8)";           
db.execSQL(sql);       
}   
//参数说明:  
// db : 数据库  
//oldVersion : 
旧版本数据库  
//newVersion : 新版本数据库  
//注意:这里的删除等操作必须要保证新的版本必须要比旧版本的版本号要大才行。
[即 Version 2.0 > Version 1.0 ] 所以这边我们不需要对其进行操作。

另一页操作
SQLiteOpenHelper sqLiteOpenHelper = new SQLiteHelper(this);
sqLiteOpenHelper.getReadableDatabase();//获取数据库.db文件的地址
//创增删改
sqLiteOpenHelper.getReadableDatabase().execSQL(sql)
//查询数据
Cursor cursor = sqLiteOpenHelper.getReadableDatabase().rawQuery(sql);
while (cursor.moveToNext()) {
   String abc = cursor.getString(cursor.getColumnIndex("panduan"));
System.out.println(abc);
}
—————————————————————————————————按键事件——————————————————————————————————————
按键的常用事件:
 if(keyCode==KeyEvent.KEYCODE_BACK){//返回键
 }
 if(keyCode==KeyEvent.KEYCODE_ALT_LEFT){//调音键加
 }
 if(keyCode==KeyEvent.KEYCODE_ALT_RIGHT){//调音键减
 }
 if(keyCode==KeyEvent.KEYCODE_HOME){//主界面键
 }
 if(keyCode==KeyEvent.KEYCODE_MENU){//菜单键
 }

KeyEvent类
 Android.View.KeyEvent类中定义了一系列的常量和方法,用来描述Android中的按键事件。
 和返回键有关的常量和方法有。
 KeyEvent.KEYCODE_BACK: 表示key类型为返回键
 KeyEvent.ACTION_DOWN:表示事件为按下key,如果一直按住不放,则会不停产生此事件。
 KeyEvent.ACTION_UP:表示事件为为放开key,一次点击key过程只会调用一次。
 public final int getKeyCode():获取此事件对应的key类型。
 public final int getAction():获取此事件对应的事件类型
//获得系统的时间,单位为毫秒,转换为妙         
long exittime = System.currentTimeMillis();
protected long exittime;
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode==KeyEvent.KEYCODE_BACK&&event.getAction()==KeyEvent.ACTION_DOWN)
        {
            System.out.println(exittime);
            System.out.println(System.currentTimeMillis());
            if ((System.currentTimeMillis()-exittime)>2000)
            {
                Toast.makeText(getApplication(),"再按一次退出",Toast.LENGTH_SHORT).show();
                exittime=System.currentTimeMillis();
            }
            else
            {
                finish();
            }
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
—————————————————————————————————Intent跳转传值方法使用——————————————————————————————————————
//跳转界面 
Intent intent=new Intent(MainActivity.this,Main2Activity.class);
startActivity(intent); 
//隐式跳转 
Intent intent=new Intent("android.intent.action.MY"); 
startActivity(intent); 
//选择性隐式跳转
Intent intent=new Intent("android.intent.action.MY"); 
intent.setAction(Intent.ACTION_VIEW); 
intent.setData(Uri.parse("https://www.baidu.com")); 
startActivity(intent); 

//onActivityResult回调事件,传值跳转方法使用
startActivityForResult(new Intent(LoginActivity.this,RegisterActivity.class),1);
由LoginActivity界面跳转至RegisterActivity界面并将RegisterActivity界面值设置为1,对应onActivityResult方法requestCode=1

Intent back = new Intent();
back.putExtra("username", editText.getText().toString());
setResult(RESULT_OK, back);
由RegisterActivity界面传值username给LoginActivity界面,先new Intent()方法,并将id为username的值用putExtra方法写入Intent
setResult(RESULT_OK, back);确认返回数据,对应的int数据会递交给resultCode
onActivityResult方法中Intent data接收Intent数据"username", editText.getText().toString(),对应的data1数据会递交给Intent data

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (data!=null)
    {
     String username=data.getStringExtra("username");
     if (!TextUtils.isEmpty(username))
     {
         editText.setText(username);

     }
    }
}




//第二种传值方法
第一页
Intent intent = new Intent();
                 intent.putExtra("test","asdf");
                 intent.setClass(MainActivity.this,Demo1Activity.class);
                 startActivity(intent);
第二页接收
 String stringExtra = getIntent().getStringExtra("test");

—————————————————————————————————SharedPreferences方法使用——————————————————————————————————————
//地址:/data/data/com.android.xuexi2/shared_prefs
SharedPreferences sp = getSharedPreferences("loginInfo", MODE_PRIVATE);//创建的文件loginInfo.xml
SharedPreferences.Editor editor = sp.edit();//获取编辑器
editor.putString(userName, md5Psw);//写入用户名密码
editor.commit();//提交修改

//对接loginInfo.xml,获取username为ad123的加密密码并输出
SharedPreferences sp = getSharedPreferences("loginInfo", MODE_PRIVATE);//获取文件
String spPsw = sp.getString("ad123", null);//获取用户为ad123的密码
System.out.println(spPsw);//输出密码

Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。
MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;
MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。
—————————————————————————————————滑动窗体——————————————————————————————————————
//滑动窗体
滑动窗体使用控件:<androidx.viewpager.widget.ViewPager>
 ViewPager viewPager = findViewById(R.id.hd);
 List<View> views = new ArrayList<View>();
 LayoutInflater layoutInflater = LayoutInflater.from(getApplicationContext());

 View view1 = layoutInflater.inflate(R.layout.activity_main2,null);
 View view2 = layoutInflater.inflate(R.layout.activity_main3,null);
 views.add(view1);
 views.add(view2);

//执行GuidPageAdapter.java中的方法
GuidPageAdapter guidPageAdapter = new GuidPageAdapter(views);
 viewPager.setAdapter(guidPageAdapter);
//对指定控件进行操作时添加view1
TextView textView= (TextView)view1.findViewById(R.id.text1);
//点击跳转切换界面
viewPager.setCurrentItem(1);

//GuidPageAdapter.java文件内容
package com.android.huadong;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;
import java.util.List;
public class GuidPageAdapter extends PagerAdapter {
    List<View> views;
    public  GuidPageAdapter(List<View> views) {
        this.views = views;
    }
    @Override
    //获取当前窗体界面数
    public int getCount() {
        return views.size();
    }
    @Override
    //判断是否由对象生成界面
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        return view==object;
    }
    @Override
    //使从ViewGroup中移出当前View
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        ((ViewPager)container).removeView(views.get(position));
    }
    @NonNull
    @Override
    //返回一个对象,这个对象表明了PagerAdapter适配器选择哪个对象放在当前的ViewPager中
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        ((ViewPager)container).addView(views.get(position));
        return views.get(position);
    }
}
—————————————————————————————————JAVA板块——————————————————————————————————————
//线程 t.start()是执行此线程
Thread t = new Thread(new Runnable(){
    public void run(){
      
    }});
t.start();
//获取线程名称
String name = Thread.currentThread().getName();

—————————————————————————————————加密板块——————————————————————————————————————
package com.android.xuexi2;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class md5Util {
        public static String md5(String text){
            MessageDigest digest = null;
            try {
                digest = MessageDigest.getInstance( "md5" );
                byte[] result = digest.digest(text.getBytes( ));StringBuilder sb = new StringBuilder();
                for(byte b : result){
                    int number = b & 0xff;
                    String hex = Integer.toHexString(number);if(hex.length() == 1){
                        sb.append("0" + hex);}else{
                        sb.append (hex);
                    }
                }
                return sb.toString();
            }catch (NoSuchAlgorithmException e){
                e.printStackTrace();
                return "";
            }
        }
    }







—————————————————————————————————异常抛出板块——————————————————————————————————————
2.1 java.lang.NullPointerException

空指针异常,一般是对象未创建或者不存在造成的。

2.2 ava.lang.ClassNotFoundException

类异常,一般是类不存在,排查的时候注意是不是类名称写错或者路径搞错了

2.3 java.lang.ArrayIndexOutOfBoundsException

下标越界异常,一般出现在数组或集合的操作过程中

2.4 java.lang.IllegalArgumentException

方法参数错误

2.5 java.lang.IllegalAccessException

没有访问权限,一般是类的权限访问出问题了

2.6 ArithmeticExecption

算术异常

2.7 ClassCastException

类型强转异常

2.8 NegativeArrayException

数组负下标异常

2.9 SecturityException

违背安全原则异常

2.10 EOFException

文件已结束异常

2.11 FileNotFoundException

文件未找到异常

2.12 NumberFormatException

字符串转换为数字异常

2.13 SQLException

操作数据库异常

2.14 IOException

输入输出异常

2.15 NoSuchMethodException

方法未找到异常

2.16 NoSuchFieldException

属性不存在异常

2.17 RuntimeException

运行时异常

2.18 TypeNotPresentException

类型不存在异常
—————————————————————————————————事件操作——————————————————————————————————————
//返回按键事件开始
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
            webView.goBack();

            return true;
        } else {

            finish();
            return true;
        }
    }else {
        return super.onKeyDown(keyCode, event);
    }
}
—————————————————————————————————遇见的问题——————————————————————————————————————
<view>标签报错
android获取转换布局dp值
//dp->px
 public static int dip2px(Context context, float dpValue) {
 final float scale = context.getResources().getDisplayMetrics().density;
 return (int) (dpValue * scale + 0.5f);
 }
 //px->dp
 public static int px2dip(Context context, float pxValue) {
 final float scale = context.getResources().getDisplayMetrics().density;
 return (int) (pxValue / scale + 0.5f);
 }

3 Replies to “Android+java程序开发笔记|持续更新”

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注