Alex Rivera | Logout

Jersey Client on Android - NullPointerException

Asked 2012-02-18T15:38:17.877
17

I am trying to create a simple Android client for a web service I have built, but something goes wrong at runtime.

Here is the Client:

public class MyClient extends AsyncTask<EditText, Integer, String> {

private EditText text;

protected String doInBackground(EditText... strings) {

    RuntimeDelegate
            .setInstance(new com.sun.ws.rs.ext.RuntimeDelegateImpl());
    WebResource wbr;
    Client client = Client.create();
    wbr = client
            .resource("http://my.ip:8080/MazeService/rest/service/hello");
    String result = wbr.queryParam("number", "10")
            .accept(MediaType.APPLICATION_JSON).get(String.class);
    text = strings[0];
    return result;
}

protected void onProgressUpdate(Integer... progress) {
    // setProgressPercent(progress[0]);
}

protected void onPostExecute(String result) {
    if (result != null)
        this.text.setText(result);
    else
        Log.d("MyApp", "No Result");
}

}

and the Service:

@Path("/service")
public class AndroidService {

@GET
@Produces(MediaType.APPLICATION_JSON )
@Path("/hello")
public String getJSON(@QueryParam("number") String nr)
{

    String s = "Hi there! The number is: "+nr;
    return s;
}
}

I get this stacktrace in LogCat:

02-18 16:26:06.446: E/AndroidRuntime(1381): FATAL EXCEPTION: AsyncTask #1
02-18 16:26:06.446: E/AndroidRuntime(1381): java.lang.RuntimeException: An error occured while executing doInBackground()
02-18 16:26:06.446: E/AndroidRuntime(1381):     at android.os.AsyncTask$3.done(AsyncTask.java:278)
02-18 16:26:06.446: E/AndroidRuntime(1381):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
02-18 16:26:06.446: E/AndroidRuntime(1381):     at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
02-18 16:26:06.446: E/AndroidRuntime(1381):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
02-18 16:2
Edit
Report

1 Answer

2

Following the code:

com/sun/jersey/api/client/ClientResponse.getType()

613    public MediaType getType() {
614        String ct = getHeaders().getFirst("Content-Type");
615        return (ct != null) ? MediaType.valueOf(ct) : null;
616    }

I'd check that the delegate used by MediaType is not null.

javax/ws/rs/core/MediaType.valueOf(java.lang.String)

118    public static MediaType valueOf(String type) throws IllegalArgumentException {
119        return delegate.fromString(type);
120    }

It looks like maybe delegate is null for one client (Android) and not null for your other client.

Take a look at this to get an idea for how the delegate is initialised. It may help your investigations.

javax/ws/rs/ext/RuntimeDelegate.java

answered 2012-02-18T23:45:48.840

Your Answer