2016-01-29 2 views
0

Я успешно завершил модуль сервлетов 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(), но я ищу некоторые рекомендации.

+0

Вы уверены, перераспределена новая версия «http://servlet-example-1198.appspot.com/hello»? Измените метод _doGet_, чтобы вернуть что-то еще, затем вставьте URL-адрес в браузере и проверьте это. – Berger

+0

Я запустил серверный модуль в Android Studio, поэтому я уверен, что перераспределил его на сервер. Почему мне нужно что-то менять в методе doGet()? – tccpg288

+0

doGet() будет немедленно переписывать свой ответ в браузере и легче назвать (метод GET по умолчанию используется в браузере), поэтому он облегчает отладку. – Berger

ответ

0

Интересно, может быть, кто-то может помочь объяснить разницу. Когда я просто нажимаю зеленую стрелку для моего модуля приложения, который не нажимает на сервер, однако Build> Deploy Module to App Engine разрешил мою проблему. Не был уверен, что есть разница ..

enter image description here

Смежные вопросы