解决方法:在gradle文件中改,只需要将重复的引用中的compile改成provided就行。
解决方法:重新clean project
解决方法:这个是因为依赖包重复了 ,只需要将其中一个重复引用的依赖去掉就行了,如:
compile('com.android.support:appcompat-v7:23.+') {
exclude module: 'support-v4'
}
解决方法:
这个错误在app的build.gradle里面添加下面这句就好了。
android {
defaultConfig {
...
multiDexEnabled true
}
}
解决方法:在gradle文件中改,只需要将重复的引用中的compile改成provided就行。
解决方法:重新clean project
解决方法:这个是因为依赖包重复了 ,只需要将其中一个重复引用的依赖去掉就行了,如:
compile('com.android.support:appcompat-v7:23.+') {
exclude module: 'support-v4'
}
解决方法:
使用最新的compileSdkVersion、buildToolsVersion即可
解决方法:在sdk23时,TintTypedArray是在android.support.v7.internal.widget.TintTypedArray包下的,在sdk25时,变成了 android.support.v7.widget.TintTypedArray
java.lang.IllegalStateException: closed
at okhttp3.internal.http.Http1xStream$FixedLengthSource.read(Http1xStream.java:378)
at okio.Buffer.writeAll(Buffer.java:993)
at okio.RealBufferedSource.readByteArray(RealBufferedSource.java:106)
at okhttp3.ResponseBody.bytes(ResponseBody.java:128)
at okhttp3.ResponseBody.string(ResponseBody.java:154)
at com.gjg.fjdshop.ui.home.fragment.HomeFragment$4.onResponse(HomeFragment.java:121)
at okhttp3.RealCall$AsyncCall.execute(RealCall.java:133)
at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
解决方法:
这个错误是由于response.body().string()调用了多次导致的,string()仅可调用一次。
其实,黑屏或者白屏这里并不是不正常,而是还没加载到布局文件,就已经显示了window窗口背景,黑屏白屏就是window窗口背景。
//1、设置背景图Theme
//2、设置透明Theme
//隐藏软键盘
getActivity().getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
注意:需要放在联网请求数据之前
创建一个新的library,需要使用到butterknife,但是使用@bind时,一直不会显示到对应资源文件的id,而显示 R.id.class。
原因:因为在library里R.id.xxx不再是final类型了,也就不是常量了变成可变的,而注入是需要传入常量
butterknife当前版本是8.4.0,已经提供了对library project的支持,github主页的使用步骤总结一下就是:
1.To use Butter Knife in a library, add the plugin to your buildscript:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'
}
}
2.and then apply it in your module:
apply plugin: 'com.android.library'
apply plugin: 'com.jakewharton.butterknife'
dependencies {
compile 'com.jakewharton:butterknife:8.4.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
}
3.Now make sure you use R2 instead of R inside all Butter Knife annotations.
class ExampleActivity extends Activity {
@BindView(R2.id.user) EditText username;
@BindView(R2.id.pass) EditText password;
}
但是按照这个步骤操作后并没有效果,用@BindView的地方提示NullPointerException,用@onClick的标注的点击事件,点击后也没有反应
最后发现,只需修改一下上述步骤1和2就可以了。
步骤1加上依赖注入的plugin:
buildscript {
repositories {
jcenter()
mavenCentral()
}
dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' // 添加的部分
classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'
}
}
然后步骤2也修改一下:
apply plugin: 'com.android.library'
apply plugin: 'com.jakewharton.butterknife'
apply plugin: 'android-apt'
dependencies {
compile 'com.jakewharton:butterknife:8.4.0'
apt 'com.jakewharton:butterknife-compiler:8.4.0' // 修改的地方 把annotationProcessor改为apt
}
这样处理之后,就正常了!
下面的用法可以消除黄色警告,消除内存泄露。
private MyHandler handler = new MyHandler(this);
static class MyHandler extends Handler{
private final WeakReference mActivity;
public MyHandler(SplashActivity activity){
mActivity=new WeakReference(activity);
}
@Override
public void handleMessage(Message msg) {
//若activity退出就不处理消息
if(mActivity.get()==null){
return;
}else{
SplashActivity splashActivity=mActivity.get();
if (splashActivity.isFinishing()) {
return;
}
// 判断进入主页面还是登录页面
splashActivity.goMainOrLogin();
}
}
}
java.lang.IllegalStateException: No tab known for tag null
at android.support.v4.app.FragmentTabHost.doTabChanged(FragmentTabHost.java:334)
at android.support.v4.app.FragmentTabHost.onAttachedToWindow(FragmentTabHost.java:280)
......
http://stackoverflow.com/questions/14370745/fragmenttabhost-graphical-layout-doesnt-render
FragmentTabHost will not show any content as the content will be added dynamically. So no issues their. Should work when u add the tabs in the code and test it. androidhive.info/2011/08/android-tab-layout-tutorial – mipreamble Jul 9 at 12:21
在 ScrollView 添加一个 ListView 会导致 listview 控件显示不全,通常只会显示一条,这是因为两个控件的滚动事件冲突导致。所以需要通过 listview 中的 item 数量去计算 listview 的显示高度,从而使其完整展示,如下提供一个方法供大家参考。
1、在计算listview总高度并设置
ListView listView = (ListView) findViewById(id);
YourAdapter adapter = new MyAdapter(“初始化你的适配器”);
listView.setAdapter(adapter);
setListViewHeightBasedOnChildren(listView);(在setAdapter后调用自定义的方法)
/**
* @param listView
*/
private void setListViewHeightBasedOnChildren(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
}
使用该方法需要注意:子ListView的每个Item必须是LinearLayout,不能是其他的,因为其他的Layout(如RelativeLayout)没有重写onMeasure(),所以会在onMeasure()时抛出异常。
注意:如果直接将 ListView 放到 ScrollView 中,那么上面的代码依然是没有效果的.必须将 ListVIew 放到
LinearLayout 等其他容器中才行.
2、 自定义ListView,重载onMeasure()方法,设置全部显示
public class ScrollViewWithListView extends ListView {
public ScrollViewWithListView(android.content.Context context,android.util.AttributeSet attrs) {
super(context, attrs);
}
/**
* Integer.MAX_VALUE >> 2,如果不设置,系统默认设置是显示两条
*/
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
以上可以解决scrollView内嵌listView,但是有一个问题是第一次进入界面时动态加载listview的items后页面会跳转到listview的第一个子项,这很蛋疼,
无奈又不知道怎么解决,就先用
scrollView.post(new Runnable() {
//让scrollview跳转到顶部,必须放在runnable()方法中
@Override
public void run() {
scrollView.scrollTo(0, 0);
}
});
网上的解决方法:
方法1
第一步:
在Manifest.xml的application标签下添加tools:replace=”Android:icon, android:theme”(多个属性用,隔开,并且记住在manifest根标签上加入xmlns:tools=”http://schemas.android.com/tools”)
你肯定说,不都一样嘛,但是你的错误是不是还在,还在那么,我们继续往下走:
第二步:不用看了,问题百分之百,在你的builde.gradle的位置
minSdkVersion 16
targetSdkVersion 23
你看清楚,你的这个值和你要依赖的那个包,是不是builde.gradle不一样。
改完就OK了。
方法2:在build.gradle根标签上加上useOldManifestMerger true (懒人方法)
但是,我的错误并不是这个造成的,我的错误原因是将
android:allowBackup="true"
设置成了
android:allowBackup="false"
将其改回来即可。
安装APK报错:Failure [INSTALL_FAILED_SHARED_USER_INCOMPATIBLE],表示APK需要没有签名或者签名不符合系统签名。
解决方法:使用源码下的 build/target/product/security/ 下的platform.x509.pem 和 platform.pk8(注意这里如MTK源码中需要使用对应build/target/product/security/项目/下的这两个工具),以及源码下的out/host/Linux-x86/framework/(这个为编译源码后的目录)下的signapk.jar,共三个工具进行签名。
签名方法:将上述三个apk拷贝到同一个目录下,使用” Java -jar signapk.jar platform.x509.pem platform.pk8 待签名名字.apk 签名后名字.apk “命令进行签名。
然后安装即可。