2

I'm having difficulty implementing a ResultReceiver on my IntentService class which scans for available devices on the network. (disregarding the terrible design of my code so far) I can't seem to even get my resultReceiver to pass back a test string, the log picks up the instance which I'm sending, but I get a nullPointerException when I try to access the passed in string.

Here are the relevant sections of my Intent Service class:

public class NetHelper extends IntentService{

private ConnectivityManager cm;
private WifiManager manager;
private WifiInfo connectionInfo;
private NetworkInfo activeNetwork;


public Context myContext;
public ResultReceiver receiver;
public Bundle b;


SharedPreferences netprefs;
SharedPreferences.Editor editor;


@Override
protected void onHandleIntent(@Nullable Intent intent) {

    //if intent-int == 0: run netsniff
    //if intent-int == 1: run getNetInfo
    int OPR = intent.getIntExtra("OPR", 0); //0 is default value...

    //result receiver for callback use
    Bundle params = intent.getExtras();
    receiver = params.getParcelable("receiverTag");
    b = new Bundle();

    //long running operation is netsniff
    listDevices = new ArrayList<Devices>();
    myContext = getApplicationContext();


    //application based storing of values
    netprefs = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
    editor = netprefs.edit();

    cm = (ConnectivityManager) myContext.getSystemService(Context.CONNECTIVITY_SERVICE);
    activeNetwork = cm.getActiveNetworkInfo();
    manager = (WifiManager) myContext.getSystemService(Context.WIFI_SERVICE);
    connectionInfo = manager.getConnectionInfo();

    if (OPR == 0) {
        try {
            netSniff();

        } catch (IOException e) {
            e.printStackTrace();
            Log.d(TAG, e.toString());
        }
    }
}

snippet from my function which sends a new bundle:

    public void netSniff() throws IOException {
    Log.d(TAG, "begin sniffing network on network: "+ NET_IP);
    Log.d(TAG, "Active Network: " + String.valueOf(activeNetwork));
    Log.d(TAG, "IP_ADDR: " + String.valueOf(MYNET_IP));


    b.putString("RESULT_RECEIVED", "TESTING23748W3458763298457Y34");
    receiver.send(0, b);

myResultReceiver class:

public class myResultReceiver extends ResultReceiver{
private Receiver mReceiver;


public myResultReceiver(Handler handler) {
    super(handler);
}


public interface Receiver {
    public void onReceiveResult(int resultCode, Bundle resultData);

}

public void setReceiver(Receiver receiver) {
    mReceiver = receiver;
}

@Override
protected void onReceiveResult(int resultCode, Bundle resultData) {

    if (mReceiver != null) {
        mReceiver.onReceiveResult(resultCode, resultData);
    }
}

and last, here are my calls for my Fragment:

public class devicesFragment extends Fragment implements myResultReceiver.Receiver {
public myResultReceiver mReceiver;



   //discover network info, and get a list of devices
public void launchNetworkSniffer(int opr) {
    Intent serviceIntent = new Intent(getActivity(), NetHelper.class);

    //setup resultReceiver for service callbacks
    mReceiver = new myResultReceiver(new Handler());
    mReceiver.setReceiver(this);

    serviceIntent.putExtra("receiverTag", mReceiver);
    serviceIntent.putExtra("OPR", opr);
    getActivity().startService(serviceIntent);
}

    //receiver implemented methods
@Override
public void onReceiveResult(int resultCode, Bundle resultData) {
    Log.d("DATA_RECEIVED******", "processing...");
    String newdevjson = resultData.getString("RECEIVED_RESULT");
    Log.d("DATA_RECEIVED", newdevjson);
    Devices newd = new Gson().fromJson(newdevjson, Devices.class);
    devlist.add(newd);

    for (Devices i : devlist) {
        Log.d("ACTIVE_DEV_COUNT", i.getIp());
    }
}

The first log from my fragment's onResultReceived() is showing but it crashes when I assign the resultData.getString() with a nullPointerReference.

I believe this fact means I've instantiated everything correctly, so why isn't anything getting passed back at all?

halfer
  • 19,824
  • 17
  • 99
  • 186

0 Answers0