2014-09-22 237 views
0

这里是我的代码,我得到空指针异常在这里电量百分比代码: thahts什么IM triyng做的就是把电池百分比在TextView中所有空指针异常

public class MainActivity extends Activity implements SurfaceHolder.Callback { 

public static CFlashLight flash = new CFlashLight(); 
public static SurfaceView surfaceView; 
public static SurfaceHolder surfaceHolder; 
private final String sCRLF = System.getProperty("line.separator"); 
boolean bDarkBackground; 

//teststrob 
StrobeRunner runner; 
Thread bw; 
Handler mHandler = new Handler(); 
Runnable mShowToastRunnable = new Runnable() { 
    public void run() { 
     showMessage(); 
    } 
}; 
//test battery 
private TextView batteryPercent= (TextView) this.findViewById(R.id.TextView01); 

private void getBatteryPercentage() { 
     BroadcastReceiver batteryLevelReceiver = new BroadcastReceiver() { 
      public void onReceive(Context context, Intent intent) { 
       context.unregisterReceiver(this); 
       int currentLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); 
       int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1); 
       int level = -1; 
       if (currentLevel >= 0 && scale > 0) { 
        level = (currentLevel * 100)/scale; 
       } 

       batteryPercent.setText("Battery: " + level + "%"); 
      } 
     }; 
     IntentFilter batteryLevelFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); 
     registerReceiver(batteryLevelReceiver, batteryLevelFilter); 
     } 
//test 

@SuppressWarnings("deprecation") 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    bDarkBackground = true; 

    getBatteryPercentage(); 

和这里是日志猫输出permissoins是好的。

09-22 14:12:40.417: E/AndroidRuntime(17552): FATAL EXCEPTION: main 
09-22 14:12:40.417: E/AndroidRuntime(17552): Process: com.soheil.prolight, PID: 17552 
09-22 14:12:40.417: E/AndroidRuntime(17552): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.soheil.prolight/com.soheil.prolight.MainActivity}: java.lang.NullPointerException 
09-22 14:12:40.417: E/AndroidRuntime(17552): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2121) 
09-22 14:12:40.417: E/AndroidRuntime(17552): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
09-22 14:12:40.417: E/AndroidRuntime(17552): at android.app.ActivityThread.access$800(ActivityThread.java:135) 
09-22 14:12:40.417: E/AndroidRuntime(17552): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
09-22 14:12:40.417: E/AndroidRuntime(17552): at android.os.Handler.dispatchMessage(Handler.java:102) 
09-22 14:12:40.417: E/AndroidRuntime(17552): at android.os.Looper.loop(Looper.java:136) 
09-22 14:12:40.417: E/AndroidRuntime(17552): at android.app.ActivityThread.main(ActivityThread.java:5017) 
09-22 14:12:40.417: E/AndroidRuntime(17552): at java.lang.reflect.Method.invokeNative(Native Method) 
09-22 14:12:40.417: E/AndroidRuntime(17552): at java.lang.reflect.Method.invoke(Method.java:515) 
09-22 14:12:40.417: E/AndroidRuntime(17552): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
09-22 14:12:40.417: E/AndroidRuntime(17552): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
09-22 14:12:40.417: E/AndroidRuntime(17552): at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132) 
09-22 14:12:40.417: E/AndroidRuntime(17552): at dalvik.system.NativeStart.main(Native Method) 
09-22 14:12:40.417: E/AndroidRuntime(17552): Caused by: java.lang.NullPointerException 
09-22 14:12:40.417: E/AndroidRuntime(17552): at android.app.Activity.findViewById(Activity.java:1884) 
09-22 14:12:40.417: E/AndroidRuntime(17552): at com.soheil.prolight.MainActivity.<init>(MainActivity.java:56) 
09-22 14:12:40.417: E/AndroidRuntime(17552): at java.lang.Class.newInstanceImpl(Native Method) 
09-22 14:12:40.417: E/AndroidRuntime(17552): at java.lang.Class.newInstance(Class.java:1208) 
09-22 14:12:40.417: E/AndroidRuntime(17552): at android.app.Instrumentation.newActivity(Instrumentation.java:1061) 
09-22 14:12:40.417: E/AndroidRuntime(17552): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2112) 
09-22 14:12:40.417: E/AndroidRuntime(17552): ... 12 more 
+0

