Android Studio中的java代码(待完善)

这篇博客详细介绍了在Android Studio中使用Java编程时可能会遇到的问题,包括操作错误、代码解析、小技巧和语法难点。针对@override报错、空指针、NotFound错误等常见问题提供了解决方案。同时,讲解了Handler、Activity的使用、Log日志输出、导入项目、四大组件等内容,以及Intent、Toast、Bundle等工具的使用方法和区别。此外,还涵盖了数据解析、数据库操作和权限管理等方面的问题及其解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、操作错误

1.如何实现基本功能

不管是什么基础功能,当需要用到java代码去写监听器,那就要结合xml+java
最好先写好xml,再去写java代码,xml、java的应用详情多看课件的使用

没有写不好的代码,只有不敢去对比、去研究怎么改进的心情

2.@override报错很大可能是没有导包

3.出现无法解析的报错

很大可能是没有定义属性名(xml中没有设置id)

4.出现空指针情况

在这里插入图片描述
空指针就是没有获得相应的值,主要是看看对应的名称有没有写错
原因是在XMLHelper.java中,在xml中获取的不是 ClassName 而是其他标签,导致读取不到
在这里插入图片描述

5.NotFound错误

原因是,在xml文件中<ClassName>下没有填写该包下的任一类名,自然就找不到
(错误示范)
在这里插入图片描述
(正确示范)
在这里插入图片描述

6.操作外置数据库获取不到数据时

在这里插入图片描述
连接mysql获取数据时出现了这个问题,主要解决方法是,mysql的用户没有被允许远程访问,mysql的用户的远程访问功能是默认关闭的,故而要进行开启
做法:
打开mysql命令行
输入命令

GRANT ALL PRIVILEGES ON . TO ‘用户名’@’%'IDENTIFIED BY ‘密码’ WITH GRANT
OPTION;

再重新运行程序,问题就解决了

7.解析json获取json中的数据

在这里插入图片描述

一开始没有成功获取到json中的数据,如果代码没有错误,那么原因有二。
其一,tomcat未开启
其二,tomcat要停止后再重新启动(直接在monitor后台操作)
进行如上操作,问题得到解决。

二、代码解析

(一)Handler的使用:详情见Lab5_3

1.final static int MAX_PROGRESS = 100;

// 该程序模拟填充长度为100的数组

(二)Activity的使用:详情见6_1

创建activity→配置activity
在这里插入图片描述

1. 把某个activity设置为程序的入口

Activity通过intent来表达自己的意图
在以下部分进行修改,整体上适用于只有一个Activity的情况

<intent-filter>
/*指定响应动作名,通过这一行代码可把Activity指定为主体中项*/
<action android:name="android.intent.action.MAIN" />
/*通过这一行代码,可以把Activity作为应用的启动项。当应用启动的时候,就会自动启动这个Activiity*/
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

三、小技巧

1.Log.i();

日志输出语句,输出在logcat里面

2.导入项目

The path ‘F:\SDK’ does not belong to a directory. Android Studio
will use this Android SDK instead:

出现该错误时,在要导入项目中找到local.properties 文件 将该项目SDK路径配置成本机StudioSDk路径即可 切记路径不能含有中文

3.无法安装应用程序

Session ‘app’: Installation did not succeed. The application could not be installed.

启动的时候失败,提示: Session ‘app’: Installation did not succeed.The
application could not be installed: INSTALL FAILED INSUFFICIENT
STORAGE Retry

错误翻译过来是: Session ‘app’:安装失败。无法安装应用程序:安装失败,存储空间不足,请重试

点击最上面一行菜单栏的Build选项,选择 Clean Project
清理一下缓存,这个问题就ok了

4.关于预览界面看不到标题栏

https://ask.csdn.net/questions/748155

5.关于activity跳转看不到标题栏问题

让所有的活动都继承 AppCompatActivity就行了,如:

public class FirstActivity extends AppCompatActivity{

}

6.如何在同一module下设置多个标题栏

在AndroidManifest.xml下的
<android:name="???Activity.java"
android:label="???">中label下设置

7.监听器的使用

首先先获取事件源
再调用监听器方法,里面包含设置实现监听器类

