2016-11-08 269 views
-3

現在,我在我的Android應用程序中停留了該錯誤約3周。它殺死我...... :(。有人可以修復我的代碼(它的一個小錯誤),然後我可以從中學習。基本上,我有MainActivity類持有變量「dblCountValue」。訪問變量在退出類下面是我的代碼:從位於另一個類中的一個類訪問變量

類: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); 
    } 
    } 
} 

類:撤櫃

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

就在位置聲明dblCountValue下面

公共類MainActivity擴展AppCompatActivity {

私人在InterstitialAd mInterstitial;

Button btnClick; Button btnWithdraw;

TextView txtBalance;

public int dblCountValue;

@覆蓋 保護無效的onCreate(

0

首先聲明你的變量dblCountValue作爲一個全局變量,然後
1.通過這個變量作爲通過意圖。
2.如果變量有很多用法在許多活動中,最好將其保存在sharedPreference中並從中獲取數據。不要忘記在離開您的應用程序時清除sharedpreference。
3.創建一個包含變量dblCountValue及其getter和setters的單例類。在MainActivity中設置它的值並在WithDrawActivity中檢索。
4.繼續它作爲一個靜態變量並通過Class訪問它。
好主意是通過意圖傳遞變量或使用sharedPreference。

2

要將變量從一個活動發送到其他活動,您應該使用Intent對象。在您的情況下,您必須在MainActivity中創建一個 Intent對象,並使用該Intent對象可以將數據發送到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方法下面我們將從Intet對象使用鍵提取dblCountValue。

在撤櫃類下面的代碼段

Bundle bundle = getIntent().getExtras(); 
int dblCountValue =Bundle.getInt("key",0);