请添加完整的活动代码中初始化的TextView等 – 2014-09-22 11:48:29

+0

完成@SuneelPrakash代码更新 – Soheyl 2014-09-22 11:53:42

回答

1

设置onContentView 所以更改上创建类似这样的

private void getBatteryPercentage() { 
    final TextView batteryPercent = (TextView) this.findViewById(R.id.TextView02); 
     BroadcastReceiver batteryLevelReceiver = new BroadcastReceiver() { 

      public void onReceive(Context context, Intent intent) { 

       context.unregisterReceiver(this); 
       int currentLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); 
       int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1); 
       int level = -1; 
       if (currentLevel >= 0 && scale > 0) { 
        level = (currentLevel * 100)/scale; 
       } 

       batteryPercent.setText("Battery: " + level + "%"); 
      } 
     }; 
     IntentFilter batteryLevelFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); 
     registerReceiver(batteryLevelReceiver, batteryLevelFilter); 
     } 
+0

batteryPercent不能被解析为一个变量 – Soheyl 2014-09-22 12:00:18

+0

编辑的代码,你可以请尽量 – 2014-09-22 12:01:59

+0

batteryPercent不能被解析为一个变量相同的问题 – Soheyl 2014-09-22 12:04:59

1

你是在执行该语句太早,甚至的onCreate等前:

private TextView batteryPercent= (TextView) this.findViewById(R.id.TextView01); 

应至少在膨胀的的onCreate布局之后。

+0

如果我这样做后在getbattrypercentage()中创建batterypercent无法解决! – Soheyl 2014-09-22 11:54:35

+1

字段batteryPercent需要声明在现在的位置。但在onCreate中初始化(“=”后的部分)。 – 2014-09-22 12:06:47

+0

tnx我必须在getbattrypercentage()中声明; – Soheyl 2014-09-22 12:11:24

0

我会将TextView代码移到布局膨胀后。

setContentView(R.layout.activity_main); 

//test battery 
private TextView batteryPercent= (TextView) this.findViewById(R.id.TextView01); 

这应该工作(假设没有逻辑错误)。

+0

参数batteryPercent的非法修饰符;只有最终被允许 – Soheyl 2014-09-22 11:58:48

1

使用方法,这个代码后初始化在onCreate方法变量:

package com.example.ex; 

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.view.SurfaceHolder; 
import android.view.SurfaceView; 
import android.widget.TextView; 

public class MainActivity extends Activity implements SurfaceHolder.Callback { 

    public static CFlashLight flash = new CFlashLight(); 
    public static SurfaceView surfaceView; 
    public static SurfaceHolder surfaceHolder; 
    private final String sCRLF = System.getProperty("line.separator"); 
    boolean bDarkBackground; 

    // teststrob 
    StrobeRunner runner; 
    Thread bw; 
    Handler mHandler = new Handler(); 
    Runnable mShowToastRunnable = new Runnable() { 
     public void run() { 
      showMessage(); 
     } 
    }; 
    // test battery 
    private TextView batteryPercent; 

    private void getBatteryPercentage() { 
     BroadcastReceiver batteryLevelReceiver = new BroadcastReceiver() { 
      public void onReceive(Context context, Intent intent) { 
       context.unregisterReceiver(this); 
       int currentLevel = intent.getIntExtra(
         BatteryManager.EXTRA_LEVEL, -1); 
       int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1); 
       int level = -1; 
       if (currentLevel >= 0 && scale > 0) { 
        level = (currentLevel * 100)/scale; 
       } 

       batteryPercent.setText("Battery: " + level + "%"); 
      } 
     }; 
     IntentFilter batteryLevelFilter = new IntentFilter(
       Intent.ACTION_BATTERY_CHANGED); 
     registerReceiver(batteryLevelReceiver, batteryLevelFilter); 
    } 

    // test 

    @SuppressWarnings("deprecation") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     batteryPercent = (TextView) this.findViewById(R.id.TextView01); 

     bDarkBackground = true; 

     getBatteryPercentage(); 
+0

固定的兄弟,但TNX对您有所帮助 – Soheyl 2014-09-22 12:13:55

+0

battrypercent应是终局的,在getbattrypercentage()中声明; – Soheyl 2014-09-22 12:14:27