在编程方面我完全是个新手。我正在尝试使用 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/