《在飞Android Kotlin实战》之真实项目篇(百度广告Dap项目)9

hi各位亲,这篇将是这个系列的最后一篇,主要通过一个真实项目实例,来跟大家分享Android Kotlin真实开发内容同时和大家回顾下之前总结的Kotlin知识点。

=======

项目实战:将Dap(百度海外移动广告平台 DU Ad Platform)的javaDemo用Kotlin来实现。欢迎各位亲到Dap官网下载demo:http://ad.duapps.com/zh_CN/

介绍:作为一款广告变现sdk,先简单介绍下接入顺序。

1.申请广告ID  2.导入Dap的aar 3.application中初始化Dap Sdk 4.广告形式接入

 先看下效果:

跳过前3步直接看下Java实现广告的实现:

再看Kotlin实现,同时与java做对比:

package com.mobula.sample

import android.app.Activity
import android.graphics.Bitmap
import android.os.Bundle
import android.util.Log
import android.view.View
import com.duapps.ad.AdError
import com.duapps.ad.DuAdListener
import com.duapps.ad.DuNativeAd
import com.mobula.sample.util.ImageLoaderKotlinHelper
import com.nostra13.universalimageloader.core.ImageLoader
import com.nostra13.universalimageloader.core.assist.FailReason
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener
import kotlinx.android.synthetic.main.ad_card_kt.*  //kotlin加载布局,可以省去java中的findviewbyid操作

/**
 *
 * @author pangzaifei
 * @version v1.0
 * @date 2019/1/15-19:40
 */
class ShowAdKotlinActivity : Activity() { //ShowAdKotlinActivity继承Activity   :是继承的意思  Activity()表示具体的类 ,对应java:ShowAdKotlinActivity extends Activity{}
    var TAG = ShowAdKotlinActivity::class.java.simpleName //::是函数引用,使用ShowAdKotlinActivity::class.java.simpleName作为Log的Tag,对应java: private static final String TAG = ShowAdKotlinActivity.class.getSimpleName();知识点: https://blog.csdn.net/pangzaifei/article/details/85076557
    lateinit var mImageLoader: ImageLoader  //定义一个成员变量mImageLoader 类型是IMageLoader的  lateinit是告诉编译器mimageLoader需要在用的时候去赋值,在声明的时候不需要赋值,lateinit修饰var
    lateinit var mDuNativeAd: DuNativeAd  //定义一个成员变量mDuNativeAd 类型是com.duapps.ad.DuNativeAd的  lateinit是告诉编译器mimageLoader需要在用的时候去赋值,在声明的时候不需要赋值,lateinit修饰var   知识点:https://blog.csdn.net/pangzaifei/article/details/85163500
    val PID = 10032   //val 是final的,一般修饰常量.所以PID=10032就对应java中  private final int PID = 10032;
    val CACHESZIE = 2  //val 是final的,一般修饰常量.所以CACHESZIE = 2 就对应java中  private final int CACHESZIE = 2;
    override fun onCreate(savedInstanceState: Bundle?) { //override重载 onCreate()方法
        super.onCreate(savedInstanceState)
        setContentView(R.layout.ad_card_kt)  //设置布局
https://blog.csdn.net/pangzaifei/article/details/86573422
        mImageLoader = ImageLoaderKotlinHelper.getInstance(this)  //初始化ImageLoader,此类是工具类,在com.mobula.sample.util.ImageLoaderKotlinHelper路径中
        mDuNativeAd = DuNativeAd(this, PID, CACHESZIE).apply {
            //dap sdk初始化,参数分别contet,广告sid,缓存个数   apply{}可以让一组操作放在一起,其中it代表的是mDunatvieAd对象   知识点:https://blog.csdn.net/pangzaifei/article/details/85118937
            setMobulaAdListener((object : DuAdListener {   //setMobulaAdListener((object : DuAdListener { }设置广告的回调   相当java: mDuNativeAd.setMobulaAdListener(new DuAdListener() {})
                override fun onAdLoaded(ad: DuNativeAd?) { //重载广告接在成功回调,ad:DunatvieA? 参数ad是DuNativeAd类型,DunativeAd?这个问号标识ad是可为null的  知识点:见本文开头
                    Log.d(TAG, "onAdLoaded")  //输出log
                    runOnUiThread {
                        //在Ui线程更新ui
                        var url: String? = imageUrl    //判断是否有大图图片的Url
                        if (url == null) showSmallAdView(ad) else showBigAdView(ad)//如果有大图图片的url就去加载显示big的布局,没有就去展示small的布局
                    }
                }
                override fun onClick(ad: DuNativeAd?) {//广告点击回调 ,ad:DunatvieA? 参数ad是DuNativeAd类型,DunativeAd?这个问号标识ad是可为null的
                    Log.d(TAG, "onClick")
                }
                override fun onError(ad: DuNativeAd?, error: AdError?) {//广告返回错误回到   ad:DunatvieA? 参数ad是DuNativeAd类型,DunativeAd?这个问号标识ad是可为null的  p1:AdError? 参数ad类型是AdError类型的,同时ad是可为null的
                    Log.d(TAG, "onError${error?.errorCode}")//输出错误信息,?.表示:error如果不为null的时候调用error.errorCode,如果error为Null则不处理。相当于java:            if (error != null) { Log.d(TAG, "onError : " + error.getErrorCode()); }
                }
            }))
        }
        mDuNativeAd.load()
    }
    //显示小图布局
    private fun showSmallAdView(ad: DuNativeAd?) {
        small_card_kt_name.text = ad?.title   //设置广告的title
        small_card_kt_rating.rating = ad?.ratings ?: 4.0f  //设置广告的平行,如果有就ad.ratings如果没有就默认4.0分
        mImageLoader.apply {    //Imageload去加载图片
            displayImage(ad?.iconUrl, small_card_kt_icon) //加载iconUrl,将图片当道small_card_kt_icon这个imageview中
        }
        small_card_kt_des.text = ad?.shortDesc   //设置广告的短描
        small_card_kt_btn.text = ad?.callToAction   //设置广告点击跳转按钮的文案
        ad?.registerViewForInteraction(small_card_kt_btn)  //注册广告点击跳转区域为small_card_kt_btn
        big_kt_ad?.visibility = View.GONE   //设置是否可见
        small_kt_ad.visibility = View.VISIBLE   //设置是否可见
        load_kt_view.visibility = View.GONE   //设置是否可见
        white_kt_bg.visibility = View.GONE   //设置是否可见
    }

