2017-11-27 31 views
1

私は私のアプリでAndroidのグローバル変数を作成し、私はgetApplicationと私のactivitysでそれにアクセスしようとすると、私はエラーを取得:方法getApplicationを(解決できません)

Cannot resolve method getApplication()

アプリケーションを拡張するクラスで私のコード:

package com.example.user.app; 

    import android.app.Application; 


    public class answer extends Application { 

      private String answer1; 

      public String getSomeVariable() { 
       return answer1; 
       } 

      public void setanswer1(String one) { 
       this.answer1 = one; 
       } 
     } 

活動における私のコード:あなたが三菱UFJ証券Androidマニフェストで

 package com.example.user.pilz_app; 

     import android.content.Intent; 
     import android.support.design.widget.FloatingActionButton; 
     import android.support.design.widget.Snackbar; 
     import android.support.v7.app.AppCompatActivity; 
     import android.os.Bundle; 
     import android.support.v7.widget.Toolbar; 
     import android.view.View; 
     import android.widget.ImageButton; 

     public class QuestionOne extends AppCompatActivity { 

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

      ImageButton half = findViewById(R.id.half); 
      half.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
      Intent intent = new Intent(QuestionOne.this, QuestionTwo.class); 
      startActivity(intent); 
      ((answer) this.getApplication()).setanswer1("half"); 
      } 

     }); 
+0

のいずれかに((answer) this.getApplication()).setanswer1("half") を交換する必要がありますが、あなたがマニフェストに 'answer'クラスを登録しましたか? –

+0

'QuestionOne.this.getApplication()'を試してください –

+0

あなたのコードをテストしましたが、これもうまくいきました。あなたのマニフェストに '答え'クラスを既に追加していたら –

答えて

2

。したがって、以下のように完全修飾参照を使用することができます。

QuestionOne.this.getApplication().setanswer1("half"); 
+0

ありがとう、それは今動作します。 – JJJAAA

0

トンandroid.app.Applicationを実装するクラスを宣言(アンドロイドを追加します。名=既存のアプリケーションタグに属性を「答え」):

<application 
     android:name=".answer" 
     android:icon="@drawable/youricon" 
     android:label="@string/app_name"> 

しかし、なぜグローバル変数を格納するシングルトンクラスを使用していませんか?アプリケーションを使用すると、問題につながることができます - あなたはこの

half.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       Intent intent = new Intent(QuestionOne.this, QuestionTwo.class); 
       startActivity(intent); 
       ((answer) this.getApplication()).setanswer1("half"); 
      } 

はOnClickListenerの参照ではない、あなたの活動のこの時点のポインティングでthisを参照してくださいとして匿名クラス参照を使用している>http://www.developerphil.com/dont-store-data-in-the-application-object/

+0

私はすでにアンドロイドマニフェストで宣言しました。 – JJJAAA

0

あなたはそれがActivityをAndroidに属しているので、getApplication()方法は解決できないというViewを指すView.OnClickListenerthisを使用しています。 ですから、

((answer) getApplication()).setanswer1("half") //since you were using getApplication() in Activity it is not necessary to specify 'this' keyword here 

または

((answer) QuestionOne.this.getApplication()).setanswer1("half") 
関連する問題