8.Android studio Design editor is unavailable until a successful build

当遇到该问题时,点击左上角 file –>Sync Project with Gradles Files,待处理完就OK了 ,不行的话就重建项目吧

9.fragment错误

在这里插入图片描述
首先这些导入的容器对象是left_activity,且我对left_activity使用过的java类是Left_Fragment.java,里面的包导错了,才会产生这个错误,也就是说,原本的Left_Fragment.java导错包,改成import android.app.Fragment;
问题就解决了

10.设置点击按钮弹出fragment

<LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal">
            <FrameLayout
                android:id="@+id/left_activity"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1" >
            </FrameLayout>
            <FrameLayout
                android:id="@+id/right_activity"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1" >
            </FrameLayout>
</LinearLayout>

在FrameLayout里面无需放置fragment,若放置了,则会直接嵌套在框架布局里面了

11.URL和URI的区别

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
URI不局限于客户端和服务器,URL能定位网上的一切资源,是唯一的

12.如何快速创建方法

快捷键:ctrl+o
鼠标:在这里插入图片描述
再点击重写方法

13.如何快速创建Service

在这里插入图片描述

14.四大组件

(1)Activity(活动)

Intent:是两个Activity之间的信使,通过将要传递的数据保存在Intent中,就可以将其传递到另一个Activity中
Bundle:可以将要保存的数据存放在Bundle对象中

Intent与Bundle的关系:
利用Bundle对象保存数据,再通过Intent提供的putExtras()方法将要携带的数据保存到Intent中
即,数据→Bundle→Intent

Activity利用Intent传送数据并返回结果
这个时候就要用到

第一个activity:startActivityForResult()→第二个activity:setResult()→第一个activity:onActivityResult()

(2)Service(服务)

可参考:
https://blog.csdn.net/cptianyu/article/details/51605135

通常service用来执行一些耗时操作,或者后台执行不提供用户交互界面的操作,例如:下载、播放音乐。

(3)BroadcastReceiver(广播接收器)

BroadcastReceiver:直译是“广播接收者”,所以它的作用是用来接收发送过来的广播的。
那我们有必要知道:什么是广播?广播可以理解为一种消息,系统在产生某个事件时发送广播,应用程序使用广播接收者接收这个广播,就知道系统产生了什么事件。比如开机的时候,系统会进行一个全局广播,消息是按开机了,这时候有广播接收者接到了这个消息,就会相应启动一些程序或服务,实现开机启动。还有就是你的网络出了问题,比如网络断开了,链接到wifi之类,或者还有电量改变,收发短信都会发出广播,这时候对应的程序来反应。如果现在觉得没有大用,是因为你的程序还没有用到关于系统事件所对应的反应,但这不代表BroadcastReceiver是不重要的。

Toast、Notification、AlertDialog、BroadcastReceiver的区别
在这里插入图片描述

(4)ContentProvider(内容提供者)

可参考:
https://blog.csdn.net/shaochen2015821426/article/details/79748487

首先需要在AndroidManifest.xml中配置provider
在这里插入图片描述

作用:为不同的应用之间数据共享,提供统一的接口
可以理解为把添加的这个数据共享到其他界面,一般是结合数据库使用的
在这里插入图片描述

那要如何实现数据共享?
先开发一个ContentProvider的子类(可以理解为定义),接着再重新写一个类来调用ContentProvider的子类中增删改查、getType()方法。

创建自定义ContentProvider的步骤:

1.使用SQLite技术,创建好数据库和数据表
2.新建类继承ContentProvider
3.重写6个抽象方法
4.创建UriMatcher,定义Uri规则
5.在Manifest中注册provider
6.ContentResolver对ContentProvider中共享的数据进行增删改查操作

getType():返回CP数据的MIME类型

MIME类型:设定某种扩展名的文件用一种应用程序来打开的方式类型。当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。
可参考:
https://www.cnblogs.com/tjudzj/p/6528008.html

15.基于监听的事件处理和基于回调的事件处理 的区别

基于监听的事件处理就是在android的组件上绑定特定的监听器,而基于回调的事件处理就是重写UI组件或者Activity的回调方法。
基于监听的事件处理语法:匿名内部类

