2016-05-19 2 views
-1

Мое приложение получает сообщение в строковой форме, и я хочу, чтобы оно передало в Activity Map, чтобы получить его. В основном входящее сообщение будет длинным, широты. Но она всегда дает мне 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); 

     } 
    }); 
} 
} 

код в My Broadcast Receiver:

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

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 Процесс: biketracker1.com.biketracker, PID: 30034 java.lang.RuntimeException: Не удается запустить активность ComponentInfo {biketracker1.com.biketracker/biketracker1.com.biketracker.MapsActivity}: java.lang.NullPointerException: println нуждается в сообщении на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2331) на 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) на android.os.Looper.loop (Looper.java:135) на android.app.ActivityThread.main (ActivityThread.java:5351) на java.lang.reflect.Method.invoke (собственный метод) на 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 нуждается в сообщении на android.util.Log.println_native (собственный метод) на android.util.Log.d (Log.java:139) на biketracker1.com.biketracker .MapsActivity.onCreate (MapsActivity.java:28) на android.app.Activity.performCreate (Activity.java:6020) на android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1105) на android.app.ActivityThread .performLaunchActivity (ActivityThread.java:2284) at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2393) a t android.app.ActivityThread.access $ 800 (ActivityThread.java:151) на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1309) на android.os.Handler.dispatchMessage (Handler.java:102) на android.os.Looper.loop (Looper.java:135) на android.app.ActivityThread.main (ActivityThread.java:5351) на java.lang.reflect.Method.invoke (собственный метод) на java .lang.reflection.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)

+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()' –

Смежные вопросы