java - Android AdMob XML 代码与 ListView

标签 java android xml admob

在编程方面我完全是个新手。我正在尝试使用 Google Play 服务库将 AdMob 广告广告到此 ListView 教程应用程序。我按照 Google 的说明进行操作,但当我尝试运行该应用程序时,它不断崩溃,我不知道为什么......

主要 XML

<LinearLayout 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:orientation="vertical">

<com.google.ads.AdView
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
android:id="@+id/adView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
ads:adUnitId="123456789"
ads:adSize="BANNER"
ads:testDevices="TEST_EMULATOR, TEST_DEVICE_ID"
ads:loadAdOnCreate="true"/>

<ListView
  android:id="@+id/list"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:divider="#b5b5b5"
  android:dividerHeight="1dp"
  android:listSelector="@drawable/list_selector">
</ListView>



</LinearLayout>

主要 Activity Java

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.SimpleAdapter;

public class WeatherActivity extends Activity {

// XML node keys
static final String KEY_TAG = "weatherdata"; // parent node
static final String KEY_ID = "id";
static final String KEY_CITY = "city";
static final String KEY_TEMP_C = "tempc";
static final String KEY_TEMP_F = "tempf";
static final String KEY_CONDN = "condition";
static final String KEY_SPEED = "windspeed";
static final String KEY_ICON = "icon";

// List items 
ListView list;
BinderData adapter = null;
List<HashMap<String,String>> weatherDataCollection;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    try {


        DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
        Document doc = docBuilder.parse (getAssets().open("weatherdata.xml"));

        weatherDataCollection = new ArrayList<HashMap<String,String>>();

        // normalize text representation
        doc.getDocumentElement ().normalize ();

        NodeList weatherList = doc.getElementsByTagName("weatherdata");

        HashMap<String,String> map = null;

        for (int i = 0; i < weatherList.getLength(); i++) {

               map = new HashMap<String,String>(); 

               Node firstWeatherNode = weatherList.item(i);

                if(firstWeatherNode.getNodeType() == Node.ELEMENT_NODE){

                    Element firstWeatherElement = (Element)firstWeatherNode;
                    //-------
                    NodeList idList = firstWeatherElement.getElementsByTagName(KEY_ID);
                    Element firstIdElement = (Element)idList.item(0);
                    NodeList textIdList = firstIdElement.getChildNodes();
                    //--id
                    map.put(KEY_ID, ((Node)textIdList.item(0)).getNodeValue().trim());

                    //2.-------
                    NodeList cityList = firstWeatherElement.getElementsByTagName(KEY_CITY);
                    Element firstCityElement = (Element)cityList.item(0);
                    NodeList textCityList = firstCityElement.getChildNodes();
                    //--city
                    map.put(KEY_CITY, ((Node)textCityList.item(0)).getNodeValue().trim());

                    //3.-------
                    NodeList tempList = firstWeatherElement.getElementsByTagName(KEY_TEMP_C);
                    Element firstTempElement = (Element)tempList.item(0);
                    NodeList textTempList = firstTempElement.getChildNodes();
                    //--city
                    map.put(KEY_TEMP_C, ((Node)textTempList.item(0)).getNodeValue().trim());

                    //4.-------
                    NodeList condList = firstWeatherElement.getElementsByTagName(KEY_CONDN);
                    Element firstCondElement = (Element)condList.item(0);
                    NodeList textCondList = firstCondElement.getChildNodes();
                    //--city
                    map.put(KEY_CONDN, ((Node)textCondList.item(0)).getNodeValue().trim());

                    //5.-------
                    NodeList speedList = firstWeatherElement.getElementsByTagName(KEY_SPEED);
                    Element firstSpeedElement = (Element)speedList.item(0);
                    NodeList textSpeedList = firstSpeedElement.getChildNodes();
                    //--city
                    map.put(KEY_SPEED, ((Node)textSpeedList.item(0)).getNodeValue().trim());

                    //6.-------
                    NodeList iconList = firstWeatherElement.getElementsByTagName(KEY_ICON);
                    Element firstIconElement = (Element)iconList.item(0);
                    NodeList textIconList = firstIconElement.getChildNodes();
                    //--city
                    map.put(KEY_ICON, ((Node)textIconList.item(0)).getNodeValue().trim());

                    //Add to the Arraylist
                    weatherDataCollection.add(map);
            }       
        }


        BinderData bindingData = new BinderData(this,weatherDataCollection);


        list = (ListView) findViewById(R.id.list);

        Log.i("BEFORE", "<<------------- Before SetAdapter-------------->>");

        list.setAdapter(bindingData);

        Log.i("AFTER", "<<------------- After SetAdapter-------------->>");

        // Click event for single list row
        list.setOnItemClickListener(new OnItemClickListener() {

            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {

                switch (position) {
                case 0:
                 Intent newActivity0 = new Intent(WeatherActivity.this, SecondActivity.class);     
                 startActivity(newActivity0);
                break;}

                switch (position) {
                case 1:
                 Intent newActivity1 = new Intent(WeatherActivity.this, ThirdActivity.class);     
                 startActivity(newActivity1);
                break; }

        }});

    }