    private fun showBigAdView(ad: DuNativeAd?) {
        small_kt_ad.visibility = View.GONE    //设置是否可见
        big_kt_ad.visibility = View.VISIBLE     //设置是否可见
        card_kt_name.text = ad?.title      //设置广告的title
        card_kt_rating.rating = ad?.ratings ?: 4.0f    //设置广告的平行,如果有就ad.ratings如果没有就默认4.0分
        card_kt_des.text = ""          //设置广告的短描
        card_kt_btn.text = ad?.callToAction    //设置广告点击跳转按钮的文案
        white_kt_bg.visibility = View.GONE   //设置是否可见
        mImageLoader.apply {     //Imageloader去加载图片,将图片处理放在apply中批量处理
            displayImage(ad?.iconUrl, card_kt_icon)   //加载icon,将图片放到card_kt_icon控件中
            displayImage(ad?.imageUrl, card_kt_image, (object : ImageLoadingListener {  //加载大图,将大图放到card_kt_image中,同时添加imageloadListener回调
                override fun onLoadingComplete(p0: String?, p1: View?, p2: Bitmap?) {  //图片完成回调
                    load_kt_view.visibility = View.GONE
                }
                override fun onLoadingStarted(p0: String?, p1: View?) {//start回调
                }
                override fun onLoadingCancelled(p0: String?, p1: View?) {//cancel回调
                }
                override fun onLoadingFailed(p0: String?, p1: View?, p2: FailReason?) {//Failed回调
                }

            }))
        }
        ad?.registerViewForInteraction(card_kt_btn)//注册广告点击跳转区域为small_card_kt_btn
    }

    //showBigAdView的java实现:可以做对比
//    /**
//     * show big ad 显示da图广告
//     *
//     * @param ad
//     */
//    private void showBigAdView(DuNativeAd ad) {
//        smallADLayout.setVisibility(View.GONE);
//        bigADLayout.setVisibility(View.VISIBLE);
//        titleView.setText(ad.getTitle());
//        ratingView.setRating(ad.getRatings());
//        imageLoader.displayImage(ad.getIconUrl(), iconView);
//        descView.setText("");
//        btnView.setText(ad.getCallToAction());
//        bgView.setVisibility(View.GONE);
//        nativeAd.registerViewForInteraction(btnView);
//        imageLoader.displayImage(ad.getImageUrl(), bigImgView, new ImageLoadingListener() {
//            @Override
//            public void onLoadingStarted(String paramString, View paramView) {
//            }
//            @Override
//            public void onLoadingFailed(String paramString, View paramView, FailReason paramFailReason) {
//            }
//            @Override
//            public void onLoadingComplete(String paramString, View paramView, Bitmap paramBitmap) {
//                loadView.setVisibility(View.GONE);
//            }
//            @Override
//            public void onLoadingCancelled(String paramString, View paramView) {
//            }
//        });
//    }
}

上文仅仅介绍了ShowAdKotlinActivity一个,还有其他广告形式实现比如上面截图的全屏广告,具体实现可以到github或Dap官网中下载查看(Github Demo中不带相关aar、sid和相关变现功能。如果需要完整版本可以去百度Dap官网http://ad.duapps.com/zh_CN/申请成为开发者免费获取完整demo、sid、aar):Github相关源码:https://github.com/pangzaifei/kotlinstudy

PS:

1、我是在飞~~经过1个多月的更新,Adnroid Kotlin快速入门的系列分享已经全部结束,希望对你有所帮助,谢谢各位的阅读。后续还会不定期分享Kotlin内容。

2、后续暂定《Android Gradle开发》、《Android区块链开发》等系列,敬请期待。谢谢~

发布了72 篇原创文章 · 获赞 15 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/pangzaifei/article/details/86573422