android异步任务创建

android异步任务创建,android,android-asynctask,httprequest,Android,Android Asynctask,Httprequest,我试图通过http post请求发布一些数据,并了解整个过程。我在android开发者网站上看到了一些红色文档,我看过一些youtube教程,但我仍然有一些不熟悉的地方。我发现了以下登录示例代码,但它不在AsyncTask中。我知道这是必须的。但是当我尝试使用AsyncTask时,我的参数定义错误,我被卡住了。如果我想将一些数据传递给http服务器上的.php脚本,有人能帮我解释一下它是如何工作的吗?这是我的代码:(编辑后,这是我的异步任务尝试): 公共类AndroidLogin扩展活动实现On

我试图通过http post请求发布一些数据,并了解整个过程。我在android开发者网站上看到了一些红色文档,我看过一些youtube教程,但我仍然有一些不熟悉的地方。我发现了以下登录示例代码,但它不在AsyncTask中。我知道这是必须的。但是当我尝试使用AsyncTask时,我的参数定义错误,我被卡住了。如果我想将一些数据传递给http服务器上的.php脚本,有人能帮我解释一下它是如何工作的吗?这是我的代码:(编辑后,这是我的异步任务尝试):

公共类AndroidLogin扩展活动实现OnClickListener{
按钮ok,后退,退出;
文本视图结果;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u android\u登录);
//单击登录按钮
ok=(按钮)findViewById(R.id.btn\u登录);
好的,setOnClickListener(这个);
结果=(TextView)findViewById(R.id.lbl_结果);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(R.menu.activity\u android\u登录,菜单);
返回true;
}
私有类登录扩展异步任务{
@凌驾
受保护的字符串doInBackground(字符串…参数){
//创建一个新的HttpClient和Post头
HttpClient HttpClient=新的DefaultHttpClient();
/*如果用户名和密码等于saranga,login.php将返回true*/
HttpPost HttpPost=新的HttpPost(“http://www.mysite.com/login.php");
试一试{
//添加用户名和密码
EditText uname=(EditText)findViewById(R.id.txt_用户名);
字符串username=uname.getText().toString();
EditText pword=(EditText)findViewById(R.id.txt_密码);
字符串密码=pword.getText().toString();
List nameValuePairs=新的ArrayList(2);
添加(新的BasicNameValuePair(“用户名”,username));
添加(新的BasicNameValuePair(“密码”,password));
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
//执行HTTP Post请求
w(“SENCIDE”,“执行HTTP Post请求”);
HttpResponse response=httpclient.execute(httppost);
字符串str=inputStreamToString(response.getEntity().getContent()).toString();
Log.w(“SENCIDE”,str);
if(str.toString().equalsIgnoreCase(“true”))
{
Log.w(“SENCIDE”、“TRUE”);
result.setText(“登录成功”);
}否则
{
Log.w(“SENCIDE”、“FALSE”);
结果:setText(str);
}
}捕获(客户端协议例外e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
StringBuilder inputStreamToString(InputStream为);
字符串行=”;
StringBuilder总计=新StringBuilder();
//在InputStream周围包装一个BufferedReader
BufferedReader rd=新的BufferedReader(新的InputStreamReader(is));
//读取响应直到结束
试一试{
而((line=rd.readLine())!=null){
合计.追加(行);
}
}捕获(IOE异常){
e、 printStackTrace();
}
//返回完整字符串
返回总数;
返回null;
}
}
公共void onClick(视图){
新登录().execute();
}

}首先,方法签名
受保护的字符串doInBackground(String…params)
意味着
params
需要是
字符串
数组

其次,在
AsyncTask
doInBackground(…)
方法中,永远不要执行以下操作

 EditText uname = (EditText)findViewById(R.id.txt_username);
 String username = uname.getText().toString();

 EditText pword = (EditText)findViewById(R.id.txt_password);
 String password = pword.getText().toString();
…原因是
doInBackground(…)
方法在主(UI)线程的单独线程上运行,尝试访问UI元素(如
EditText
小部件)将导致异常。相反,将这些代码行移动到
活动的
onClick(…)
方法。然后,您可以使用以下方法(例如)将凭据传递给
doInBackground(…)
方法


…然后在
doInBackground(String…params)
方法中,
params[0]
将是用户名,
params[1]
将是密码。

您想知道代码的第二部分发生了什么,或者想知道AsyncTask的工作情况吗?请诚实地阅读这两件事。我想知道如何将其放入AsyncTask,还想知道代码的第二部分发生了什么。:)“但是当我尝试使用AsyncTask时,我的参数定义不正确,我被卡住了。”-好的,那么请发布您尝试使用
AsyncTask
-这就是您的问题所在,不是吗?我按照您的建议编辑了我的问题
 EditText uname = (EditText)findViewById(R.id.txt_username);
 String username = uname.getText().toString();

 EditText pword = (EditText)findViewById(R.id.txt_password);
 String password = pword.getText().toString();
new Login().execute(new String[] {username, password});