public class MainActivity extends Acitivity
{
        ...
        Button button=(Button)findViewById(R.id.button);
        button.setOnClickListener(new OnClickListener)
        {
                public void onClick(View v)
                {
                         show.setText("大家好");
                }
        }
}        

基于回调的事件处理:
详情参考:
https://www.runoob.com/w3cnote/android-tutorial-callback-event-handle.html

事件传播的顺序是: 监听器—>view组件的回调方法—>Activity的回调方法
(看完链接才能懂)

16.Bundle与Intent、Toast

Bundle:用于保存要携带的数据包
Intent(意图):主要是解决Android应用的各项组件之间的通讯。
Toast:显示消息提示框

在Android中,可以将
要保存的数据存放在Bundle对象中,染安后通过Intent提供的putExtras()方法将要携带的数据保存到Intent中。

在这里插入图片描述

Intent与Bundle中有一系列的putXXX()方法用于添加各种附加数据,一系列的getXXX()方法用于读取数据。

17.显示Intent和隐式Intent

参考链接:
https://www.cnblogs.com/shuiyin/p/6550999.html

一、显示Intent为从一个activity跳转到另一个activity。如:

Intent intent = new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);

二、隐式Intent它不明确指出我们想要启动哪一个活动,而是指定了一系列更为抽象的action和category等信息来过滤,找到符合条件的Activity。
1.setAction():表明我们想要启动能够响应设置的这个action的活动,并在清单文件AndroidManifest.xml中设置action属性。
2.setData():通常是URI格式定义的操作数据。(只要设置setAction ()就要在清单文件AndroidManifest.xml中设置action属性)
3.setType():指定数据类型,选出适合的应用来。(只要设置setAction ()就要在清单文件AndroidManifest.xml中设置action属性)
4.putExtra():把要传递的数据暂存在Intent中,启动了另一个活动后,只需要把这些数据再从Intent中取出就可以了。

四、语法

1.onCreate()方法 、super用法(顺带讲讲this用法)

java android 中的onCreate的方法是在Activity创建时被系统调用,是一个Activity生命周期的开始。可是有一点容易被忽视,就是onCreate方法的参数saveInsanceState。因为在一般的程序开发中,很少用到这个参数。
onCreate方法的完整定义如下:

public void onCreate(Bundle saveInsanceState){
super.onCreate(saveInsanceState);
}

super关键字的三种用法

