2012-03-19 48 views
0

我想将AdWhirl添加到我的应用程序,但我决定从一个简单的“HelloWorld”开始,以确保我知道我在做什么。果然,我不......我从the AdWhirl Android SDK Setup page得到这段代码,但是当我尝试运行它时,我得到这个异常:java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.它发生在线layout.addView(adWhirlLayout, layoutParams),所以我试图removeView()作为异常消息建议以及removeAllViews(),但我仍然得到这个错误。AdWhirl导致IllegalStateException

下面是Java文件:

package hello.adwhirl; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.Gravity; 
import android.widget.LinearLayout; 
import android.widget.RelativeLayout; 
import android.widget.RelativeLayout.LayoutParams; 
import android.widget.TextView; 

import com.adwhirl.AdWhirlLayout; 
import com.adwhirl.AdWhirlLayout.AdWhirlInterface; 
import com.adwhirl.AdWhirlManager; 
import com.adwhirl.AdWhirlTargeting; 

public class HelloAdWhirl extends Activity implements AdWhirlInterface { 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     AdWhirlManager.setConfigExpireTimeout(1000 * 60 * 5); 

     AdWhirlTargeting.setAge(23); 
     AdWhirlTargeting.setGender(AdWhirlTargeting.Gender.MALE); 
     AdWhirlTargeting.setKeywords("online games gaming"); 
     AdWhirlTargeting.setPostalCode("94123"); 
     AdWhirlTargeting.setTestMode(false); 

     AdWhirlLayout adWhirlLayout = (AdWhirlLayout) findViewById(R.id.adwhirl_layout); 

     TextView textView = new TextView(this); 
     RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
      LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
     int diWidth = 320; 
     int diHeight = 52; 
     int density = (int) getResources().getDisplayMetrics().density; 

     adWhirlLayout.setAdWhirlInterface(this); 
     adWhirlLayout.setMaxWidth((int) (diWidth * density)); 
     adWhirlLayout.setMaxHeight((int) (diHeight * density)); 

     layoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL); 
     textView.setText("Below AdWhirlLayout"); 

     LinearLayout layout = (LinearLayout) findViewById(R.id.layout_main); 

     layout.setGravity(Gravity.CENTER_HORIZONTAL); 
     layout.addView(adWhirlLayout, layoutParams); 
     layout.addView(textView, layoutParams); 
     layout.invalidate(); 
    } 

    public void adWhirlGeneric() { 
     // TODO Auto-generated method stub 
     System.out.println("Do stuff"); 
    } 
} 

这是我的main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="fill_parent" 
android:layout_height="fill_parent" android:id="@+id/layout_main"> 
<com.adwhirl.AdWhirlLayout 
    android:layout_height="wrap_content" android:layout_width="fill_parent" 
    android:id="@+id/adwhirl_layout"></com.adwhirl.AdWhirlLayout> 
</LinearLayout> 

和错误:

03-19 15:35:54.218: ERROR/AndroidRuntime(3510): FATAL EXCEPTION: main 
03-19 15:35:54.218: ERROR/AndroidRuntime(3510): java.lang.RuntimeException: Unable to start activity ComponentInfo{hello.adwhirl/hello.adwhirl.HelloAdWhirl}: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 
03-19 15:35:54.218: ERROR/AndroidRuntime(3510):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2833) 
03-19 15:35:54.218: ERROR/AndroidRuntime(3510):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2854) 
03-19 15:35:54.218: ERROR/AndroidRuntime(3510):  at android.app.ActivityThread.access$2300(ActivityThread.java:136) 
03-19 15:35:54.218: ERROR/AndroidRuntime(3510):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2179) 
03-19 15:35:54.218: ERROR/AndroidRuntime(3510):  at android.os.Handler.dispatchMessage(Handler.java:99) 
03-19 15:35:54.218: ERROR/AndroidRuntime(3510):  at android.os.Looper.loop(Looper.java:143) 
03-19 15:35:54.218: ERROR/AndroidRuntime(3510):  at android.app.ActivityThread.main(ActivityThread.java:5061) 
03-19 15:35:54.218: ERROR/AndroidRuntime(3510):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-19 15:35:54.218: ERROR/AndroidRuntime(3510):  at java.lang.reflect.Method.invoke(Method.java:521) 
03-19 15:35:54.218: ERROR/AndroidRuntime(3510):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
03-19 15:35:54.218: ERROR/AndroidRuntime(3510):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
03-19 15:35:54.218: ERROR/AndroidRuntime(3510):  at dalvik.system.NativeStart.main(Native Method) 
03-19 15:35:54.218: ERROR/AndroidRuntime(3510): Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 
03-19 15:35:54.218: ERROR/AndroidRuntime(3510):  at android.view.ViewGroup.addViewInner(ViewGroup.java:1992) 
03-19 15:35:54.218: ERROR/AndroidRuntime(3510):  at android.view.ViewGroup.addView(ViewGroup.java:1887) 
03-19 15:35:54.218: ERROR/AndroidRuntime(3510):  at android.view.ViewGroup.addView(ViewGroup.java:1867) 
03-19 15:35:54.218: ERROR/AndroidRuntime(3510):  at hello.adwhirl.HelloAdWhirl.onCreate(HelloAdWhirl.java:50) 
03-19 15:35:54.218: ERROR/AndroidRuntime(3510):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1066) 
03-19 15:35:54.218: ERROR/AndroidRuntime(3510):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2797) 
03-19 15:35:54.218: ERROR/AndroidRuntime(3510):  ... 11 more 
+0

我们需要你的堆栈跟踪和罪魁祸首高亮显示。 – Snicolas 2012-03-19 19:34:35

+0

我会如何突出罪魁祸首?我在开头提到它 – Stephanie 2012-03-19 19:39:35

回答

2

你AdWhirlLayout实际上已经定义了XML,所以你不需要再次添加它(你可以删除layout.addView(adWhirlLayout, layoutParams);行。只要你有等你的清单文件中正确地ADWHIRL_KEY,这应该正常工作。

+0

当我删除该行时,它会运行,但除了随机文本视图添加了“下面的AdWhirlLayout”之外,没有任何内容显示。我在清单文件中有adwhirl键。 – Stephanie 2012-03-19 19:42:19

+0

我只是看着logcat,意识到它没有显示,因为没有轮播广告。 – Stephanie 2012-03-19 20:01:19

相关问题