本文共 6283 字,大约阅读时间需要 20 分钟。
解决方法一
在方法之前加上如下代码以导入相关包import android.content.Intent; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.Toast;
解决方法二
重启Android Studio不能实例化activity有如下三种情况:
没有在Manifest.xml 清单中注册该activity,或者在创建完activity后,修改了包名或者activity的类名,而配置清单中没有修改,造成不能实例化。
自己新建了一个包,而注册时候依然用的默认包,例如,默认包是com.ghg.Dao包,你新建了一个com.ghg.DaoImpl包,并在此包中写了个FirstActivity,在manifest.xml中注 册时你写的是,此时相当于你在的类注册到了默认包中,系统在默认包中是找不到的,因为你的FirstActivity在com.ghg.DaoImpl包 下,所以你注册时应写成包名加类名,如:<activity android:name=“com.ghg.DaoImpl.FirstActivity”;这样系统才能在指定的包中找到对应的类。
还用一种就是你的FirstActivity定义成了抽象类,这种情况好像一般人不会犯。
如果上述三种情况都考虑到了,还会抛出此异常,那么就查看一下activity类里是否同时存在这个类的构造函数和oncreate(),如果是,那么删除构造函数试试,并把初始化放到oncreate()中试试。
问题详情
练习《第一行代码》中的程序,播放音频小节(8.4.1),在手机上运行后音频无法播放。手机在根目录放了音频文件“music.mp3”,在SD卡根目录上也放了该文件,在手机根目录创建“sdcard”文件夹下也放了该文件。 运行后,一点击播放按钮会出现下方错误05-02 15:20:35.197 31272-31272/com.example.android.mediaplayer E/MediaPlayer: start called in state 1 05-02 15:20:35.197 31272-31272/com.example.android.mediaplayer E/MediaPlayer: error (-38, 0) 05-02 15:20:35.199 31272-31272/com.example.android.mediaplayer E/MediaPlayer: Error (-38,0)
再点播放按钮,每次只打印一行错误,如下
05-02 15:20:37.738 31272-31272/com.example.android.mediaplayer E/MediaPlayer: start called in state 0
解决方法一
添加SD卡访问权限:<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
解决方法二
问题很可能是因为对应的路径没有“music.mp3”文件。 建议在initMediaPlayer()方法中try语句的中的File file = new File(Environment.getExternalStorageDirectory(),“music.mp3”);的后面加上上一条Log语句: Log.i(“音乐文件路径”, file.getPath());,看输出的路径是什么。解决方法三
Error (-38,0)和Error (-19,0)一般是硬件设备不支持所致,在播放音乐时可以采用异步缓存,看你在写代码时直接加载到缓存,可以尝试新建一个模拟器,ram分配700m多一点。defaultConfig { applicationId “name.bagi.levente.pedometer” minSdkVersion 2 targetSdkVersion 2 }
改为
defaultConfig { applicationId “name.bagi.levente.pedometer” minSdkVersion 11 targetSdkVersion 2 }
点击右上角Sync No
eclipse中项目自带libs文件夹,用来放需要的jar包之类的,可是在AndroidStudio中创建项目并没有这个文件夹,所以需要创建,名字统一为jniLibs。
1.Android创建项目默认为:
2.找到这个页面:
3.加入一段代码:(注意和buildTypes那一个大括号并列,在android大括号之内)
sourceSets{ main{ jniLibs.srcDirs=['libs'] } }
4.保存后会在上方出现提示:
5.点击后在项目中就出现jniLibs文件夹了。
6.将需要的bar包放入该文件夹,如果要引用,找到jar包(前边有小三角的是已引用的,没有小三角的可以引用)右键,选择Add As Library…,就引用好了。
在网上看到出现这个异常的原因是使用的了 Native lib 或者 JNI 之类的反正就是跟硬件有关的乱七八糟的包.
例如使用了 一个图片压缩的包, 涉及到了 JNI, 之后打包就出现了上述的异常.
解决方案:
在 app 的 moudle 的 build.gradle 文件中, 粘贴一下代码, 注意是添加在 android {} 大括号中.
// 解决 native libraries 不支持cpu的体系结构。允许模拟器调试splits { abi { enable true reset() include 'x86', 'armeabi-v7a','x86_64' universalApk true }
这样就可以直接跑模拟器了. 但这样做后在打包时会产生多个 apk, 所以发布版本时把上面的代码注释掉后 rebuild 一下工程再打包. 切记一定要 rebuild 工程!
apply plugin: 'com.android.application'android { //添加这段代码 lintOptions { checkReleaseBuilds false abortOnError false } compileSdkVersion 26 defaultConfig { applicationId "com.example.administrator.test" minSdkVersion 15 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }}dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'com.android.support:appcompat-v7:26.1.0' implementation 'com.android.support.constraint:constraint-layout:1.0.2' implementation 'com.android.support:design:26.1.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' implementation 'com.android.support:gridlayout-v7:26.1.0' implementation files('libs/nineoldandroids-2.4.0.jar')}
在配置文件“build.gradle”中添加注释代码
ctrl+alt+s,调出SDK Manager,选择SDK tools,查看SDK Tools
主要原因是Build-Tools或者SDK Platform-Tools或SDK Tools 有更新,造成版本不一致。下载并安装新版,保证版本一致就可以了。actionBarActivity已经由AppCompatActivity取代了
把import android.support.v7.app.ActionBarActivity;
; 改成import android.support.v7.app.AppCompatActivity;
用这个AppCompatActivity类就行了 错误:Program type already present: android.support.v4.app.BackStackRecord$Op
错误:Program type already present: android.support.v4.app.ActionBarDrawerToggle$Delegate
两个错误的大致意思就是 前边已经存在了v4包的类文件,说实话,没太理解它真正的意义,不过已经猜出大概错误,是跟v4包有关。
看了一些博友的博客,发现我在配置
dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') testImplementation 'junit:junit:4.12' implementation 'com.google.code.gson:gson:2.3.1' implementation project(':library-pulltorefresh') implementation 'com.mcxiaoke.volley:library:1.0.16' implementation project(':library-sidedrawer') implementation project(':library-circleimageview') implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'com.android.support:support-v4:27.1.1' implementation project(':library-slidingmenu') implementation 'com.baoyz.swipemenulistview:library:1.3.0' implementation 'org.greenrobot:eventbus:3.0.0'}
的时候 少了一个v4的导入(不加这个导入的话 ) 下面这行会报红线,但是不影响程序运行
implementation 'com.android.support:appcompat-v7:27.1.1'implementation 'com.android.support:support-v4:27.1.1'
加上这句话之后,以上问题迎刃而解。
超级大坑!!!在网上搜索了一系列的解决方法,最终解决方法如下:
如果你在项目中导入了SlidingMenu这种模块式的依赖,那么就需要将这个模块移出到与app目录同级,并且修改相应的build.gradle以及settings.gradle,不能存在多级子目录路径(即“/”符号)
PS:这是我安装了AS 3.5版本遇到的问题,低版本下的AS应该不会出现这种问题
转载地址:http://ticen.baihongyu.com/