Java Android中的异步Http Post

Java Android中的异步Http Post,java,android,eclipse,http-post,Java,Android,Eclipse,Http Post,我正在开发一个与我的网站通信的小测试应用程序。它生成一个带有凭据的HttpPost,以查看用户是否已注册 然而,由于某些原因,帖子是即时生成的,即使它应该需要一秒钟,而且总是空的。这是我大约一年前用过的一门课,那时我还在学习 private class LoginTask extends AsyncTask<String, Integer, String> { private HashMap<String, String> mData = null;// pos

我正在开发一个与我的网站通信的小测试应用程序。它生成一个带有凭据的HttpPost,以查看用户是否已注册

然而,由于某些原因,帖子是即时生成的,即使它应该需要一秒钟,而且总是空的。这是我大约一年前用过的一门课,那时我还在学习

private class LoginTask extends AsyncTask<String, Integer, String> {

    private HashMap<String, String> mData = null;// post data
    public String serverResult = "";
    /**
     * constructor
     */
    public LoginTask(HashMap<String, String> data) {
        mData = data;
    }

    /**
     * background
     */
    @Override
    protected String doInBackground(String... params) {
        byte[] result = null;
        String str = "";
        HttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost(params[0]);// in this case, params[0] is URL
        try {
            // set up post data
            ArrayList<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();
            Iterator<String> it = mData.keySet().iterator();
            while (it.hasNext()) {
                String key = it.next();
                nameValuePair.add(new BasicNameValuePair(key, mData.get(key)));
            }

            post.setEntity(new UrlEncodedFormEntity(nameValuePair, "UTF-8"));
            HttpResponse response = client.execute(post);
            StatusLine statusLine = response.getStatusLine();
            if(statusLine.getStatusCode() == HttpURLConnection.HTTP_OK){
                result = EntityUtils.toByteArray(response.getEntity());
                str = new String(result, "UTF-8");
            }
        }
        catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        catch (Exception e) {
        }
        serverResult = str;
        return str;
    }

    /**
     * on getting result
     */
    @Override
    protected void onPostExecute(String result) {
        serverResult = result;
        pb.setVisibility(View.GONE);

        if(serverResult == "no")
        {
            Toast t = Toast.makeText(MainActivity.this, "Login failed. Correct username or password", Toast.LENGTH_LONG);
            t.show();
        }
        else if (serverResult.contains("email"))
        {
            Toast t = Toast.makeText(MainActivity.this, "HELLOOOOO", Toast.LENGTH_LONG);
            t.show();
        }
        else    
        {
            Toast t = Toast.makeText(MainActivity.this, "Server error: " + serverResult, Toast.LENGTH_LONG);
            t.show();
        }
    }

    protected void onProgressUpdate(Integer... progress) {
        pb.setProgress(progress[0]);
    }
}
私有类登录任务扩展异步任务{
私有HashMap mData=null;//post数据
公共字符串serverResult=“”;
/**
*建造师
*/
公共登录任务(哈希映射数据){
mData=数据;
}
/**
*背景
*/
@凌驾
受保护的字符串doInBackground(字符串…参数){
字节[]结果=空;
字符串str=“”;
HttpClient=new DefaultHttpClient();
HttpPost=newhttppost(参数[0]);//在本例中,参数[0]是URL
试一试{
//设置post数据
ArrayList nameValuePair=新的ArrayList();
迭代器it=mData.keySet().Iterator();
while(it.hasNext()){
String key=it.next();
添加(新的BasicNameValuePair(key,mData.get(key));
}
post.setEntity(新的UrlEncodedFormEntity(nameValuePair,“UTF-8”);
HttpResponse response=client.execute(post);
StatusLine StatusLine=response.getStatusLine();
if(statusLine.getStatusCode()==HttpURLConnection.HTTP\u OK){
结果=EntityUtils.toByteArray(response.getEntity());
str=新字符串(结果为“UTF-8”);
}
}
捕获(不支持的编码异常e){
e、 printStackTrace();
}
捕获(例外e){
}
serverResult=str;
返回str;
}
/**
*结果如何
*/
@凌驾
受保护的void onPostExecute(字符串结果){
serverResult=结果;
pb.setVisibility(View.GONE);
如果(服务器结果=“否”)
{
Toast t=Toast.makeText(MainActivity.this,“登录失败。正确的用户名或密码”,Toast.LENGTH\u LONG);
t、 show();
}
else if(serverResult.contains(“电子邮件”))
{
Toast t=Toast.makeText(MainActivity.this,“HELLOOOOO”,Toast.LENGTH\u LONG);
t、 show();
}
其他的
{
Toast t=Toast.makeText(MainActivity.this,“服务器错误:+serverResult,Toast.LENGTH\u LONG);
t、 show();
}
}
受保护的void onProgressUpdate(整数…进度){
pb.setProgress(progress[0]);
}
}

发送到服务器的信息肯定是正确的,应该会返回一些消息,但在这里它总是空的。可能后台进程有问题。

logcat中发生了什么?您是否有任何
例外情况

您是否已将internet权限添加到您的清单中

<uses-permission android:name="android.permission.INTERNET" />


在str=新字符串(结果为“UTF-8”)之前添加日志语句;并查看结果的值。在str的catch块之后添加另一个log语句。看看发生了什么事了吗?您可能会得到一些在Logcat中看不到的其他异常,因为您正在吃异常:
catch(exception e){}
没有异常,权限就是问题所在。没有权限肯定会导致设备跳过post部分,因此会出现即时的空结果。