Tôi đang cố gắng tạo một ứng dụng khách Android đơn giản cho dịch vụ web mà tôi đã tạo, nhưng đã xảy ra sự cố khi chạy.Khách hàng Jersey trên Android - NullPointerException
Đây là Chủ đầu tư:
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");
}
}
và Dịch vụ:
@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;
}
}
tôi nhận được stacktrace này trong 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:26:06.446: E/AndroidRuntime(1381): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
02-18 16:26:06.446: E/AndroidRuntime(1381): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
02-18 16:26:06.446: E/AndroidRuntime(1381): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
02-18 16:26:06.446: E/AndroidRuntime(1381): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
02-18 16:26:06.446: E/AndroidRuntime(1381): at java.lang.Thread.run(Thread.java:856)
02-18 16:26:06.446: E/AndroidRuntime(1381): Caused by: java.lang.NullPointerException
02-18 16:26:06.446: E/AndroidRuntime(1381): at javax.ws.rs.core.MediaType.valueOf(MediaType.java:119)
02-18 16:26:06.446: E/AndroidRuntime(1381): at com.sun.jersey.api.client.ClientResponse.getType(ClientResponse.java:615)
02-18 16:26:06.446: E/AndroidRuntime(1381): at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:532)
02-18 16:26:06.446: E/AndroidRuntime(1381): at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:506)
02-18 16:26:06.446: E/AndroidRuntime(1381): at com.sun.jersey.api.client.WebResource.handle(WebResource.java:674)
02-18 16:26:06.446: E/AndroidRuntime(1381): at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
02-18 16:26:06.446: E/AndroidRuntime(1381): at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:503)
02-18 16:26:06.446: E/AndroidRuntime(1381): at com.maze.client.MyClient.doInBackground(MyClient.java:25)
02-18 16:26:06.446: E/AndroidRuntime(1381): at com.maze.client.MyClient.doInBackground(MyClient.java:1)
02-18 16:26:06.446: E/AndroidRuntime(1381): at android.os.AsyncTask$2.call(AsyncTask.java:264)
02-18 16:26:06.446: E/AndroidRuntime(1381): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
02-18 16:26:06.446: E/AndroidRuntime(1381): ... 5 more
Tôi không hiểu những gì các chuyên nghiệp blem là, vì một máy khách tương tự hoạt động trên PC. Không có vấn đề gì với địa chỉ IP, vì tôi có thể truy cập máy chủ từ Android VirtualDevice.
Phiên bản Android là phiên bản 4.0.3 API 15. Đối với ứng dụng khách, tôi đã sử dụng Jersey 1.11.
EDIT
Tôi cũng đã cố gắng để loại bỏ toàn bộ điều với EditText, vì ai đó nói với tôi nó không được sử dụng như nó phải được. Tuy nhiên, tôi đã nhận được lỗi tương tự. Tôi chỉ đơn giản là không thể hiểu tôi đang làm gì sai. Nếu tôi nên hiển thị bất kỳ thông tin bổ sung nào khác, vui lòng cho tôi biết. Ngoài ra, BẤT K idea ý tưởng là tốt. Tôi mới sử dụng Android và tôi có thể đã mắc phải một số lỗi lầm ngu ngốc.
Vấn đề của bạn là một NullPointer một cái gì đó để làm với 'String kết quả = wbr.queryParam (" số "," 10 ") . Chấp nhận (MediaType.APPLICATION_JSON) .get (String.class);' – Blundell
@Blundell Vâng, tôi nghĩ rằng có thể là vấn đề , nhưng tôi không hiểu TẠI SAO vấn đề này xuất hiện, vì một chương trình đơn giản có chứa mã đó là chạy hoàn hảo. – Dragos
@ L7ColWinters Tôi không hiểu chính xác tôi phải làm như thế nào. Vui lòng cung cấp một số mã. – Dragos