繁体   English   中英

在模拟器上执行应用程序时出现 Android 运行时错误

[英]Android Runtime Error while executing Application on emulator

我刚刚开始学习Android开发。

在运行我的 android 应用程序时出现以下错误代码。

 E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.karan.newapp, PID: 3385 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.karan.newapp/com.example.karan.newapp.mainActivity}: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) at android.app.ActivityThread.access$800(ActivityThread.java:151) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. at android.view.ViewGroup.addViewInner(ViewGroup.java:3936) at android.view.ViewGroup.addView(ViewGroup.java:3786) at android.view.ViewGroup.addView(ViewGroup.java:3758) at com.example.karan.newapp.mainActivity.onCreate(mainActivity.java:26) at android.app.Activity.performCreate(Activity.java:5990) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) at android.app.ActivityThread.access$800(ActivityThread.java:151) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)


这是我的代码示例。 请在下面帮助我。

 package com.example.karan.newapp; import android.app.Activity; import android.os.Bundle; import android.widget.RelativeLayout; import android.widget.Button; import android.graphics.Color; public class mainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); RelativeLayout myLayout = new RelativeLayout(this); Button myButton = new Button(this); myLayout.addView(myButton); myLayout.setBackgroundColor(Color.BLUE); myButton.setBackgroundColor(Color.YELLOW); myButton.setText(R.string.myButton); RelativeLayout.LayoutParams buttonDetails = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT ); buttonDetails.addRule(RelativeLayout.CENTER_HORIZONTAL); buttonDetails.addRule(RelativeLayout.CENTER_VERTICAL); myLayout.addView(myButton,buttonDetails); setContentView(myLayout); } }
………………………………………………………………………………………………………………………………………………………… ………………………………………………………………………………………………………………………………………………………… ………………………………………………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………………………………………………… ………………………………………………………………………………………………………………………………………………………… ………………………………………………………………………………………………………………………………………………………… ………………………………………………………………………………………………………………………………………………………… ………………………………………………………………………………………………………………………………………………………… ………………………………………………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………………………………………………………………………

我认为你的代码对于一个基本的活动来说有些复杂,我会指出一些错误,但最好在使用 android studio 之前学习一些基础知识。

  1. 您的java类名以小写字母mainActivity ,最好不要使用它,始终在类名开头使用大写字母,例如: MainActivity

  2. 使用setContentView();将您的布​​局文件链接到 java 类setContentView(); ,尽量使用布局的id来调用,是最好的做法。 例如: setContentView(R.layout.activity_main); .

  3. 由于您的错误指示java.lang.RuntimeException: Unable to start activity ,您的活动文件存在问题。 我认为您是在setContentView();之前声明和使用按钮setContentView(); ,我们可以在setContentView();之后在我们的java类中声明和使用按钮等代码setContentView(); 以便正确显示活动。

例如:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

        Button myButton = new Button(this);
        ....
        ....
          }
  1. 为了改变布局的背景颜色,按钮和其他属性,如从字符串中赋予按钮名称等,最好在其对应的 XML 布局资源文件中进行更改

您使用的那个:

    myLayout.setBackgroundColor(Color.BLUE);
    myButton.setBackgroundColor(Color.YELLOW);
    myButton.setText(R.string.myButton);
    RelativeLayout.LayoutParams buttonDetails =
           new  RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WRAP_CONTENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT
            );

最简单和更合适的方法是:

    <Button
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:text="@string/stringname"
    android:textStyle="bold"
    android:background="@color/colorAccent"
    android:textColor="@color/colorPrimary"
    />

卡兰,看起来你的问题可能出问题了

   myLayout.addView(myButton,buttonDetails);

在此之前,您已经将按钮添加到布局中。

   myLayout.addView(myButton);

知道如何以编程方式创建布局是很好的,但我强烈建议您改为使用 XML 来执行此操作,并且仅当您需要在运行时进行更改时才使用代码执行此操作。 此外,当您使用 XML 时,您将获得设计编辑器,您可以在其中直观地看到它的外观。

刚刚从我的代码中删除了一行

myLayout.addView(myButton);

它工作得很好

实际上存在问题,因为要求相同的按钮对象在屏幕上显示两次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM