如何将传入消息传递给另一个 activity?
How to pass the incoming message in to another activity?
我的应用程序正在接收字符串形式的消息,我希望它通过地图 Activity 来获取位置。基本上传入的消息将是 Long,Latitudes。但它总是给我一个错误 NullPointerException
enter code here
package biketracker1.com.biketracker;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.View;
import android.widget.Button;
public class FirstActivity extends Activity {
private String latitudes;
private Button send;
private Button send2;
private Button send3;
private Button maps;
BroadcastReceiver reciever;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.firstactivity);
send = (Button) findViewById(R.id.send);
send2 = (Button) findViewById(R.id.send2);
send3 = (Button) findViewById(R.id.send3);
maps = (Button) findViewById(R.id.map);
sendMessageOne();
IntentFilter filter = new IntentFilter();
filter.addAction("android.provider.Telephony.SMS_RECEIVED");
filter.setPriority(2147483647);
BroadcastReceiver receiver = new SmsReceiver();
registerReceiver(receiver, filter);
}
private void sendMessageOne() {
maps.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String value= "31.5546,74.3572";
Intent i = new Intent(FirstActivity.this,MapsActivity.class);
i.putExtra("messages",value );
startActivity(i);
}
});
send3.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
SmsManager manager = SmsManager.getDefault();
manager.sendTextMessage("Number",null,"3",null,null);
}
});
send2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SmsManager manager = SmsManager.getDefault();
manager.sendTextMessage("Number",null,"2",null,null);
}
});
send.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
SmsManager manager = SmsManager.getDefault();
manager.sendTextMessage("Number",null,"1",null,null);
}
});
}
}
我的广播接收器中的代码:
package biketracker1.com.biketracker;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
public class SmsReceiver extends BroadcastReceiver{
Context context;
private String latitudes;
@Override
public void onReceive(Context context, Intent intent)
{
Log.e("ABC", "** good");
if
(intent.getAction().equalsIgnoreCase
("android.provider.Telephony.SMS_RECEIVED))
{
Bundle bundle = intent.getExtras();
if (bundle != null)``
{
Object[] pdus = (Object[]) bundle.get("pdus");
final SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++)
{
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
}`if (messages.length > -1)
{Log.e("ABC",messages[0].getMessageBody().toString());
// Toast.makeText(context, "SMS Message content" +messages, Toast.LENGTH_LONG).show();
Intent j = new Intent(context,MapsActivity.class);
j.putExtra("messages",latitudes);
context.startActivity(j);
}
}
}
}
}
我的代码Activity:
package biketracker1.com.biketracker;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
private GoogleMap mMap;
private String getLangs;
private String [] getValues;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
Intent intent = getIntent();
getLangs = intent.getExtras().getString("messages");
getValues = getLangs.split(",");
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
LatLng sydney = new LatLng(Double.parseDouble(getValues[0]),Double.parseDouble(getValues[1]));
mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Lahore"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
}
Logcat
05-19 10:03:34.17530034-30034/biketracker1.com.biketracker E/ABC: 31.437250,74.259407
05-19 10:03:35.213 30034-30034/biketracker1.com.biketracker E/AndroidRuntime: FATAL EXCEPTION: main
Process: biketracker1.com.biketracker, PID: 30034
java.lang.RuntimeException: Unable to start activity ComponentInfo{biketracker1.com.biketracker/biketracker1.com.biketracker.MapsActivity}: java.lang.NullPointerException: println needs a message
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2331)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2393)
at android.app.ActivityThread.access0(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5351)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)
Caused by: java.lang.NullPointerException: println needs a message
at android.util.Log.println_native(Native Method)
at android.util.Log.d(Log.java:139)
at biketracker1.com.biketracker.MapsActivity.onCreate(MapsActivity.java:28)
at android.app.Activity.performCreate(Activity.java:6020)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2284)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2393)
at android.app.ActivityThread.access0(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5351)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)
只需像这样更改您的广播接收器代码:
@Override
public void onReceive(Context context, Intent intent)
{
Log.e("ABC", "** good");
if
(intent.getAction().equalsIgnoreCase
("android.provider.Telephony.SMS_RECEIVED))
{
Bundle bundle = intent.getExtras();
if (bundle != null)``
{
Object[] pdus = (Object[]) bundle.get("pdus");
final SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++)
{
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
}
if (messages.length > -1)
{
Log.e("ABC",messages[0].getMessageBody().toString());
latitudes = messages[0].getMessageBody().toString();
Intent j = new Intent(context,MapsActivity.class);
j.putExtra("messages",latitudes);
context.startActivity(j);
}
}
}
}
}
我的应用程序正在接收字符串形式的消息,我希望它通过地图 Activity 来获取位置。基本上传入的消息将是 Long,Latitudes。但它总是给我一个错误 NullPointerException
enter code here
package biketracker1.com.biketracker;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.View;
import android.widget.Button;
public class FirstActivity extends Activity {
private String latitudes;
private Button send;
private Button send2;
private Button send3;
private Button maps;
BroadcastReceiver reciever;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.firstactivity);
send = (Button) findViewById(R.id.send);
send2 = (Button) findViewById(R.id.send2);
send3 = (Button) findViewById(R.id.send3);
maps = (Button) findViewById(R.id.map);
sendMessageOne();
IntentFilter filter = new IntentFilter();
filter.addAction("android.provider.Telephony.SMS_RECEIVED");
filter.setPriority(2147483647);
BroadcastReceiver receiver = new SmsReceiver();
registerReceiver(receiver, filter);
}
private void sendMessageOne() {
maps.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String value= "31.5546,74.3572";
Intent i = new Intent(FirstActivity.this,MapsActivity.class);
i.putExtra("messages",value );
startActivity(i);
}
});
send3.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
SmsManager manager = SmsManager.getDefault();
manager.sendTextMessage("Number",null,"3",null,null);
}
});
send2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SmsManager manager = SmsManager.getDefault();
manager.sendTextMessage("Number",null,"2",null,null);
}
});
send.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
SmsManager manager = SmsManager.getDefault();
manager.sendTextMessage("Number",null,"1",null,null);
}
});
}
}
我的广播接收器中的代码:
package biketracker1.com.biketracker;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
public class SmsReceiver extends BroadcastReceiver{
Context context;
private String latitudes;
@Override
public void onReceive(Context context, Intent intent)
{
Log.e("ABC", "** good");
if
(intent.getAction().equalsIgnoreCase
("android.provider.Telephony.SMS_RECEIVED))
{
Bundle bundle = intent.getExtras();
if (bundle != null)``
{
Object[] pdus = (Object[]) bundle.get("pdus");
final SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++)
{
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
}`if (messages.length > -1)
{Log.e("ABC",messages[0].getMessageBody().toString());
// Toast.makeText(context, "SMS Message content" +messages, Toast.LENGTH_LONG).show();
Intent j = new Intent(context,MapsActivity.class);
j.putExtra("messages",latitudes);
context.startActivity(j);
}
}
}
}
}
我的代码Activity:
package biketracker1.com.biketracker;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
private GoogleMap mMap;
private String getLangs;
private String [] getValues;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
Intent intent = getIntent();
getLangs = intent.getExtras().getString("messages");
getValues = getLangs.split(",");
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
LatLng sydney = new LatLng(Double.parseDouble(getValues[0]),Double.parseDouble(getValues[1]));
mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Lahore"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
}
Logcat
05-19 10:03:34.17530034-30034/biketracker1.com.biketracker E/ABC: 31.437250,74.259407 05-19 10:03:35.213 30034-30034/biketracker1.com.biketracker E/AndroidRuntime: FATAL EXCEPTION: main Process: biketracker1.com.biketracker, PID: 30034 java.lang.RuntimeException: Unable to start activity ComponentInfo{biketracker1.com.biketracker/biketracker1.com.biketracker.MapsActivity}: java.lang.NullPointerException: println needs a message at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2331) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2393) at android.app.ActivityThread.access0(ActivityThread.java:151) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5351) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703) Caused by: java.lang.NullPointerException: println needs a message at android.util.Log.println_native(Native Method) at android.util.Log.d(Log.java:139) at biketracker1.com.biketracker.MapsActivity.onCreate(MapsActivity.java:28) at android.app.Activity.performCreate(Activity.java:6020) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2284) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2393) at android.app.ActivityThread.access0(ActivityThread.java:151) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5351) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)
只需像这样更改您的广播接收器代码:
@Override
public void onReceive(Context context, Intent intent)
{
Log.e("ABC", "** good");
if
(intent.getAction().equalsIgnoreCase
("android.provider.Telephony.SMS_RECEIVED))
{
Bundle bundle = intent.getExtras();
if (bundle != null)``
{
Object[] pdus = (Object[]) bundle.get("pdus");
final SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++)
{
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
}
if (messages.length > -1)
{
Log.e("ABC",messages[0].getMessageBody().toString());
latitudes = messages[0].getMessageBody().toString();
Intent j = new Intent(context,MapsActivity.class);
j.putExtra("messages",latitudes);
context.startActivity(j);
}
}
}
}
}