如何将传入消息传递给另一个 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);
        }
    }
}
}
}