2016-05-04 13 views
-1

Ok, ich erstelle ein Programm, das eine normale globale Klasse verwendet, aber es funktioniert nicht. Ich kann den Wert von Variablen aus dem globalen abrufen, aber ich kann keinen neuen Wert festlegen.kann mir jemand mit meinen globalen Variablen helfen?

Ich habe ein wirklich kurzes Testprogramm erstellt, nur um das zum Laufen zu bringen, damit ich es zu meinem anderen, viel größeren Programm ändern kann.

In diesem kleinen Programm, das ich in der Mitte

alles zu tun, ist es entworfen, um eine Textview und Bearbeiten von Text mit einem Knopf habe, wenn die Schaltfläche geklickt wird das, was in den editText eingegeben wurde und es in einem Variable und die Variable

dann zugleich die Variable von Globals und auf Globals auf diese Variable ... EASY ...

aber es wird nicht bekommen Globals senden, um den Textview Text speichern ...

kann jemand er Bitte, bitte?

Hier ist der globale Code, den ich verwende.

package com.example.arnoldray007.globalstest; 

    /** 
    * Created by arnoldray007 on 5/3/2016. 
    */ 
    public class Globals 
    { 
     private static Globals instance; 

     //this is the global variable 
     private String received; 

     //this restricts the constructor from being instantiated 
     private Globals(){} 

     public void setReceived(String r) 
     { 
      this.received = r; 
     } 

     public String getReceived() 
     { 
      return this.received; 
     } 


     //this is the global variable 
     private String send = "Sorry im busy right now."; 

     public void setSend(String s) 
     { 
      this.send = s; 
     } 

     public String getSend() 
     { 
      return this.send; 
     } 
     public static synchronized Globals getInstance() 
     { 
      if(instance == null) 
      { 
       instance = new Globals(); 
      } 
      return instance; 
     } 

und hier ist der MainActivity Code, den ich

public class MainActivity extends AppCompatActivity 
{ 
    Globals g = Globals.getInstance(); 
    String received = g.getReceived(); //this retrieves the variable 


    Button button; 
    EditText editText; 
    TextView textView; 
    String temp; 

    public void myClickThree(View v)//this is my onclickThree for my refresh button 
    { 
     temp = editText.getText().toString(); 
     g.setReceived(temp); //this sends the new message to the global variable adding it to it 
     received = g.getReceived(); 
     editText.setText(received); 
    } 

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

     button = (Button) findViewById(R.id.button); 
     editText = (EditText) findViewById(R.id.editText); 
     textView = (TextView) findViewById(R.id.textView); 
    } 
} 

Vielen Dank für jede Hilfe, die ich ......

Ich erhalte einen Fehler jetzt jemand verwende kann bekommen Sag mir, was das bedeutet?

05-05 09:41:47.476 9601-9601/com.example.arnoldray007.arnoldfinalproject E/AndroidRuntime: FATAL EXCEPTION: main 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.arnoldray007.arnoldfinalproject/com.example.arnoldray007.arnoldfinalproject.Received_messages}: java.lang.NullPointerException 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
     at android.app.ActivityThread.access$600(ActivityThread.java:130) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
     at android.os.Handler.dispatchMessage(Handler.java:99) 
     at android.os.Looper.loop(Looper.java:137) 
     at android.app.ActivityThread.main(ActivityThread.java:4745) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:511) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
     at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.NullPointerException 
     at android.widget.TextView.append(TextView.java:3118) 
     at com.example.arnoldray007.arnoldfinalproject.Received_messages.onCreate(Received_messages.java:91) 
     at android.app.Activity.performCreate(Activity.java:5008) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)  
     at android.app.ActivityThread.access$600(ActivityThread.java:130)  
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)  
     at android.os.Handler.dispatchMessage(Handler.java:99)  
     at android.os.Looper.loop(Looper.java:137)  
     at android.app.ActivityThread.main(ActivityThread.java:4745)  
     at java.lang.reflect.Method.invokeNative(Native Method)  
     at java.lang.reflect.Method.invoke(Method.java:511)  
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)  
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)  
     at dalvik.system.NativeStart.main(Native Method)  
+0

ein Tippfehler * Test nicht –

+1

Text Ich glaube, ich Ihnen, indem ich Ihnen globale Variablen helfen könnte, in der Regel, eine schreckliche Idee. –

+0

Dies ist ein Testprogramm lol wird nicht verwendet, nur um herauszufinden, wie der Wert meiner globalen Variable –

Antwort

0

Es ist nichts falsch mit dem Code, den Sie angezeigt haben, außer Ihr Kommentar scheint irreführend.

diese sendet die neue Nachricht an die globale Variable sie es

nichts hinzugefügt wird, um etwas hinzugefügt. Weil deine Methode dort nur eine Zuordnung vornimmt.

public void setReceived(String r) 
{ 
    this.received = r; 
} 

Wenn Sie, dass Ihre Klasse sehen wollen, ist tatsächlich arbeiten, sollten Sie vielleicht etwas mehr tun, als Text aus einem EditText erhalten und die Zeichenfolge wieder in den EditText zuweisen. Das wird nur erscheinen wie nichts passiert ist.

Also, versuchen Sie diese stattdessen in onCreate()

g = Globals.getInstance(); 

button = (Button) findViewById(R.id.button); 
editText = (EditText) findViewById(R.id.editText); 
textView = (TextView) findViewById(R.id.textView); 

button.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     String temp = editText.getText().toString(); 
     g.setReceived(temp); 
     received = g.getReceived(); 
     textView.append("\n"+received); 
    } 
}); 
+0

Vielen Dank, das funktioniert gut auf meiner Testanwendung, aber wenn ich versuche, es auf meiner realen Anwendung zu implementieren, erscheint es mit einem Fehler –

+0

Der Fehler 'java.lang.NullPointerException bei android.widget.TextView.append' bedeutet Sie Initialisiere dein TextView nicht oder findViewById gab Null zurück –

+0

Ich verstehe nicht, weil ich es tat. Hier ist, was ich für die Anzeige habe (EditText editText9, changeEditText;) --- (changeEditText = (EditText) findViewById (R.id.changeEditText);) --- erinnern, dass ich sagte, dass der Fehler von meinem echten Programm kam nicht das Testprogramm ..... das Testprogramm funktioniert gut mit der Antwort unten ... aber wenn ich die Korrektur an meinem Programm anzeige, gibt es mir diesen Fehler ... –

1

in Singletonmuster getInstance() soll sein:

private static Globals instance; 

public static Globals getInstance() { 
    if (instance == null) 
     instance = new Globals(); 
    return instance; 
} 

Sind Sie sicher, dass innerhalb Globals-Klasse Körper genau diesen Code haben?

EDIT:

Ich denke, für diese Art von Problem die beste Lösung ist eine übergeordnete Klasse Anwendung verwenden, in dem Sie alle globalen stopft mantain. Sie werden Tausende von Tutorial auf diesem Android-Programmierungsmuster finden, google "Erweiterung der Anwendung Android".

+0

Mine ist anders –

+0

Das kann das Problem sein. Wenn Sie die Instanz bei jedem Aufruf von getInstance() erstellen, sieht es so aus, als ob das Objekt die neuen Werte nicht speichert. – Frecklefoot

+1

tat man sieht, was im –