Я успешно завершил модуль сервлетов Java Studio here. Я пытаюсь изменить ответ, который я получаю с сервера, и отображать его как тост. Я создал пример и получил тост, который сказал «Привет» + имя. Затем я изменил текст в методе res.getWriter(), как показано ниже:Как изменить тип ответа из Java Servlet
public class MyServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
resp.setContentType("text/plain");
resp.getWriter().println("Please use the form to POST to this url");
}
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
String name = req.getParameter("name");
resp.setContentType("text/plain");
if(name == null) {
resp.getWriter().println("Please enter a name");
}
resp.getWriter().println("A test to change text" + name);
}
}
Вот мой MainActivity:
public class MainActivity extends AppCompatActivity {
TextView mNumberCounter;
Button mIncrease;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
mNumberCounter = (TextView) findViewById(R.id.number_counter);
mIncrease = (Button) findViewById(R.id.increase_button);
mIncrease.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new ServletPostAsyncTask().execute(new Pair<Context, String>(getApplicationContext(), mNumberCounter.getText().toString()));
}
});
}
}
А класс ServletPostAsyncTask:
public class ServletPostAsyncTask extends AsyncTask<android.support.v4.util.Pair<Context, String>, Void, String> {
private Context context;
@Override
protected String doInBackground(android.support.v4.util.Pair<Context, String>... params) {
context = params[0].first;
String name = params[0].second;
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("http://servlet-example-1198.appspot.com/hello");
try {
// Add name data to request
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
nameValuePairs.add(new BasicNameValuePair("name", name));
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// Execute HTTP Post Request
HttpResponse response = httpClient.execute(httpPost);
if (response.getStatusLine().getStatusCode() == 200) {
return EntityUtils.toString(response.getEntity());
}
return "Error: " + response.getStatusLine().getStatusCode() + " " + response.getStatusLine().getReasonPhrase();
} catch (ClientProtocolException e) {
return e.getMessage();
} catch (IOException e) {
return e.getMessage();
}
}
@Override
protected void onPostExecute(String result) {
Toast.makeText(context, result, Toast.LENGTH_LONG).show();
}
}
К сожалению , Я все еще получаю ответ «Hello» + номер 1, который у меня есть в своем TextView, когда я ожидаю, что он теперь скажет «Тест на изменение текста. Я ищу, как изменить этот текст, а также изменить сервер r esponse, т. е. если я хочу получить логическое или int вместо простого текста. Насколько я понимаю, это обрабатывается в resp.setContentType(), но я ищу некоторые рекомендации.
Вы уверены, перераспределена новая версия «http://servlet-example-1198.appspot.com/hello»? Измените метод _doGet_, чтобы вернуть что-то еще, затем вставьте URL-адрес в браузере и проверьте это. – Berger
Я запустил серверный модуль в Android Studio, поэтому я уверен, что перераспределил его на сервер. Почему мне нужно что-то менять в методе doGet()? – tccpg288
doGet() будет немедленно переписывать свой ответ в браузере и легче назвать (метод GET по умолчанию используется в браузере), поэтому он облегчает отладку. – Berger