Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用意图从服务向活动发送数据时出现空指针异常_Java_Android - Fatal编程技术网

Java 使用意图从服务向活动发送数据时出现空指针异常

Java 使用意图从服务向活动发送数据时出现空指针异常,java,android,Java,Android,我正在使用Bundle将数据从服务类发送到主活动,但其发送为null 服务等级 Intent intent = new Intent(LocationService.this, MainActivity.class); Bundle b = new Bundle(); b.putString("final_address", addressText); intent.putExtras(b); startActivity(intent); public static final String

我正在使用Bundle将数据从服务类发送到主活动,但其发送为null

服务等级

Intent intent = new Intent(LocationService.this, MainActivity.class);
Bundle b = new Bundle();
b.putString("final_address", addressText);
intent.putExtras(b);
startActivity(intent);
public static final String ADDRESSIDENTIFY = "address_identify";
public static final String ADDRESS_PATH = "address_path";

Intent intent = new Intent(ADDRESSIDENTIFY);
intent.putExtra(ADDRESS_PATH, addressText);
sendBroadcast(intent);
public class LocationService extends Service {

    public static final String ADDRESSIDENTIFY = "address_identify";
    public static final String ADDRESS_PATH = "address_path";

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();


        Log.e("service", "oncreate");


        Intent intent = new Intent(ADDRESSIDENTIFY);
        intent.putExtra(ADDRESS_PATH, "hello");
        sendBroadcast(intent);
    }
}
主要活动

Intent intentReceived = getIntent();
Bundle b = intentReceived.getExtras();
address = b.getString("final_address");
private BroadcastReceiver receiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle bundle = intent.getExtras();
        if (bundle != null) {
            address = bundle.getString(LocationService.ADDRESS_PATH);

        }
    }
};
public class MainActivity extends AppCompatActivity {

    String address;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main4);

        registerReceiver(receiver, new IntentFilter(LocationService.ADDRESSIDENTIFY));

        startService(new Intent(this, LocationService.class));
    }


    private BroadcastReceiver receiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            Bundle bundle = intent.getExtras();
            if (bundle != null) {
                address = bundle.getString(LocationService.ADDRESS_PATH);
                System.out.println("val"+ " = "+ address);
            }
        }
    };
}
我也尝试过通过广播消息发送,但也失败了。请参见以下内容:

服务等级

Intent intent = new Intent(LocationService.this, MainActivity.class);
Bundle b = new Bundle();
b.putString("final_address", addressText);
intent.putExtras(b);
startActivity(intent);
public static final String ADDRESSIDENTIFY = "address_identify";
public static final String ADDRESS_PATH = "address_path";

Intent intent = new Intent(ADDRESSIDENTIFY);
intent.putExtra(ADDRESS_PATH, addressText);
sendBroadcast(intent);
public class LocationService extends Service {

    public static final String ADDRESSIDENTIFY = "address_identify";
    public static final String ADDRESS_PATH = "address_path";

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();


        Log.e("service", "oncreate");


        Intent intent = new Intent(ADDRESSIDENTIFY);
        intent.putExtra(ADDRESS_PATH, "hello");
        sendBroadcast(intent);
    }
}
主要活动

Intent intentReceived = getIntent();
Bundle b = intentReceived.getExtras();
address = b.getString("final_address");
private BroadcastReceiver receiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle bundle = intent.getExtras();
        if (bundle != null) {
            address = bundle.getString(LocationService.ADDRESS_PATH);

        }
    }
};
public class MainActivity extends AppCompatActivity {

    String address;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main4);

        registerReceiver(receiver, new IntentFilter(LocationService.ADDRESSIDENTIFY));

        startService(new Intent(this, LocationService.class));
    }


    private BroadcastReceiver receiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            Bundle bundle = intent.getExtras();
            if (bundle != null) {
                address = bundle.getString(LocationService.ADDRESS_PATH);
                System.out.println("val"+ " = "+ address);
            }
        }
    };
}
并在create上的主活动中调用此函数

registerReceiver(receiver, new IntentFilter(LocationService.ADDRESSIDENTIFY)); registerReceiver(接收者,新的意向过滤器(LocationService.ADDRESSIDENTIFY)); 我也在舱单上声明了服役

<service
  android:name="com.gampzz.bhojannearby.LocationService"
  android:enabled="true">
</service>


我该怎么办..我错在哪里了???

你的代码很完美,在我的情况下它正在工作。如果你遗漏了什么,请与我的联系。您是否在清单中的
应用程序
中定义您的
服务

服务等级

Intent intent = new Intent(LocationService.this, MainActivity.class);
Bundle b = new Bundle();
b.putString("final_address", addressText);
intent.putExtras(b);
startActivity(intent);
public static final String ADDRESSIDENTIFY = "address_identify";
public static final String ADDRESS_PATH = "address_path";

Intent intent = new Intent(ADDRESSIDENTIFY);
intent.putExtra(ADDRESS_PATH, addressText);
sendBroadcast(intent);
public class LocationService extends Service {

    public static final String ADDRESSIDENTIFY = "address_identify";
    public static final String ADDRESS_PATH = "address_path";

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();


        Log.e("service", "oncreate");


        Intent intent = new Intent(ADDRESSIDENTIFY);
        intent.putExtra(ADDRESS_PATH, "hello");
        sendBroadcast(intent);
    }
}
活动

Intent intentReceived = getIntent();
Bundle b = intentReceived.getExtras();
address = b.getString("final_address");
private BroadcastReceiver receiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle bundle = intent.getExtras();
        if (bundle != null) {
            address = bundle.getString(LocationService.ADDRESS_PATH);

        }
    }
};
public class MainActivity extends AppCompatActivity {

    String address;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main4);

        registerReceiver(receiver, new IntentFilter(LocationService.ADDRESSIDENTIFY));

        startService(new Intent(this, LocationService.class));
    }


    private BroadcastReceiver receiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            Bundle bundle = intent.getExtras();
            if (bundle != null) {
                address = bundle.getString(LocationService.ADDRESS_PATH);
                System.out.println("val"+ " = "+ address);
            }
        }
    };
}
mainfest

 ...
    <service android:name=".LocationService"
             android:enabled="true"/>

</application>
。。。

无需像下面这样使用LocalBroadcastManager发送广播:

private LocalBroadcastManager mBroadcastManger;
Intent intent = new Intent(ADDRESSIDENTIFY);
intent.putExtra(ADDRESS_PATH, addressText);
mBroadcastManger.sendBroadcast(mIntent);
将其置于服务的
onCreate()

mBroadcastManger = LocalBroadcastManager.getInstance(this);
使用如下意图发送广播:

private LocalBroadcastManager mBroadcastManger;
Intent intent = new Intent(ADDRESSIDENTIFY);
intent.putExtra(ADDRESS_PATH, addressText);
mBroadcastManger.sendBroadcast(mIntent);

共享日志cat崩溃报告您需要
广播接收器
服务
活动
获取数据,同时在清单中声明您的
接收器
@SadiqMdAsif给我发了一个链接来做这件事。看看那里,我用了那个链接的第8篇文章来发送数据,正如我在上面的问题中告诉你们的。请给我推荐一篇更好的文章,我想将数据从服务类发送到活动类。谢谢,先生,但我通过其他方式解决了问题。谢谢您的帮助