2014-02-18 25 views
3

我有一個小型項目,我需要玩Android設備的電池。起初,我希望能夠打印電池,所以我用這個tutorial爲什麼MainActivity無法解析或不是字段?

然後,我創建了一個新的Android項目名爲「測試」,在Eclipse中,並在MainActivity.java我把這個代碼:

package com.example.testing; 

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.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.R.*; 



public class MainActivity extends Activity { 
    TextView mTextView; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.MainActivity); //This is the MainActivity that contains the error 
      mTextView = (TextView) findViewById(R.id.batterTest); 
      findViewById(R.id.getBattery).setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        mTextView.setText(String.valueOf(batteryLevel)); 
       } 
      }); 
      new Thread(new ThreadM()).start(); 
    } 
    @Override 
    protected void onDestroy() { 
      super.onDestroy(); 
      unregisterReceiver(mArrow); 
    } 
    BatteryReceiver mArrow; 
    private class ThreadM implements Runnable { 
      @Override 
      public void run() { 
       mArrow = new BatteryReceiver(); 
       IntentFilter mIntentFilter = new IntentFilter(); 
       mIntentFilter.addAction(Intent.ACTION_BATTERY_LOW); 
       mIntentFilter.addAction(Intent.ACTION_BATTERY_CHANGED); 
       mIntentFilter.addAction(Intent.ACTION_BATTERY_OKAY); 
       Intent batteryIntent = registerReceiver(mArrow, mIntentFilter); 
       batteryLevel = getBatteryLevel(batteryIntent); 
       Log.e("Battery Level", String.valueOf(batteryLevel)); 
      } 
    } 
    float batteryLevel; 
    private class BatteryReceiver extends BroadcastReceiver { 
      @Override 
      public void onReceive(Context arg0, Intent arg1) { 
       if (arg1.getAction().equalsIgnoreCase(Intent.ACTION_BATTERY_LOW) || arg1.getAction().equalsIgnoreCase(Intent.ACTION_BATTERY_CHANGED) || arg1.getAction().equalsIgnoreCase(Intent.ACTION_BATTERY_OKAY)) { 
        int level = arg1.getIntExtra("level", 0); 
        Toast.makeText(MainActivity.this,"Current Battery " + level + " %", Toast.LENGTH_LONG).show(); 
        mTextView.setText(String.valueOf("Battery Level Change Detect through Receiver = " + level)); 
       } 
      } 
    } 
    public float getBatteryLevel(Intent batteryIntent) { 
      int level = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); 
      int scale = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, -1); 
      if (level == -1 || scale == -1) { 
       return 50.0f; 
      } 
      return ((float) level/(float) scale) * 100.0f; 
    } 
} 

其實這應該只是運行印有電池級一個簡單的活動屏幕上。但這並不是因爲一個錯誤。 「MainActivity無法解析或不是字段」(請參閱​​註釋行)。 你知道爲什麼嗎?我想讓這段代碼正常工作,這樣我就可以繼續工作了。

謝謝。

+3

刪除'進口android.R *;'進口 –

回答

9

您需要更改

setContentView(R.layout.MainActivity); 

setContentView(R.layout.activity_main); 

假設你有一個叫activity_main.xml,而不是MainActivity佈局,實際上是你的Activity類的名稱

和刪除

import android.R.*; 

,並導入

import com.example.testing.R; 
+0

我不認爲進口'進口com.example.testing.R;'是必要的。 – SMR

+0

完美的工作。謝謝 – hacks4life

+0

@SMR如果它在同一個包裏沒有必要。否則它是必需的 – Raghunandan