    catch (IOException ex) {
        Log.e("Error", ex.getMessage());
    }
    catch (Exception ex) {
        Log.e("Error", "Loading exception");
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
}

日志猫

05-28 19:16:27.913: E/AndroidRuntime(32536): FATAL EXCEPTION: main
05-28 19:16:27.913: E/AndroidRuntime(32536): Process: vatsag.samples.weatherdisplay, PID: 32536
05-28 19:16:27.913: E/AndroidRuntime(32536): java.lang.RuntimeException: Unable to start activity ComponentInfo{vatsag.samples.weatherdisplay/vatsag.samples.weatherdisplay.WeatherActivity}: android.view.InflateException: Binary XML file line #7: Error inflating class com.google.ads.AdView
05-28 19:16:27.913: E/AndroidRuntime(32536):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2334)
05-28 19:16:27.913: E/AndroidRuntime(32536):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2392)
05-28 19:16:27.913: E/AndroidRuntime(32536):    at android.app.ActivityThread.access$900(ActivityThread.java:169)
05-28 19:16:27.913: E/AndroidRuntime(32536):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1280)
05-28 19:16:27.913: E/AndroidRuntime(32536):    at android.os.Handler.dispatchMessage(Handler.java:102)
05-28 19:16:27.913: E/AndroidRuntime(32536):    at android.os.Looper.loop(Looper.java:146)
05-28 19:16:27.913: E/AndroidRuntime(32536):    at android.app.ActivityThread.main(ActivityThread.java:5487)
05-28 19:16:27.913: E/AndroidRuntime(32536):    at java.lang.reflect.Method.invokeNative(Native Method)
05-28 19:16:27.913: E/AndroidRuntime(32536):    at java.lang.reflect.Method.invoke(Method.java:515)
05-28 19:16:27.913: E/AndroidRuntime(32536):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
05-28 19:16:27.913: E/AndroidRuntime(32536):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
05-28 19:16:27.913: E/AndroidRuntime(32536):    at dalvik.system.NativeStart.main(Native Method)
05-28 19:16:27.913: E/AndroidRuntime(32536): Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class com.google.ads.AdView
05-28 19:16:27.913: E/AndroidRuntime(32536):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713)
05-28 19:16:27.913: E/AndroidRuntime(32536):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
05-28 19:16:27.913: E/AndroidRuntime(32536):    at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
05-28 19:16:27.913: E/AndroidRuntime(32536):    at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
05-28 19:16:27.913: E/AndroidRuntime(32536):    at android.view.LayoutInflater.inflate(LayoutInflater.java:354)
05-28 19:16:27.913: E/AndroidRuntime(32536):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:366)
05-28 19:16:27.913: E/AndroidRuntime(32536):    at android.app.Activity.setContentView(Activity.java:2031)
05-28 19:16:27.913: E/AndroidRuntime(32536):    at vatsag.samples.weatherdisplay.WeatherActivity.onCreate(WeatherActivity.java:47)
05-28 19:16:27.913: E/AndroidRuntime(32536):    at android.app.Activity.performCreate(Activity.java:5451)
05-28 19:16:27.913: E/AndroidRuntime(32536):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
05-28 19:16:27.913: E/AndroidRuntime(32536):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
05-28 19:16:27.913: E/AndroidRuntime(32536):    ... 11 more
05-28 19:16:27.913: E/AndroidRuntime(32536): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.ads.AdView" on path: DexPathList[[zip file "/data/app/vatsag.samples.weatherdisplay-8.apk"],nativeLibraryDirectories=[/data/app-lib/vatsag.samples.weatherdisplay-8, /vendor/lib, /system/lib]]
05-28 19:16:27.913: E/AndroidRuntime(32536):    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:67)
05-28 19:16:27.913: E/AndroidRuntime(32536):    at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
 05-28 19:16:27.913: E/AndroidRuntime(32536):   at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
 05-28 19:16:27.913: E/AndroidRuntime(32536):   at android.view.LayoutInflater.createView(LayoutInflater.java:565)
05-28 19:16:27.913: E/AndroidRuntime(32536):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702)
05-28 19:16:27.913: E/AndroidRuntime(32536):    ... 21 more

最佳答案

最新版本中的软件包名称已更改。

更改您的 AdView 以匹配以下内容:com.google.android.gms.ads.AdView

以下是有关进行所有更改的完整教程: https://developers.google.com/mobile-ads-sdk/docs/admob/play-migration

关于java - Android AdMob XML 代码与 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23924827/

相关文章:

java - 如何修改此代码以使数组中的每个偶数索引为真?

java - 如何在所有微服务中维护相同的 Spring Boot 版本?

Android:如何从状态栏通知创建的 PendingIntent 访问 AsyncTask?

android - 如何在 ListView 中淡出标题,如 whatsapp

java - 如何从另一个 xml 文件访问我的 ID?

javascript - 此函数在页面加载时运行,但只发生警报 1 和 2,而不是警报 3。阻止警报 3 执行的错误是什么?

java - 生产者消费者——使用Executors.newFixedThreadPool

java/sql 比较两个整数

android - 制作私有(private)文件夹

xml - 每个命名空间都有一个 targetNamespace 吗?