2016-05-19 38 views
-1

我的应用程序接收字符串形式的信息,我希望它在地图的活动传递给得到的位置。基本上传入的信息将是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); 
     } 
    } 
} 
} 
} 

代码在我的活动:

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的

十月5日至19日:03:34.17530034-30034/biketracker1.com.biketracker E/ABC:31.437250,74.259407 十月5日至19日:03:35.213 30034-30034/biketracker1.com.biketracker E/AndroidRuntime:致命例外:main 进程:biketracker1.com.biketracker,PID:30034 java.lang.RuntimeException:无法启动活动ComponentInfo {biketracker1.com.biketracker/biketracker1.com.biketracker.MapsActivity}:java.lang.NullPointerException: println需要消息 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2331) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2393) 在android.app.ActivityThread.access $ 800(ActivityThread.java:151) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1309) 在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) 引起:java.lang.NullPointerException:println需要一条消息 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) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2393) 一个牛逼android.app.ActivityThread.access $ 800(ActivityThread.java:151) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1309) 在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。方法.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)

+0

使用'广播receiver'更新活动。 [http://stackoverflow.com/questions/25215878/how-to-update-the-ui-of-activity-from-broadcastreceiver] –

+0

粘贴你的logcat .. !! –

+0

我建议你在这里发布你的错误日志。 – FormigaNinja

回答

0

只要改变你的广播接收器这样的代码:

@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); 
     } 
    } 
} 
} 
} 
+0

调试,看看你是否收到消息?如果是,它是否来到你的“消息”? –

+0

调试你的'onReceive()'.. !!我认为你没有在'onReceive()'中获得信息 –

相关问题