如何在Servlet中获取数据,即从Android应用程序发送?

时间:2014-09-23 08:51:58

标签: java android http servlets

我是android的新手,我已经搜索了解决方案,但我找不到合适的解决方案,这就是我的原因 发布此Qn,

我无法在servlet中获取任何值,并且LogCat中没有错误,我的代码中有一些Toast用于检查执行流程,所有Toast仅在第一次尝试时起作用,如果我第二次点击我的按钮,只有第一个Toast可以使用,

请帮我找一个解决方案,

这是我的安卓代码

public void onClick(View v) {
    final   String u=txt_name.getText().toString();
    final   String p=txt_pswd.getText().toString();
    Toast.makeText(getApplicationContext(), u+p,Toast.LENGTH_LONG).show();
    new AsyncTask<String , Void, Void>() {

        @Override
        protected Void doInBackground(String... params) {

            try{
                //Log.d("Asynctask", ""+params);  
                //Looper.prepare();                                                 

                URL url=new URL("http://10.0.2.2:8080/LoginExample/LoginServlet");

                HttpURLConnection urlConnection=(HttpURLConnection)url.openConnection();
                urlConnection.setDoInput(true);
                urlConnection.setDoOutput(true);
                urlConnection.setRequestMethod("GET");
                //Toast.makeText(getApplicationContext(), "connecting..",Toast.LENGTH_LONG).show();
                urlConnection.connect();
                //Toast.makeText(getApplicationContext(), "connected",Toast.LENGTH_LONG).show();
                urlConnection.getOutputStream().write(("key1="+u+"&key2="+p).getBytes());
                //Toast.makeText(getApplicationContext(), "sending....",Toast.LENGTH_LONG).show();
            }catch(Exception e)
            {
                System.out.println("ERROR IN URL CONNECTION---"+e);
            }                                       

            //Looper.loop();
            return null;
        }
    }.execute();    
});

这是我的servlet,

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LoginServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) 
                   throws ServletException, java.io.IOException {

        try
        {       
            System.out.println("-----servlet--------------");
            // UserBean user = new UserBean();
            String uname=request.getParameter("key1");
            String password=request.getParameter("key2");

            System.out.println("uname ins ervlet==="+uname);

            System.out.println("password in servlet==="+password);
        }               
        catch (Throwable theException)      
        {
            System.out.println(theException); 
        }

    }

}

2 个答案:

答案 0 :(得分:1)

AsyncTask编写不正确。在doINBAckground中无需编写Looper。在理想情况下,doInBackground不处理UI元素。删除Toasts声明。使用Log类打印日志。

你要求部分似乎错了。如果获得tye请求,请尝试

URL url=new URL("http://10.0.2.2:8080/LoginExample/LoginServlet?"+"key1="+u+"&key2="+p);

还要检查清单文件中的Internet权限。

提供错误的Stacktrace。

答案 1 :(得分:0)

这是我的解决方案,

public void onClick(View v) {
    final   String u=txt_name.getText().toString();
    final   String p=txt_pswd.getText().toString();
        Toast.makeText(getApplicationContext(), u+p,Toast.LENGTH_LONG).show();
        new AsyncTask<String , Void, Void>() {

            @Override
            protected Void doInBackground(String... params) {

                try{

                        URL url=new URL("http://10.0.2.2:8080/LoginExample/LoginServlet?"+"key1="+u+"&key2="+p);

                    HttpURLConnection urlConnection=(HttpURLConnection)url.openConnection();

                    urlConnection.setRequestMethod("GET");
                    urlConnection.connect();
                    BufferedReader br = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
                    String result = br.readLine();
                    Log.d("MainActivity", result);

                }catch(Exception e)
                    {
                    e.printStackTrace();    
                    System.out.println("ERROR IN URL CONNECTION---"+e);
                    }



            //  Looper.loop();
                return null;
            }
        }.execute();
    }