class和getClass()的区别

class和getClass()的区别前几天做项目,觉得自己都开发一年多了,还没有自己封装的类,感觉真是白做了,再加上,看到自己的代码,我都不忍心看,有的时候,还需要自己去读自己写的代码,乱乱糟糟的,实在不忍心看,没办法,重现在开始吧,把自己需要的,都封装起来,用到什么的时候,在哪来用,方便,快捷首先是自己封装的基类baseActivity,不废话,直接上代码(其他的就不贴出来了,只有这个地方有错误)packagecom.d

大家好,又见面了,我是你们的朋友全栈君。

前几天做项目,觉得自己都开发一年多了,还没有自己封装的类,感觉真是白做了,再加上,看到自己的代码,我都不忍心看,有的时候,还需要自己去读自己写的代码,乱乱糟糟的,实在不忍心看,没办法,重现在开始吧,把自己需要的,都封装起来,用到什么的时候,在哪来用,方便,快捷

首先是自己封装的基类baseActivity,不废话,直接上代码(其他的就不贴出来了,只有这个地方有错误)

package com.demo.XXX.XX.base;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.IBinder;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;

import com.demo.XXX.XXX.tools.LogUtil;
import com.demo.XXX.XXX.tools.ShareUtils;

/**
 * Created by XXX on 2016/9/26.
 */
public abstract class BaseActivity extends Activity {

    private String TAG;
    protected Context context;
    protected ShareUtils shareUtils;
    protected LayoutInflater inflater;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        context = this;
        inflater = LayoutInflater.from(context);
        TAG = getClass().getName();
        LogUtil.i("BaseActivity", TAG);
        shareUtils = new ShareUtils(context);

    }

    /**
     * 初始化控件或者数据
     */
    protected abstract void initView();

    /**
     * 初始化点击事件
     */
    protected abstract void setListener();

    /**
     * 单一的activity的跳转
     *
     * @param mClass 跳转的类
     */
    public void start_activity(Class<?> mClass) {
        startActivity(new Intent(context, mClass.getClass()));
    }

    /**
     * 带传递参数的跳转
     *
     * @param mClass 跳转类
     * @param key    跳转key值
     * @param value  跳转value值
     */
    public void start_activity(Class<?> mClass, String key, String value) {
        startActivity(new Intent(context, mClass).putExtra(key, value));
    }

    /**
     * 带传递参数的跳转
     *
     * @param mClass 跳转类
     * @param key    跳转key值
     * @param value  跳转value值
     */
    public void start_activity(Class<?> mClass, String key, int value) {
        startActivity(new Intent(context, mClass).putExtra(key, value));
    }

    /**
     * 带传递参数的跳转
     *
     * @param mClass 跳转类
     * @param key    跳转key值
     * @param value  跳转value值
     */
    public void start_activity(Class<?> mClass, String key, Bundle value) {
        startActivity(new Intent(context, mClass).putExtra(key, value));
    }

    /***
     * 点击空白处 隐藏软键盘
     * @param ev
     * @return
     */
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
            View v = getCurrentFocus();
            if (isShouldHideKeyboard(v, ev)) {
                hideKeyboard(v.getWindowToken());
            }
        }
        return super.dispatchTouchEvent(ev);
    }

    /**
     * 根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘,因为当用户点击EditText时则不能隐藏
     *
     * @param v
     * @param event
     * @return
     */
    private boolean isShouldHideKeyboard(View v, MotionEvent event) {
        if (v != null && (v instanceof EditText)) {
            int[] l = {0, 0};
            v.getLocationInWindow(l);
            int left = l[0],
                    top = l[1],
                    bottom = top + v.getHeight(),
                    right = left + v.getWidth();
            if (event.getX() > left && event.getX() < right
                    && event.getY() > top && event.getY() < bottom) {
                // 点击EditText的事件,忽略它。
                return false;
            } else {
                return true;
            }
        }
        // 如果焦点不是EditText则忽略,这个发生在视图刚绘制完,第一个焦点不在EditText上,和用户用轨迹球选择其他的焦点
        return false;
    }

    /**
     * 获取InputMethodManager,隐藏软键盘
     *
     * @param token
     */
    private void hideKeyboard(IBinder token) {
        if (token != null) {
            InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);
        }
    }
}

原本以为自己封装的不错,挺满意的,哈哈,我也有自己封装的代码了,以后在完善下,直接用这个框架做项目,那还不嗖嗖的,想想都觉得开森

开始在使用activity跳转的时候,用的自己封装好的start_activity方法,结果一盆凉水浇在了我的头上,直接报错

 android.content.ActivityNotFoundException: Unable to find explicit activity class {com.demo.neu/java.lang.Class};
 have you declared this activity in your AndroidManifest.xml?

找不到这个类?我明明已经在androidManifest里边注册了啊,为啥还提示找不到这个类,试试Google提供的startac方法,看看

竟然可以跳转,那为啥,我封装的不能跳转呢,也没有啥问题啊,把androidManifest里边的那个类删除,再次用Google的startactivity方法做跳转看看,结果报错

android.content.ActivityNotFoundException: Unable to find explicit activity class {com.demo.XXX/com.demo.XXX.XXX.
activity.LoginActivity}; have you declared this activity in your AndroidManifest.xml?

