【问题标题】:setContentView(R.layout.activity_main) causes app to crashsetContentView(R.layout.activity_main) 导致应用程序崩溃
【发布时间】:2017-09-28 16:26:35
【问题描述】:

为 android 制作一个计算器程序,我有一个 xml 文件,其中包含编写程序所需的所有按钮。它出现在 android studio 的设计部​​分,但是当我试图在 android 手机(不是模拟器;它在我的电脑上运行太慢)上运行我的应用程序时,它只会导致它崩溃。也不知道为什么。

这是我的 xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<layout>
    <GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:columnCount="4"
        android:rowCount="7"
        tools:context="com.example.pvtboromeo.calc.MainActivity">

        <EditText
            android:id="@+id/editText"
            android:background="@android:color/black"
            android:textColor="#FFFFFF"
            android:layout_row="0"
            android:layout_column="0"
            android:layout_columnSpan="4"
            android:layout_rowSpan="2"
            android:layout_rowWeight="2"
            android:layout_columnWeight="4"
            android:enabled="false"
            android:gravity="bottom|right"
            android:paddingRight="15sp"
            android:paddingBottom="15sp"
            android:textAlignment="gravity"
            android:textSize="40sp"/>

        <Button
            android:id="@+id/buttonC"
            android:layout_column="0"
            android:layout_columnWeight="1"
            android:layout_row="2"
            android:layout_rowWeight="1"
            android:background="@drawable/button_border"
            android:text="C"
            android:textSize="20sp" />

        <Button
            android:id="@+id/buttonNegative"
            android:layout_row="2"
            android:layout_column="1"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:background="@drawable/button_border"
            android:text="+/-"
            android:textSize="20sp"/>

        <Button
            android:id="@+id/buttonPercent"
            android:layout_row="2"
            android:layout_column="2"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:background="@drawable/button_border"
            android:text="%"
            android:textSize="20sp"/>

        <Button
            android:id="@+id/buttonDivide"
            android:layout_row="2"
            android:layout_column="3"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:background="@drawable/button_border2"
            android:text="/"
            android:textSize="20sp"/>

        <Button
            android:id="@+id/buttonSeven"
            android:layout_row="3"
            android:layout_column="0"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:background="@drawable/button_border"
            android:text="7"
            android:textSize="20sp" />

        <Button
            android:id="@+id/buttonEight"
            android:layout_row="3"
            android:layout_column="1"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:background="@drawable/button_border"
            android:text="8"
            android:textSize="20sp"/>

        <Button
            android:id="@+id/buttonNine"
            android:layout_row="3"
            android:layout_column="2"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:background="@drawable/button_border"
            android:text="9"
            android:textSize="20sp"/>

        <Button
            android:id="@+id/buttonMultiply"
            android:layout_row="3"
            android:layout_column="3"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:background="@drawable/button_border2"
            android:text="X"
            android:textSize="20sp"/>

        <Button
            android:id="@+id/buttonFour"
            android:layout_row="4"
            android:layout_column="0"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:background="@drawable/button_border"
            android:text="4"
            android:textSize="20sp" />

        <Button
            android:id="@+id/buttonFive"
            android:layout_row="4"
            android:layout_column="1"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:background="@drawable/button_border"
            android:text="5"
            android:textSize="20sp"/>

        <Button
            android:id="@+id/buttonSix"
            android:layout_row="4"
            android:layout_column="2"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:background="@drawable/button_border"
            android:text="6"
            android:textSize="20sp"/>

        <Button
            android:id="@+id/buttonSubtract"
            android:layout_row="4"
            android:layout_column="3"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:background="@drawable/button_border2"
            android:text="-"
            android:textSize="20sp"/>

        <Button
            android:id="@+id/buttonOne"
            android:layout_row="5"
            android:layout_column="0"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:background="@drawable/button_border"
            android:text="1"
            android:textSize="20sp" />

        <Button
            android:id="@+id/buttonTwo"
            android:layout_row="5"
            android:layout_column="1"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:background="@drawable/button_border"
            android:text="2"
            android:textSize="20sp"/>

        <Button
            android:id="@+id/buttonThree"
            android:layout_row="5"
            android:layout_column="2"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:background="@drawable/button_border"
            android:text="3"
            android:textSize="20sp"/>

        <Button
            android:id="@+id/buttonAdd"
            android:layout_row="5"
            android:layout_column="3"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:background="@drawable/button_border2"
            android:text="+"
            android:textSize="20sp"/>

        <Button
            android:id="@+id/buttonZero"
            android:layout_column="0"
            android:layout_columnSpan="2"
            android:layout_columnWeight="2"
            android:layout_row="6"
            android:layout_rowWeight="1"
            android:background="@drawable/button_border"
            android:text="0"
            android:textSize="20sp" />

        <Button
            android:id="@+id/buttonDecimal"
            android:layout_row="6"
            android:layout_column="2"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:background="@drawable/button_border"
            android:text="."
            android:textSize="20sp"/>

        <Button
            android:id="@+id/buttonEquals"
            android:layout_row="6"
            android:layout_column="3"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:background="@drawable/button_border2"
            android:text="="
            android:textSize="20sp"/>

    </GridLayout>
