Développeur d'application Android, sélecteur de numéros personnalisé pour l'API niveau 8

StackOverflow https://stackoverflow.com//questions/23061544

  •  26-12-2019
  •  | 
  •  

Question

J'essaie de créer un sélecteur de numéros personnalisé pour les applications qui nécessitent au minimum le niveau d'API 8. Jusqu'à présent, j'ai obtenu ce code, c'est simple mais je ne sais pas comment corriger cette erreur que j'obtiens.

Le code jusqu'à présent est le suivant :

package com.example.symbol_temp ;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends ActionBarActivity {

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

        Integer counter=0;
        Button add,sub;
        final TextView display;

        add = (Button) findViewById(R.id.plus);
        sub = (Button) findViewById(R.id.minus);
        display = (TextView) findViewById(R.id.showtemperature);

        add.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
            counter++;
            display.setText( "" + counter);
            }
        });

        sub.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
            counter--;
            display.setText( "" + counter);
            }
        });

        }

}

et le XML est le suivant :

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.symbol_temp.MainActivity$PlaceholderFragment" >

    <TextView
        android:id="@+id/showtemperature"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <Button
        android:id="@+id/minus"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/showtemperature"
        android:layout_centerHorizontal="true"
        android:text="+" 
        android:onClick="add"/>

    <Button
        android:id="@+id/plus"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/minus"
        android:layout_below="@+id/showtemperature"
        android:text="-" />

</RelativeLayout>

Obtenir ceci dans LogCat :

04-14 13:31:59.222: E/AndroidRuntime(359): FATAL EXCEPTION: main
04-14 13:31:59.222: E/AndroidRuntime(359): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.symbol_temp/com.example.symbol_temp.MainActivity}: java.lang.NullPointerException
04-14 13:31:59.222: E/AndroidRuntime(359):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
04-14 13:31:59.222: E/AndroidRuntime(359):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
04-14 13:31:59.222: E/AndroidRuntime(359):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
04-14 13:31:59.222: E/AndroidRuntime(359):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
04-14 13:31:59.222: E/AndroidRuntime(359):  at android.os.Handler.dispatchMessage(Handler.java:99)
04-14 13:31:59.222: E/AndroidRuntime(359):  at android.os.Looper.loop(Looper.java:123)
04-14 13:31:59.222: E/AndroidRuntime(359):  at android.app.ActivityThread.main(ActivityThread.java:4627)
04-14 13:31:59.222: E/AndroidRuntime(359):  at java.lang.reflect.Method.invokeNative(Native Method)
04-14 13:31:59.222: E/AndroidRuntime(359):  at java.lang.reflect.Method.invoke(Method.java:521)
04-14 13:31:59.222: E/AndroidRuntime(359):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
04-14 13:31:59.222: E/AndroidRuntime(359):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
04-14 13:31:59.222: E/AndroidRuntime(359):  at dalvik.system.NativeStart.main(Native Method)
04-14 13:31:59.222: E/AndroidRuntime(359): Caused by: java.lang.NullPointerException
04-14 13:31:59.222: E/AndroidRuntime(359):  at com.example.symbol_temp.MainActivity.onCreate(MainActivity.java:24)
04-14 13:31:59.222: E/AndroidRuntime(359):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
04-14 13:31:59.222: E/AndroidRuntime(359):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
04-14 13:31:59.222: E/AndroidRuntime(359):  ... 11 more

Je pense avoir changé quelques choses, la ligne numéro 24 est la suivante :

add.setOnClickListener(new View.OnClickListener() {

Merci pour votre aide.

Était-ce utile?

La solution

D'après votre commentaire et

tools:context="com.example.symbol_temp.MainActivity$PlaceholderFragment"

Je suppose que les vues appartiennent à fragment_main.xml.

Vous gonflez la mauvaise mise en page.Et vous recherchez la vue dans une mauvaise mise en page.

Change ça

setContentView(R.layout.activity_main);

à

setContentView(R.layout.fragment_main);

Change aussi ceci

Integer counter=0;

à

int counter; // primitive data type
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
     counter =0;

Autres conseils

Votre variable de comptoir est déclarée à l'intérieur de la méthode, que lorsque vous essayez, déplacez vos variables au-dessus de la méthode Oncreate.

NOTE:
Cette réponse est publiée comme réponse au commentaire posté par la personne qui a posé cette question.J'ai posté ceci comme réponse par souci de concision

Utilisez cette méthode
protected void onSaveInstanceState(Bundle savedInstance) { super.onSaveInstanceState(savedInstance); savedInstance.putInt("myCounter",counter); }
Puis dans

  onCreate(Bundle savedInstanceState){ 
  if(savedInstanceState != null)
  counter = savedInstanceState.getInt("myCounter")}


À partir de l'Instance sauvegardée qui est l'objet de la classe Bundle, vous pouvez récupérer votre valeur enregistrée et l'attribuer lors de la création.N'oubliez pas de vérifier si la valeur est nulle, car si vous exécutez votre application pour la première fois, votre compteur risque de ne pas encore être instancié et il générera une exception.
De plus, lorsque vous récupérez les valeurs enregistrées, assurez-vous de ne pas les écraser.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top