2017-09-28 6 views
0

Faire un programme de calculatrice pour android et j'ai un fichier xml qui a tous les boutons nécessaires pour écrire le programme. Il apparaît dans la partie design d'android studio, mais quand j'essaye d'exécuter mon application sur un téléphone android (pas un émulateur, il tourne trop lentement sur mon pc), ça provoque juste un crash. Je ne sais pas pourquoi.setContentView (R.layout.activity_main) provoque le plantage de l'application

Ceci est mon fichier 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> 

Et ceci est mon fichier 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); 
    } 
} 

Sans le code setContentView, mes runs app mais rien ne s'affiche (évidemment), mais maintenant mes application se bloque quand j'essaie de l'exécuter. L'erreur dit juste 'Malheureusement, Calc + s'est arrêté.'

Je suis nouveau sur le développement android. Est-ce que je manque quelque chose? Toute ma syntaxe semble être bonne.

Note: J'ai également vérifié si android.R a été importé au lieu de mon colis R, mais ce n'est pas là ...

Edit: Je suis donc tout foiré autour d'un projet de test et a découvert que c'est GridLayout qui provoque le crash de l'application. Je cours en utilisant Android 5.1.1 (Lolipop) pas sûr si cela aide ou non. Je crois que c'est l'api 22. Y a-t-il un moyen de résoudre ce problème?

+0

Il serait utile si vous pouviez ajouter la trace de la pile. –

+0

J'ai effectivement résolu le problème en supprimant les balises au début et à la fin. – Vince

Répondre

0

1) configurer votre application pour utiliser la liaison de données:

aller à build.gradle (Module: app) et insérer:

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

}

1.1) SYNK votre projet.

2) insérer dans votre balise de mise en page:

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

Votre code xml commence comme ceci:

<?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) à nouveau votre projet

4) exécuter votre projet.

Si vous voulez plus d'informations sur les données regard liant ceci: https://developer.android.com/topic/libraries/data-binding/index.html

Bonne chance!

Ceci est mon code:

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' 
} 

MainActivity:

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); 

    } 
} 

Rappelez-vous de reconstruire le projet avant d'utiliser ActivityMainBinding.

+0

J'ai essayé d'utiliser la liaison de données mais j'ai toujours eu une erreur disant ne pas trouver de ressources ActivityMainBinding ou quelque chose lol. Donc j'ai abandonné sur lol de liaison – Vince

+0

Avez-vous reconstruire votre projet avant d'utiliser la classe ActivityMainBinding dans votre MainActivity ?? Maintenant, je vais poster mon code, donc vous pouvez essayer de l'utiliser. – moamsi