android开发中遇到的一些问题及解决方案

相信大家在打包也遇到过这样的问题把,打包失败。以下是昨天我昨天开发时遇到的一些问题,经过查找资料,顺利解决。不过多赘述,问题如下:

问题一:Messages报错如下:

Errors while building APK. You can find the errors in the ‘Messages’ view.

解决方法:

在app的build.gradle里的android{}中添加如下代码,然后再次运行Generate Signed Apk。

android{
    lintOptions {
        checkReleaseBuilds false
        abortOnError false
    }
}

签名的注意事项

所有的Android应用都必须有数字签名,没有不存在数字签名的应用,包括模拟器上运行的。Android系统不会安装没有数字证书的应用。
签名的数字证书不需要权威机构来认证,是开发者自己产生的数字证书,即所谓的自签名。
正式发布一个Android应用时,必须使用一个合适的私钥生成的数字证书来给程序签名,不能使用ADT插件或者ANT工具生成的调试证书来发布。
数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能。
问题二:Messages报错如下:
Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.

com.android.build.transform.api.TransformException: java.util.zip.ZipException: duplicate entry: android/support/v7/cardview/BuildConfig.class
解决方法:

那就是说明你在工程中libs文件夹或是build.gradle中引用了重复的依赖包或是依赖工程,自己Ctrl+N,输入BackStackState查找一下是哪个包重复,那么就删除相应的libs中的jar包依赖,然后通过compile方式进行引用即可。

问题三:Messages报错如下:
dexDebug ExecException finished with non-zero exit value 2
解决方法:

需要在gradle中配置下面的代码,原因是引用了多个libraries文件

defaultConfig {
        multiDexEnabled true
}

由于是突然想起把以前遇到问题总结下,好多问题代码没了,就简单描述下问题吧!
问题四:轮播图加载的问题:当网络请求的图片只有两张,三张时,你用viewpager加载的图片就会出现问题,空白页啊,或者直接报错,错误好像是什么父控件被移除子控件啥的,反正就是既有孩子也有父亲的child,parent,记不清楚了:
解决方案:在pagerAdapter里面

/**
 * Created by sks on 2016/4/18.
 */
public class FoodBannerPagerAdapter extends PagerAdapter {
    private List<ImageView> imageViews; // 存放美食图片的列表
    private ViewPager myViewPager;
    public void setImageViews(List<ImageView> imageViews) {
        this.imageViews = imageViews;
    }



//    public FoodBannerPagerAdapter(ViewPager viewPager, List<ImageView> imageViews) {
//        this.myViewPager = viewPager;
//        this.imageViews = imageViews;
//    }

    @Override
    public int getCount() {
        if (imageViews.size() == 1) {// 一张图片时不用流动
            return imageViews.size();
        }
        return Integer.MAX_VALUE;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }


    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        //对ViewPager页号求模取出View列表中要显示的项
        position %= imageViews.size();
        if (position < 0){
            position = imageViews.size()+position;
        }
        ImageView view = imageViews.get(position);
        //如果View已经在之前添加到了一个父组件,则必须先remove,否则会抛出IllegalStateException。
        ViewParent vp =view.getParent();
        if (vp!=null){
            ViewGroup parent = (ViewGroup)vp;
            parent.removeView(view);
        }
        container.addView(view);
        //add listeners here if necessary
        return view;

}

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
//        ((ViewPager)container).removeView(imageViews.get(position % imageViews.size()));
    }


}

问题5:这是一个自定义的viewpager,就是引导页的时候有一个很宽的背景图在最底层,当然每个引导视图还是有的当你滑动视图的时候背景也要跟着滑动,你划到最后一个引导页时候,那个最底层的背景也就划完了,就这样一个效果,对了效果图怎么上传啊?

/**
 * Created by  on 2016/5/30.
 */
public class GuideViewPager extends ViewPager {

    private Bitmap bg;
    private Paint b = new Paint(1);

    public GuideViewPager(Context context) {
        super(context);
    }

    public GuideViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void dispatchDraw(Canvas canvas) {
        if (this.bg != null) {
            int width = this.bg.getWidth();
            int height = this.bg.getHeight();
            int count = getAdapter().getCount();
            int x = getScrollX();
            // 子View中背景图片需要显示的宽度,放大背景图或缩小背景图。
            int n = height * getWidth() / getHeight();

            /**
             * (width - n) / (count - 1)表示除去显示第一个ViewPager页面用去的背景宽度,剩余的ViewPager需要显示的背景图片的宽度。
             * getWidth()等于ViewPager一个页面的宽度,即手机屏幕宽度。在该计算中可以理解为滑动一个ViewPager页面需要滑动的像素值。
             * ((width - n) / (count - 1)) /getWidth()也就表示ViewPager滑动一个像素时,背景图片滑动的宽度。
             * x * ((width - n) / (count - 1)) /  getWidth()也就表示ViewPager滑动x个像素时,背景图片滑动的宽度。
             * 背景图片滑动的宽度的宽度可以理解为背景图片滑动到达的位置。
             */
            int w = x * ((width - n) / (count - 1)) / getWidth();
            canvas.drawBitmap(this.bg, new Rect(w, 0, n + w, height), new Rect( x, 0, x + getWidth(), getHeight()), this.b);
        }
        super.dispatchDraw(canvas);
    }

    public void setBackGroud(Bitmap paramBitmap) {
        this.bg = paramBitmap;
        this.b.setFilterBitmap(true);
    }
}

xml文件

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/yindaobj"
    tools:context="com.mushi.activitys.GuideActivity">
    <!--android:background="@drawable/yindaobj"-->

    <com.mushi.view.GuideViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </com.mushi.view.GuideViewPager>



</FrameLayout>

问题六:
大家经常遇到的listview嵌套gridview,

解决方案:
listview:

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ListView;

public class MyListView extends ListView {
    public MyListView(Context context) {
        super(context);
    }

    public MyListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyListView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
                MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }
}

gridview

/**
 * Created by
 */
public class GridViewScrollView extends GridView {
    public GridViewScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public GridViewScrollView(Context context) {
        super(context);
    }

    public GridViewScrollView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

        int expandSpec = MeasureSpec.makeMeasureSpec(
                Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }
}

现这些把,周六日在总结点儿!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值