1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Variable nicht in gleicher Klasse abrufbar . Warum ?!?

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von keinbrain, 24.03.2012.

  1. keinbrain, 24.03.2012 #1
    keinbrain

    keinbrain Threadstarter Fortgeschrittenes Mitglied

    Beiträge:
    316
    Erhaltene Danke:
    21
    Registriert seit:
    07.03.2012
    Hi, ich versuche den aktuellen Akkustatus abzufragen und ihn in einem ProgressBar anzuzeigen , aber die variable "level" wird als fehler bei progressstatus = level angezeigt . warum, die variable level wird doch in der gleichen klasse über @override deklariert ?!

    mProgress = (ProgressBar) findViewById(R.id.pb1);

    // Start lengthy operation in a background thread
    new Thread(new Runnable() {
    public void run() {
    while (mProgressStatus < 100) {

    int level = -1;

    /*Beginn der Abfrage der Akkuleistung */

    BroadcastReceiver batteryReceiver = new BroadcastReceiver() {
    int level = -1;
    @Override
    public void onReceive(Context context, Intent intent) {
    level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);

    }


    };
    IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
    registerReceiver(batteryReceiver, filter);


    /* Ende Abfrage */


    mProgressStatus = level ;

    // Update the progress bar
    mHandler.post(new Runnable() {
    public void run() {
    mProgress.setProgress(mProgressStatus);
    }
    });
    }
    }

    VIELEN DANK IM VORRAUS ;)
     
  2. swordi, 25.03.2012 #2
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    du deklarierst die variable level innerhalb des broadcastreceivers und einmal außerhalb.

    das ist schonmal von haus aus verwirrend.
     
  3. sixi, 25.03.2012 #3
    sixi

    sixi Erfahrener Benutzer

    Beiträge:
    237
    Erhaltene Danke:
    64
    Registriert seit:
    20.01.2009
    Da hat der Swordi auf jedenfall Recht :) Dadurch wirst du auch nie aus deiner while-Schleife herauskommen: Das "level" in der Schleife wird immer -1 bleiben, mProgressStatus wird immer auf -1 gesetzt, ...

    Kannst du mal die ganze Klasse posten? Weil wenn du sagst dass in der "mProgressStatus = level ;" Zuweisung nen Fehler ist, liegt es wohl eher an dem mProgressStatus als an dem level.

    - und bitte benutz den "code" Block und formatier (TABS!) den Quellcode richtig. Bei sovielen verschachtelten Blöcken dauert es ewig durchzusehen ;)
     
  4. keinbrain, 25.03.2012 #4
    keinbrain

    keinbrain Threadstarter Fortgeschrittenes Mitglied

    Beiträge:
    316
    Erhaltene Danke:
    21
    Registriert seit:
    07.03.2012
    Wie kann ich denn eine variable in BroadcastReceiver importieren bze. wieder zurückgeben ? return kann ich nicht benutzen da void für broadcast receiver als einziger erlaubter wert definiert ist.
    PS: ich formatiere immer , aber iwie ist die formatierung beim einfügen verloren gegangen
    HIER DER CODE :

    package Infodroit.first;

    import android.app.Activity;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.content.IntentFilter;
    import android.os.BatteryManager;
    import android.os.Bundle;
    import android.os.Handler;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.ProgressBar;
    import android.widget.TextView;

    public class akku extends Activity{

    /* T" */

    private static final int PROGRESS = 0x1;

    private ProgressBar mProgress;
    private int mProgressStatus = 0;

    private Handler mHandler = new Handler();

    /* T2 ENDE */

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.akku);

    String unbek = "unknown" ; /*unbekannt string definieren */
    String nichtver = "Leider nicht verfügbar" ; /* L. n. v. defininieren */

    /* TEST */

    /*PRGORESS BAR TEST */

    mProgress = (ProgressBar) findViewById(R.id.pb1);

    // Start lengthy operation in a background thread
    new Thread(new Runnable() {
    public void run() {
    while (mProgressStatus < 100) {

    int level = 1;

    /*Beginn der Abfrage der Akkuleistung */ /* Int level 0 austauschen durch -1 */

    akkuabfrage();

    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {

    e.printStackTrace();
    }

    /* Ende Abfrage */

    mProgressStatus = 100 ; /* HIER WERT AN PB ÜBERGEBEN */

    // Update the progress bar
    mHandler.post(new Runnable() {
    public void run() {
    mProgress.setProgress(mProgressStatus);

    }

    });

    }

    }
    }).start();


    /*ENDE TEST */




    /*Buttons werden aktiviert - Klick wechselt die activity bzw. das Layout */


    buttons();


    }

    public void akkuabfrage (){


    BroadcastReceiver batteryReceiver = new BroadcastReceiver() {
    int level = 0;
    @Override
    public void onReceive(Context context, Intent intent) {
    level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);


    }


    };
    IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
    registerReceiver(batteryReceiver, filter);

    }

    public void buttons () {


    final Button button1 = (Button) findViewById(R.id.But1);
    button1.setOnClickListener(new View.OnClickListener() {

    public void onClick(View v) {



    startActivity(new Intent (akku.this, System.class));
    akku.this.finish();
    }
    });

    final Button button2 = (Button) findViewById(R.id.But2);
    button2.setOnClickListener(new View.OnClickListener() {

    public void onClick(View v) {

    startActivity(new Intent (akku.this, erweitert.class));
    akku.this.finish();
    }
    });

    final Button button3 = (Button) findViewById(R.id.But3);
    button3.setOnClickListener(new View.OnClickListener() {

    public void onClick(View v) {

    startActivity(new Intent (akku.this, speicher.class));
    akku.this.finish() ;
    }
    });

    }

    }

    EDIT : Formatierung ist seltsamerweise wieder raus o.O
     
  5. sixi, 26.03.2012 #5
    sixi

    sixi Erfahrener Benutzer

    Beiträge:
    237
    Erhaltene Danke:
    64
    Registriert seit:
    20.01.2009
    Prinzipiell erst einmal gar nicht. Aber du kannst auf die Klassen-Variablen zugreifen, solange du dich in der selbigen (oder einer eingebetteten Klasse) befindest.

    Und ganz ehrlich - und sei mir nicht böse - aber wenn ich mir die Sinnhaftigkeit deines Codes anschaue, dann solltest du dich vielleicht erstmal mit Java Grundlagenbeschäftigen.



    CODE-Block! "[ CODE ] quellcode [ /CODE ]" (ohne die Leerzeichen in den eckigen Klammern)
     

Diese Seite empfehlen