【发布时间】:2015-01-09 04:49:39
【问题描述】:
尝试在 servlet doGet() 中执行不同的方法时遇到一些问题。所以当我点击按钮时,它会传递 eventID:
viewDtlEventBtn.setOnClickListener(new OnClickListener(){
public void onClick(View v){
Intent eventDtlIntent = new Intent(context, EventDetail.class);
eventDtlIntent.putExtra("eventID", eventIDTV.getText());
startActivity(eventDtlIntent);
}
});
然后在我的 EventDetail 类中,我正在执行 AsyncTask 类中的方法:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.event_detail);
context = this;
Bundle extras = getIntent().getExtras();
if (extras != null) {
eventID = extras.getString("eventID");
}
eventModel.setEventID(eventID);
new GetEventDetailAsyncTask(context).execute(eventModel);
}
在我的 AsyncTask 类中,我正在调用控制器中的方法来检索从 servlet 返回的 JSON:
@Override
protected Double doInBackground(Event... params) {
try {
eventCtrl.getEventDetailByID(params[0]);
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
在我的控制器类中:
public Event getEventDetailByID(Event event) throws JSONException {
Event eventModel = new Event();
String page;
JSONArray jsonArray;
String eventID = event.getEventID();
try {
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(ENeighbourhoodActivity.URL
+ "?getEventDetailByID&eventID=" + eventID +"");
HttpResponse response = client.execute(request);
HttpEntity entity = response.getEntity();
String responseString = EntityUtils.toString(entity, "UTF-8");
page = "{\'EventDetail\':" + responseString + "}";
try {
JSONObject jsonObject = new JSONObject(page);
jsonArray = jsonObject.getJSONArray("EventDetail");
int length = jsonArray.length();
for (int i = 0; i < length; i++) {
JSONObject attribute = jsonArray.getJSONObject(i);
String eventName = attribute.getString("eventName");
eventModel.setEventName(eventName);
}
} catch (JSONException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
return event;
}
基本上从这里,我正在访问 servlet。在我的 serlvet 类中的 doGet() 中:
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
JSONArray jsonArray = new JSONArray();
PrintWriter out = response.getWriter();
if (request.getParameter("getAllEvent") != null) {
}
catch (JSONException je) {
System.out.println(je.getMessage());
} catch (Exception exc) {
System.out.println(exc.getMessage());
}
out.println(jsonArray.toString());
}
}
我已经有一个用于其他方法的 if 语句。我想知道如何将 getEventDetailByID 和 eventID 参数传递给 servlet,以便它知道要运行哪个方法。
提前致谢。
【问题讨论】:
-
如果附加到请求中,可以通过getParameter方法获取
-
@Alaychem 那么你的意思是我需要设置一个 NameValuePair 来传递 eventID 作为参数。然后在doGet()里面,我得到了参数?
-
不要使用参数在 servlet 内部决定要做什么。更好地使用路径和映射,让它路由到不同的 servlet:stackoverflow.com/questions/10000008/…
-
@zapl 你介意提供一些适合我情况的例子吗?因为我不太了解您提供的线程:(
-
为什么选择 NameValuePair? eventID 不是字符串吗?只需添加
?eventID=foo&getEventDetailByID=fee即可获取请求,是的,获取doGet 上的参数。 (或者按照 zapl 的建议使用不同的 servlet)
标签: java android servlets android-asynctask