2016-11-08 5 views
-3

Ivがこのバグに悩まされていました。私のアンドロイドアプリで約3週間です。私のコードを修正してください(それは小さなエラーです)。それから私はそれから学ぶことができます。基本的には、変数 "dblCountValue"を保持するMainActivityクラスがあります。撤回クラスの変数にアクセスここに私のコードです:。別のクラスにあるあるクラスから変数にアクセスする

CLASS:MainActivity

package com.mycash.borgjake.mycash; 

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

import android.widget.Button; 
import android.widget.TextView; 

import android.view.View; 

import com.google.android.gms.ads.AdListener; 
import com.google.android.gms.ads.AdRequest; 
import com.google.android.gms.ads.AdView; 
import com.google.android.gms.ads.InterstitialAd; 

import static com.mycash.borgjake.mycash.R.styleable.View; 

public class MainActivity extends AppCompatActivity { 

private InterstitialAd mInterstitial; 


Button btnClick; 
Button btnWithdraw; 

TextView txtBalance; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    AdView adView = (AdView)findViewById(R.id.adView); 
    AdRequest adRequest = new AdRequest.Builder() 
      .addTestDevice(AdRequest.DEVICE_ID_EMULATOR) 
      .build(); 
    adView.loadAd(adRequest); 

    btnClick = (Button) findViewById(R.id.button); 

    txtBalance = (TextView) findViewById(R.id.textView); 

    btnClick.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v){ 
       String countValue = txtBalance.getText().toString(); 
       int dblCountValue = Integer.parseInt(countValue); 

       if (mInterstitial.isLoaded()) { 
        mInterstitial.show(); 
       } 

       //mInterstitial.loadAd(request); 

       dblCountValue++; 
       txtBalance.setText(String.valueOf(dblCountValue)); 

     } 
    }); 

    mInterstitial = new InterstitialAd(this); 
    mInterstitial.setAdUnitId("..."); 
    AdRequest request = new AdRequest.Builder() 
      .addTestDevice(AdRequest.DEVICE_ID_EMULATOR) 
      .build(); 
    mInterstitial.loadAd(request); 

} 

public void onButtonClick(View v) { 
    if(v.getId() == R.id.button2) { 
     Intent i = new Intent(MainActivity.this, Withdraw.class); 
     startActivity(i); 
    } 
    } 
} 

CLASS:事前に

package com.mycash.borgjake.mycash; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.os.Bundle; 
import android.view.View; 

import com.google.android.gms.ads.AdRequest; 
import com.google.android.gms.ads.AdView; 

public class Withdraw extends Activity { 

MainActivity mainActivityObject = new MainActivity(); 

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

    AdView adView = (AdView) findViewById(R.id.adView2); 
    AdRequest adRequest = new AdRequest.Builder() 
      .addTestDevice(AdRequest.DEVICE_ID_EMULATOR) 
      .build(); 
    adView.loadAd(adRequest); 
} 

public void showAlert(View view) { 
    AlertDialog.Builder myAlert = new AlertDialog.Builder(this); 

    String messageWithdraw; 
    String aWithdraw; 
    String dWithdraw; 
    aWithdraw = "Congradulations! Your payment is being processed"; 
    dWithdraw = "Sorry! Please try again when you reach 100 points ($10)"; 



    dblCountValue = mainActivityObject.dblCountValue;  // <-- Error 

    if (dblCountValue > 100) {       // <-- Error 
     myAlert.setMessage(aWithdraw)     
       .create();        
     myAlert.show();        
    } else {           
     myAlert.setMessage(dWithdraw)    
       .create();       
     myAlert.show();       
    }            

    } 
} 

どうもありがとう:)

+0

dblCountValue = mainActivityObject.dblCountValue;

を交換するクラスを撤回します。それにアクセスする方法はありません。それ以外に、これは完全に間違っている 'dblCountValue = mainActivityObject.dblCountValue;'です。 –

+0

dblCountValueの整数は、OnClickメソッドでローカルにスコープされます。あなたはそのメソッドの外でそれにアクセスすることはできません。mainActivityオブジェクトを使用してアクセスする場合は、変数をクラス変数として宣言します。 –

+1

あなたの罪を許してください。見てください:http://stackoverflow.com/a/3510771/1944896 – TheLittleNaruto

答えて

0

を撤回パブリッククラスMainActivityがAppCompatActivity {

プライベートInterstitialAdにmInterstitialを拡張

下にちょうど位置にdblCountValueを宣言する。

ボタンbtnClick; ボタンbtnWithdraw;

TextView txtBalance;

public int dblCountValue;

@Override 意思を介するなどのボイドのonCreate(

0

まず第一には、グローバル変数として、あなたの変数dblCountValueを宣言し、その後
1.パスこの変数を保護した。
2.変数は、使用をたくさん持っている場合
3.変数dblCountValueとそのgetterとsettersでシングルトンクラスを作成し、その値をMainActivityに設定してください。 WithDrawActivityで取得します。
4. Keepこれを静的変数とし、Classを介してアクセスします。
良い考えは、インテントで変数を渡すか、sharedPreferenceを使用することです。

2

あるアクティビティから別のアクティビティに変数を送信するには、インテントオブジェクトを使用する必要があります。あなたのMainActivityに インテントオブジェクトを作成し、インテントオブジェクトを使用してデータをWithdrawクラスに送信する必要があります。

MainActivityにこのコードを書く必要があります。あなたの側でクラスを取り下げのコードテイク場所の今、このセクション

public void onClick(View v){ 
       String countValue = txtBalance.getText().toString(); 
       int dblCountValue = Integer.parseInt(countValue); 

       if (mInterstitial.isLoaded()) { 
        mInterstitial.show(); 
       } 

       //mInterstitial.loadAd(request); 

       dblCountValue++; 
       txtBalance.setText(String.valueOf(dblCountValue)); 

     Intent intent = new Intent(MainActivity.this, Withdraw.class); 
     intent.putExtra("key" , dblCountValue); 
       startActivity(intent); 

     } 
    }); 

のonCreateメソッド.Here我々はキーを使用してIntetオブジェクトからdblCountValueを抽出します。

では、それは地元のフィールドの次のコードセクション

Bundle bundle = getIntent().getExtras(); 
int dblCountValue =Bundle.getInt("key",0); 
関連する問題