咦,错误竟然不一样,好吧,那就不是类没有注册的问题了,再看看自己封装的方法吧,仔细看的时候才发现,原来问题出在这里

    /**
     * 单一的activity的跳转
     *
     * @param mClass 跳转的类
     */
    public void start_activity(Class<?> mClass) {
        startActivity(new Intent(context, mClass.getClass()));
    }

而下边的封装

/**
     * 带传递参数的跳转
     *
     * @param mClass 跳转类
     * @param key    跳转key值
     * @param value  跳转value值
     */
    public void start_activity(Class<?> mClass, String key, String value) {
        startActivity(new Intent(context, mClass).putExtra(key, value));
    }

在单一跳转的哪里竟然使用了class.getClass(),去掉getClass(),运行成功,可以跳转,那么问题来了,class和getClass()有啥区别呢,

细心的你可能发现了,问题就在这里

com.demo.neu/java.lang.Class

com.demo.XXX/com.demo.XXX.XXX.activity.LoginActivity

这就是问题所在了,前边的报错是java里边的long类型,因为在long类型里边没有loginActivity这个类,所以出现错误,而后便是指定的一个具体的类,就是说没有在androidMainfest里边没有注册了

一个是类型里边的类,一个是具体的activity的类,当然错误不一样了,当然出现问题了

我替你们踩坑了,以后封装的小伙伴注意了,别再犯我这么低级的错误了,唉

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148097.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • enterprise architect使用教程绘制用例图_用例图的箭头怎么画

    enterprise architect使用教程绘制用例图_用例图的箭头怎么画在《UML面向对象分析、建模与设计》中学到了用例图,用例图是指由参与者(Actor)、用例(UseCase),边界以及它们之间的关系构成的用于描述系统功能的视图。用例图(UserCase)是外部用户(被称为参与者)所能观察到的系统功能的模型图。用例图中的主要元素包括参与者、用例以及元素之间的关系(这三个应该很好理解,一啪啦的废话不多说了,有什么不懂的直接留言或者私信)。我们可以看一个用EA绘制餐馆管理系统的用例图接下来讲解怎么用EnterpriseArchitect(以下简称EA)工具来画步

    2025年9月25日
    4
  • ES5详解_es6配置表

    ES5详解_es6配置表目录1严格模式1.1使用1.2严格模式的作用1.3严格模式的规定2JSON2.1**`JSON.parse`**2.2`JSON.stringify`3对象扩展3.1Object.create3.2Object.defineProperties3.3对象本身的方法3.4Object.keys4数组扩展4.1indexof/lastIndexOf4.2forEach4.3map4.4filter5函数扩展1严格模式1.1使用在JS文件的头部或者函数的

    2025年7月22日
    4
  • 基于粒子群优化算法的函数寻优算法研究_matlab粒子群优化算法

    基于粒子群优化算法的函数寻优算法研究_matlab粒子群优化算法一、理论基础粒子群算法(particleswarmoptimization,PSO)是计算智能领域一种群体智能的优化算法。该算法最早由Kennedy和Eberhart在1995年提出的。PSO算法源于对鸟类捕食行为的研究,鸟类捕食时,找到食物最简单有效的策略就是搜寻当前距离食物最近的鸟的周围区域。PSO算法就是从这种生物种群行为特征中得到启发并用于求解优化问题的,算法中每个粒子都代表问题的一个潜在解,每个粒子对应一个由适应度函数决定的适应度值。粒子的速度决定了粒子移动的方向和距离,速度随自身及其他粒子

    2022年10月11日
    3
  • 5分钟,6行代码教你写爬虫!(python)[通俗易懂]

    5分钟,6行代码教你写爬虫!(python)[通俗易懂]5分钟,6行代码教你写会爬虫!适用人士:对数据量需求不大,简单的从网站上爬些数据。好,不浪费时间了,开始!先来个例子:输入以下代码(共6行)importrequestsfromlxmlimporthtmlurl=’https://movie.douban.com/’#需要爬数据的网址page=requests.Session().get(url)tree=html.f

    2022年6月7日
    49
  • 谈谈怎么实现Oracle数据库分区表「建议收藏」

    谈谈怎么实现Oracle数据库分区表「建议收藏」Oracle数据库分区是作为Oracle数据库性能优化的一种重要的手段和方法,做手头的项目以前,只聆听过分区的大名,感觉特神秘,看见某某高手在讨论会上夸夸其谈时,真是骂自己学艺不精,最近作GPS方面的项目,处理的数据量达到了几十GB,为了满足系统的实时性要求,必须提高数据的查询效率,这样就必须通过分区,以解燃眉之急!先说说分区的好处吧!1) 增强可用性:如果表的某个分区出现故障,表在其他分

    2022年5月9日
    60
  • JVM参数调优总结 -Xms -Xmx -Xmn -Xss「建议收藏」

    “-Xmx1024m-Xms1024m-Xmn512m-Xss256k”——Java运行参数(转)JVM的堆的内存,是通过下面面两个参数控制的-Xms最小堆的大小,也就是当你的虚拟机启动后,就会分配这么大的堆内存给你-Xmx是最大堆的大小当最小堆占满后,会尝试进行GC,如果GC之后还不能得到足够的内存(GC未必会收集到所有当前可用内存),分配新的对象…

    2022年4月6日
    52

发表回复

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

关注全栈程序员社区公众号