Android 将数据从Servica发送到BroadcasReceiver以更新进度条

Android 将数据从Servica发送到BroadcasReceiver以更新进度条,android,service,broadcastreceiver,progress-bar,Android,Service,Broadcastreceiver,Progress Bar,在服务中我有倒计时装置。我想将进度数据发送到main活动中的BroadcastReceiver,并设置进度。如何发送此数据并升级进度条? 没有调用MyReceiver 主要活动: public class MainActivity extends Activity { public class MyReceiver extends BroadcastReceiver { ProgressBar pBar = (ProgressBar) findViewById(

服务中
我有
倒计时装置
。我想将进度数据发送到
main活动中的
BroadcastReceiver
,并设置进度。如何发送此数据并升级进度条? 没有调用MyReceiver

主要活动:

public class MainActivity extends Activity {

    public class MyReceiver extends BroadcastReceiver
    {
        ProgressBar pBar = (ProgressBar) findViewById(R.id.progressBar);
        @Override
        public void onReceive(Context context, Intent intent) {
            int ola = intent.getIntExtra("NUMBER", 0);
            pBar.setProgress(ola);
            Log.d("dddReceiver" ,  String.valueOf(ola) );   //can't see     
        }   
    }
...
}
public class MainActivity extends Activity {

    private BroadcastReceiver myReceiver = new BroadcastReceiver
    {
        ProgressBar pBar = (ProgressBar) findViewById(R.id.progressBar);
        @Override
        public void onReceive(Context context, Intent intent) {
            int ola = intent.getIntExtra("NUMBER", 0);
            pBar.setProgress(ola);
            Log.d("dddReceiver" ,  String.valueOf(ola) );   //can't see     
        }   
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...

        IntentFilter filter = new IntentFilter("MY_ACTION");
        registerReceiver(myReceiver, filter);

    }
    ...
}
服务

public void onStart(Intent intent, int startId) {
           String message = (String) intent.getStringExtra("EXTRA_MESSAGE");
           timeToWait = Integer.parseInt(message);

            CountDownTimer cdt = new CountDownTimer(timeToWait * 1000, 1000) {
            int i = 0;
            Intent intentBack = new Intent(getApplicationContext(),
                        MyReceiver.class);

            public void onTick(long millisUntilFinished) {
                intentBack.putExtra("NUMBER", i);
                i++;
                sendBroadcast(intentBack);
            }
             public void onFinish() {
                Toast.makeText(getApplicationContext(), "Finished",
                        Toast.LENGTH_SHORT).show();
                i++;
                Log.i("dddLongFinish", String.valueOf(i));
            }
        };
        cdt.start();
    }
显示

<receiver 
   android:name="MyReceiver"  >
</receiver>

第一次回答后:

11-23 14:20:23.713:W/dalvikvm(20992):threadid=1:线程以 未捕获异常(组=0x400207d8)11-23 14:20:23.723: E/AndroidRuntime(20992):致命异常:main 11-23 14:20:23.723: E/AndroidRuntime(20992):java.lang.RuntimeException:无法 实例化活动 ComponentInfo{com.example.serwis/com.example.serwis.MainActivity}: java.lang.NullPointerException 11-23 14:20:23.723: E/AndroidRuntime(20992):在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585) 11-2314:20:23.723:E/AndroidRuntime(20992):在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 11-2314:20:23.723:E/AndroidRuntime(20992):在 android.app.ActivityThread.access$2300(ActivityThread.java:125)11-23 14:20:23.723:E/AndroidRuntime(20992):在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 11-2314:20:23.723:E/AndroidRuntime(20992):在 android.os.Handler.dispatchMessage(Handler.java:99)11-23 14:20:23.723:E/AndroidRuntime(20992):在 android.os.Looper.loop(Looper.java:123)11-23 14:20:23.723: E/AndroidRuntime(20992):在 android.app.ActivityThread.main(ActivityThread.java:4627)11-23 14:20:23.723:E/AndroidRuntime(20992):在 java.lang.reflect.Method.Invokenactive(本机方法)11-23 14:20:23.723:E/AndroidRuntime(20992):在 java.lang.reflect.Method.invoke(Method.java:521)11-23 14:20:23.723: E/AndroidRuntime(20992):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 11-2314:20:23.723:E/AndroidRuntime(20992):在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)11-23 14:20:23.723:E/AndroidRuntime(20992):在 dalvik.system.NativeStart.main(本机方法)11-23 14:20:23.723: E/AndroidRuntime(20992):由以下原因引起:java.lang.NullPointerException 11-2314:20:23.723:E/AndroidRuntime(20992):在 android.app.Activity.findviewbyd(Activity.java:1637)11-23 14:20:23.723:E/AndroidRuntime(20992):在 MainActivity$1.(MainActivity.java:19)11-23 14:20:23.723:E/AndroidRuntime(20992):在 MainActivity.java:18)11-23 14:20:23.723:E/AndroidRuntime(20992):在 java.lang.Class.newInstanceImpl(本机方法)11-23 14:20:23.723: E/AndroidRuntime(20992):在 java.lang.Class.newInstance(Class.java:1429)11-23 14:20:23.723: E/AndroidRuntime(20992):在 android.app.Instrumentation.newActivity(Instrumentation.java:1021) 11-2314:20:23.723:E/AndroidRuntime(20992):在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577) 11-2314:20:23.723:E/AndroidRuntime(20992):。。。还有11个


这是你可以做到的

在您的主要活动中:

public class MainActivity extends Activity {

    private BroadcastReceiver myReceiver = new BroadcastReceiver
    {
        ProgressBar pBar = (ProgressBar) findViewById(R.id.progressBar);
        @Override
        public void onReceive(Context context, Intent intent) {
            int ola = intent.getIntExtra("NUMBER", 0);
            pBar.setProgress(ola);
            Log.d("dddReceiver" ,  String.valueOf(ola) );   //can't see     
        }   
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...

        IntentFilter filter = new IntentFilter("MY_ACTION");
        registerReceiver(myReceiver, filter);

    }
    ...
}
在您的服务中,设置您的意图如下:

Intent i = new Intent("MY_ACTION");
i.putExtra("NUMBER", i);
sendBroadcast(i);
如果在主活动中注册接收者,则无需在清单中声明。另外,请记住通过调用
unregisterReceiver(myReceiver)在您的
onDestroy()
上注销它


希望有帮助。

一旦创建。。。不应该在服役吗?然后如何从服务中调用myReceiver?
创建您的主要活动。在您的服务中,只需调用我在回答中提到的
sendBroadcast
。致命异常:main,java.lang.RuntimeException:无法实例化活动组件信息{com.example.serwis/com.example.serwis.MainActivity}:java.lang.NullPointerException没有行。它是从LogCatYes复制的,但是您的logcat引用了代码中发生错误的一行。我需要知道在哪里找到空指针,以便进一步帮助您。