【问题标题】:App no longer works after adding Airpush SDK添加 Airpush SDK 后 App 不再运行
【发布时间】:2013-11-20 16:36:50
【问题描述】:

在我添加 airpush SDK 之前,我的应用运行良好。现在,当我运行它并尝试使用它时,我收到这些错误并且应用程序关闭:

应用代码:

package com.etqanapps.EtqanChannel.UI;

import java.util.ArrayList;

import android.app.Activity; 
import android.content.Context;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.MyChannel.R;
import com.etqanapps.EtqanChannel.Adapters.PlayListAdapterSliding;
import com.etqanapps.EtqanChannel.Controllers.Consts;
import com.etqanapps.EtqanChannel.DataModel.PlayListModel;
import com.etqanapps.EtqanChannel.DataModel.VideoModel;
import com.etqanapps.EtqanChannel.Listeners.MenuActionsListener;
import com.google.ads.AdRequest;
import com.google.ads.AdSize;
import com.google.ads.AdView;

public class UIPlayList extends RelativeLayout implements OnItemClickListener,
    OnClickListener {
ListView lv;
TextView tv_title;
Button btn_open_menu;
Button btn_open_info;

ArrayList<VideoModel> feed;
Context c;
PlayListAdapterSliding ad;
MenuActionsListener listener;
Activity ac;

AdView ad1;
AdView ad2;
String AD_UNIT_ID;
public UIPlayList(Context context, MenuActionsListener listener,Activity ac) {
    super(context);
    feed = new ArrayList<VideoModel>();
    this.listener = listener;
    c = context;
    this.ac=ac;

    String inflater = Context.LAYOUT_INFLATER_SERVICE;
    LayoutInflater li = (LayoutInflater) getContext().getSystemService(
            inflater);
    if(isTablet(c)){
        if(Consts.isEnglish()){
            li.inflate(R.layout.ui_play_list_tab, this, true);
        }else{
            li.inflate(R.layout.ui_play_list_tab_ar, this, true);
        }

    }else{
        if(Consts.isEnglish()){
            li.inflate(R.layout.ui_play_list_phone, this, true);
        }else{
            li.inflate(R.layout.ui_play_list_phone_ar, this, true);
        }

    }

    lv = (ListView) findViewById(R.id.lv);
    tv_title = (TextView) findViewById(R.id.tv_title);
    btn_open_menu = (Button) findViewById(R.id.btn_open_menu);
    btn_open_info = (Button) findViewById(R.id.btn_open_info);



    btn_open_menu.setOnClickListener(this);
    btn_open_info.setOnClickListener(this);

    AD_UNIT_ID=c.getString(R.string.AD_UNIT_ID);
    if(AD_UNIT_ID.length()>1){
        initAds();
    }
    lv.setAdapter(ad);
}

private void initAds() {
    ad1=new AdView(ac,  AdSize.SMART_BANNER,AD_UNIT_ID);
    ad2=new AdView(ac,  AdSize.SMART_BANNER,AD_UNIT_ID);

    lv.addHeaderView(ad1);
    lv.addFooterView(ad2);

    reLoadAds();

}

public void reLoadAds() {
    ad1.loadAd(new AdRequest());
    ad2.loadAd(new AdRequest());

}

public UIPlayList refreshData(PlayListModel pl) {
    feed.clear();
    feed.addAll(0, pl.getVideos());

    if (isTablet(c)) {
        if(Consts.isEnglish()){
            ad = new PlayListAdapterSliding(c, R.layout.row_video_tab, feed,ac);
        }else{
            ad = new PlayListAdapterSliding(c, R.layout.row_video_tab_ar, feed,ac);
        }

    } else {
        if(Consts.isEnglish()){
            ad = new PlayListAdapterSliding(c, R.layout.row_video_phone, feed,ac);
        }else{
            ad = new PlayListAdapterSliding(c, R.layout.row_video_phone_ar, feed,ac);
        }

    }

    tv_title.setText(pl.getTitle());

    lv.setAdapter(ad);
    lv.setOnItemClickListener(this);
    ad.notifyDataSetChanged();

    if(ad1!=null){
        reLoadAds();
    } 

    return this;
}

public static boolean isTablet(Context c) {
    DisplayMetrics displayMetrics = c.getResources().getDisplayMetrics();
    int width = displayMetrics.widthPixels / displayMetrics.densityDpi;
    int height = displayMetrics.heightPixels / displayMetrics.densityDpi;

    double screenDiagonal = Math.sqrt(width * width + height * height);
    System.out.println("screenDiagonal : " + screenDiagonal);

    return (screenDiagonal >= 6.0);
}

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int index, long arg3) {
    VideoModel video = feed.get(index-1);
    listener.onOpenVideo(video);
}

@Override
public void onClick(View v) {
    if (v == btn_open_info) {
        listener.openInfo();
    }else   if (v == btn_open_menu) {
        listener.showMenu();
    }

}

}

【问题讨论】:

  • 你为什么要做VideoModel video = feed.get(index-1); 而不仅仅是index?当 index 为 0 时,它会尝试在 -1 处获取索引,这会为您提供 IndexOutOfBounds Exception
  • 我认为尝试删除 = 作为回报 (screenDiagonal >= 6.0);
  • @ManetiVinay 只是对return true 说,如果该表达式是true,否则return false
  • 如果您在 Airpush 广告中仍然遇到问题,请在此处发表评论,我可以帮助您。

标签: android sdk airpush


【解决方案1】:

根据您的 logcat,您将在 onItemClick() 中获得 ArrayIndexOutOfBoundsException。这是因为您从 AdapterView 的从零开始的 position 中减去 1,因此如果 index 为 0,您将得到 -1,这显然超出了您的 Array 的范围。

将其更改为仅使用 index

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int index, long arg3) {
    VideoModel video = feed.get(index);  // Here

【讨论】:

    【解决方案2】:

    或者,

    刚才我注意到你的代码,你没有导入任何 Airpush SDK 类,而是我可以看到 Admob SDK 导入的语法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      相关资源
      最近更新 更多