1.在子类的成员方法中,访问父类的成员变量
2.在子类的成员方法中,访问父类的成员方法
3.在子类的构造方法中,访问父类的构造方法
public class February20 extends February19{

int num=222;
//在子类的成员方法中,访问父类的成员变量
public void zimethod() {
	System.out.println(super.num);
	System.out.println("子类的方法");
}
//在子类的成员方法中,访问父类的成员方法
public void zi() {
	super.fumethod();
}
//在子类的构造方法中,访问父类的构造方法
public February20() {
	super();
}

this用法

this主要有两种用法:

1 用在构造方法中,调用本类的其他构造方法。 格式为 this([实参列表]);
通过this调用本类的其他构造方法时,该语句必须出现在构造方法中,并且必须作为第一条语句出现。

2 代指当前对象

例如

public class Person {

private String name;

private int age;

private String gender;

public  Person() { //构造方法一

}

public  Person(String name, int age) {  //构造方法二

this(name, age, null);                  //使用this关键字调用本类中的构造方法三

}

public Person(String name, int age1, String gender) {   //构造方法三

this.name = name;                      //因为参数与类中的成员变量名相同,所以用this.name来表示成员变量

age = age1;                            //因为参数与类中的成员变量名不同,所以可以不实用this.age,直接用age = age1

this.gender = gender;

}


}

2.setContentView(R.layout.activity_main);

这句是给activity设置一个layout布局

3.findViewById()函数

安卓编程的定位函数,主要是引用.R文件里的引用名。一般在R.java文件里系统会自动帮你给出你在XML里定义的ID或者Layout里面的名称,例如:Button button=(Button)findViewById(R.id.button01);这样就引用了XML(res里的布局文件)文件里面的button,使得在写.java的按钮时能与XML里的一致。

4.Integer.parseInt()

Integer.parseInt()是把()里的内容转换成整数。Integer.parseInt(String)遇到一些不能被转换为整型的字符时,会抛出异常。

5.界面组件.getText().toString()

EditText etNum=findViewById(R.id.etNum);

etNum.getText().toString()
这个方法是 获取一个视图View对象(此处是etNum)里的字符串 的方法的,比如你要验证一个Edittext里输入的是不是纯数字,就用这个方法来获取输入的字符串,然后进行验证

6.Android权限Uri.parse的几种用法

参考链接:
https://blog.csdn.net/linximf/article/details/8505513

五、尝试解决报错

1.从caused by中找原因
这里的原因是空指针异常,也就是说,缺少这个MainActivity.java这个类去调用activity_main.xml
在这里插入图片描述

6.Integer.parseInt(result);

将result对象的值,转化为Integer对象的类型,而非int非对象类型,虽然Integer和int,表面上看去类似,但是一个是面向对象的,而一个是面向过程的。
Integer与int的区别可参考:
https://www.cnblogs.com/bigdata-stone/p/10560759.html|

7.String.valueOf()方法的作用

String.valueOf()就是将其它数据类型转换为字符串类型

用法如下:   
int i = 10;   
String str = String.valueOf(i);   
这时候 str 就会是 “10”

8.Activity的startActivityForResult()与onActivityResult()与setResult()参数分析

在一个主界面(主Activity)通过意图跳转至多个不同子Activity上去,当子模块的代码执行完毕后再次返回主页面,将子activity中得到的数据显示在主界面/完成的数据交给主Activity处理。这种带数据的意图跳转需要使用activity的onActivityResult()方法。

(1)startActivityForResult(Intent intent, int requestCode);

其中:requestCode是用来标识请求的来源, resultCode是用来标识返回的数据来自哪一个activity
   第一个参数:一个Intent对象,用于携带将跳转至下一个界面中使用的数据,使用putExtra(A,B)方法,此处存储的数据类型特别多,基本类型全部支持。

第二个参数:如果> = 0,当Activity结束时requestCode将归还在onActivityResult()中。以便确定返回的数据是从哪个Activity中返回,用来标识目标activity。

与下面的resultCode功能一致,感觉Android就是为了保证数据的严格一致性特地设置了两把锁,来保证数据的发送,目的地的严格一致性。
在一个主界面(主Activity)通过意图跳转至多个不同子Activity上去,当子模块的代码执行完毕后再次返回主页面,将子activity中得到的数据显示在主界面/完成的数据交给主Activity处理。这种带数据的意图跳转需要使用activity的onActivityResult()方法。

(2) onActivityResult(int requestCode, int resultCode, Intent data)

第一个参数:这个整数requestCode用于与startActivityForResult中的requestCode中值进行比较判断,是以便确认返回的数据是从哪个Activity返回的。

第二个参数:这整数resultCode是由子Activity通过其setResult()方法返回。适用于多个activity都返回数据时,来标识到底是哪一个activity返回的值。

第三个参数:一个Intent对象,带有返回的数据。可以通过data.getXxxExtra( );方法来获取指定数据类型的数据。
  
一个Activity需要得到另一个Activi的返回数据,则要利用方法onActivityResult()来处理返回结果(在主Activity中)

  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        result=data.getStringExtra("multi");
        editText3.setText(String.valueOf(Integer.parseInt(result)));
    }

其中:requestCode是用来标识请求的来源, resultCode是用来标识返回的数据来自哪一个activity

(3)onResult(int resultCode, Intent data)

在意图跳转的目的地界面调用这个方法把Activity想要返回的数据返回到主Activity,

第一个参数:当Activity结束时resultCode将归还在onActivityResult()中,一般为RESULT_CANCELED , RESULT_OK该值默认为-1。

第二个参数:一个Intent对象,返回给主Activity的数据。在intent对象携带了要返回的数据,使用putExtra( )方法。

9.editText.setText(“确定”);

意思是将editText这个组件上面的文字设置为“确定”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值