</layout>

这是我的 java 文件

package com.example.pvtboromeo.calc;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

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

没有 setContentView 代码,我的应用程序运行但没有显示(显然),但现在我的应用程序在我尝试运行它时崩溃。错误只是说“很遗憾,Calc+ 已停止。”

我是安卓开发新手。我错过了什么吗?我所有的语法似乎都很好。

注意:我还检查了是否导入了 android.R 而不是我的包 R,但它不存在...

编辑:所以我刚刚搞砸了一个测试项目,发现是 GridLayout 导致了应用程序崩溃。我正在使用 android 5.1.1 (Lolipop) 运行,不确定这是否有帮助。我相信它是 api 22。有没有办法解决这个问题?

【问题讨论】:

  • 如果你能添加堆栈跟踪会很有帮助。
  • 我其实是通过去掉开头和结尾的标签解决了这个问题。

标签: android xml crash setcontentview


【解决方案1】:

1) 将您的应用配置为使用数据绑定:

转到 build.gradle (Module:app) 并插入:

android {
    ....
     dataBinding { //line to insert
     enabled = true  //line to insert
}

}

1.1) 同步您的项目。

2) 插入你的布局标签:

xmlns:android="http://schemas.android.com/apk/res/android"

您的 xml 代码将像这样开始:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <GridLayout
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:columnCount="4"
        android:rowCount="7"
        tools:context="com.example.pvtboromeo.calc.MainActivity">

3) 重建您的项目

4) 运行您的项目。

如果您想了解有关数据绑定的更多信息,请查看:https://developer.android.com/topic/libraries/data-binding/index.html

祝你好运!

这是我的代码:

build.gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    defaultConfig {
        applicationId "your_app_id"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    dataBinding {
        enabled = true
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.+'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
}

主活动:

public class MainActivity extends AppCompatActivity {

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

        ActivityMainBinding activityMainBinding = DataBindingUtil
                .setContentView(this, R.layout.activity_main);

    }
}

记得在使用 ActivityMainBinding 之前重建项目。

【讨论】:

  • 我尝试使用数据绑定,但总是得到一个错误,说找不到资源 ActivityMainBinding 或其他东西哈哈。所以我放弃了绑定lol
  • 您是否在您的 MainActivity 中使用 ActivityMainBinding 类之前重建了您的项目?现在我将发布我的代码,您可以尝试使用它。
猜你喜欢
  • 1970-01-01
  • 2013-09-28
  • 1970-01-01
  • 2015-10-21
  • 2016-06-04
  • 2011-08-24
  • 2014-05-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多