Android 如何从活动向AsyncTask发送数据?
我正在开发一个应用程序,因为我必须将数据发送到服务器。我在获取用户详细信息时遇到异常。空指针异常请告诉我哪里出错Android 如何从活动向AsyncTask发送数据?,android,android-asynctask,Android,Android Asynctask,我正在开发一个应用程序,因为我必须将数据发送到服务器。我在获取用户详细信息时遇到异常。空指针异常请告诉我哪里出错 @Override protected Void doInBackground(Void... params) { // TODO Auto-generated method stub httpClient = new DefaultHttpClient(); httpPost = ne
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
httpClient = new DefaultHttpClient();
httpPost = new HttpPost(TrafficConstants.USER_REG_URL);
Log.e("userName", details.getUserName());
Log.e("pass", details.getPassword());
Log.e("MOb",details.getMobileNumber());
try{
arrayList = new ArrayList<NameValuePair>(3);
arrayList.add(new
BasicNameValuePair("usr",details.getUserName()));
arrayList.add(new
BasicNameValuePair("pass",details.getPassword()));
arrayList.add(new
BasicNameValuePair("mob",details.getMobileNumber()));
httpPost.setEntity(new UrlEncodedFormEntity(arrayList));
HttpResponse response = httpClient.execute(httpPost);
}
catch(Exception e){
e.printStackTrace();
}
return null;
}
我的活动代码
userDetails = new DetailsDTO();
userName = userNameEdit.getText().toString().trim();
password = passwordEdit.getText().toString().trim();
confirmPwd = confirmPasswordEdit.getText().toString();
mobileNo = mobileNoEdit.getText().toString();
userDetails.setUserName(userName);
userDetails.setPassword(password);
userDetails.setConfirmPwd(confirmPwd);
userDetails.setMobileNumber(mobileNo);
(new UserDetailsAsync(mContext)).execute();
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
httpClient = new DefaultHttpClient();
httpPost = new HttpPost(TrafficConstants.USER_REG_URL);
Log.e("userName", details.getUserName());
Log.e("pass", details.getPassword());
Log.e("MOb",details.getMobileNumber());
try{
arrayList = new ArrayList<NameValuePair>(3);
arrayList.add(new
BasicNameValuePair("usr",details.getUserName()));
arrayList.add(new
BasicNameValuePair("pass",details.getPassword()));
arrayList.add(new
BasicNameValuePair("mob",details.getMobileNumber()));
httpPost.setEntity(new UrlEncodedFormEntity(arrayList));
HttpResponse response = httpClient.execute(httpPost);
}
catch(Exception e){
e.printStackTrace();
}
return null;
}
我的任务代码:
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
httpClient = new DefaultHttpClient();
httpPost = new HttpPost(TrafficConstants.USER_REG_URL);
Log.e("userName", details.getUserName());
Log.e("pass", details.getPassword());
Log.e("MOb",details.getMobileNumber());
try{
arrayList = new ArrayList<NameValuePair>(3);
arrayList.add(new
BasicNameValuePair("usr",details.getUserName()));
arrayList.add(new
BasicNameValuePair("pass",details.getPassword()));
arrayList.add(new
BasicNameValuePair("mob",details.getMobileNumber()));
httpPost.setEntity(new UrlEncodedFormEntity(arrayList));
HttpResponse response = httpClient.execute(httpPost);
}
catch(Exception e){
e.printStackTrace();
}
return null;
}
试试这个
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
httpClient = new DefaultHttpClient();
httpPost = new HttpPost(TrafficConstants.USER_REG_URL);
Log.e("userName", details.getUserName());
Log.e("pass", details.getPassword());
Log.e("MOb",details.getMobileNumber());
try{
arrayList = new ArrayList<NameValuePair>(3);
arrayList.add(new
BasicNameValuePair("usr",details.getUserName()));
arrayList.add(new
BasicNameValuePair("pass",details.getPassword()));
arrayList.add(new
BasicNameValuePair("mob",details.getMobileNumber()));
httpPost.setEntity(new UrlEncodedFormEntity(arrayList));
HttpResponse response = httpClient.execute(httpPost);
}
catch(Exception e){
e.printStackTrace();
}
return null;
}
new UserDetailsAsync(userName,password,confirmPwd,mobileNo,mContext)).execute();
在异步任务中添加构造函数
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
httpClient = new DefaultHttpClient();
httpPost = new HttpPost(TrafficConstants.USER_REG_URL);
Log.e("userName", details.getUserName());
Log.e("pass", details.getPassword());
Log.e("MOb",details.getMobileNumber());
try{
arrayList = new ArrayList<NameValuePair>(3);
arrayList.add(new
BasicNameValuePair("usr",details.getUserName()));
arrayList.add(new
BasicNameValuePair("pass",details.getPassword()));
arrayList.add(new
BasicNameValuePair("mob",details.getMobileNumber()));
httpPost.setEntity(new UrlEncodedFormEntity(arrayList));
HttpResponse response = httpClient.execute(httpPost);
}
catch(Exception e){
e.printStackTrace();
}
return null;
}
String userName,password,confirmPwd,mobileNo;
Context context;
// constructor
public UserDetailsAsync(String userName,String password,String confirmPwd,String mobileNo, Context context) {
this.userName = userName;
this.password = password;
this.confirmPwd = confirmPwd;
this.mobileNo = mobileNo;
this.context = context;
}
或
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
httpClient = new DefaultHttpClient();
httpPost = new HttpPost(TrafficConstants.USER_REG_URL);
Log.e("userName", details.getUserName());
Log.e("pass", details.getPassword());
Log.e("MOb",details.getMobileNumber());
try{
arrayList = new ArrayList<NameValuePair>(3);
arrayList.add(new
BasicNameValuePair("usr",details.getUserName()));
arrayList.add(new
BasicNameValuePair("pass",details.getPassword()));
arrayList.add(new
BasicNameValuePair("mob",details.getMobileNumber()));
httpPost.setEntity(new UrlEncodedFormEntity(arrayList));
HttpResponse response = httpClient.execute(httpPost);
}
catch(Exception e){
e.printStackTrace();
}
return null;
}
在活动中使用您的userDetails作为public static userDetails
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
httpClient = new DefaultHttpClient();
httpPost = new HttpPost(TrafficConstants.USER_REG_URL);
Log.e("userName", details.getUserName());
Log.e("pass", details.getPassword());
Log.e("MOb",details.getMobileNumber());
try{
arrayList = new ArrayList<NameValuePair>(3);
arrayList.add(new
BasicNameValuePair("usr",details.getUserName()));
arrayList.add(new
BasicNameValuePair("pass",details.getPassword()));
arrayList.add(new
BasicNameValuePair("mob",details.getMobileNumber()));
httpPost.setEntity(new UrlEncodedFormEntity(arrayList));
HttpResponse response = httpClient.execute(httpPost);
}
catch(Exception e){
e.printStackTrace();
}
return null;
}
在您的异步任务中
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
httpClient = new DefaultHttpClient();
httpPost = new HttpPost(TrafficConstants.USER_REG_URL);
Log.e("userName", details.getUserName());
Log.e("pass", details.getPassword());
Log.e("MOb",details.getMobileNumber());
try{
arrayList = new ArrayList<NameValuePair>(3);
arrayList.add(new
BasicNameValuePair("usr",details.getUserName()));
arrayList.add(new
BasicNameValuePair("pass",details.getPassword()));
arrayList.add(new
BasicNameValuePair("mob",details.getMobileNumber()));
httpPost.setEntity(new UrlEncodedFormEntity(arrayList));
HttpResponse response = httpClient.execute(httpPost);
}
catch(Exception e){
e.printStackTrace();
}
return null;
}
Log.e("userName", YourActivity.userDetails.getUserName());
Log.e("pass", YourActivity.userDetails.getPassword());
Log.e("MOb", YourActivity.userDetails.getMobileNumber());
尝试创建
userDetails=newdetailsdto()的实例
在AsyncTask内部,并将详细信息.getUserName()
更改为userDetails.getUserName()
最好尝试将对象传递到AsyncTask doInBackground:
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
httpClient = new DefaultHttpClient();
httpPost = new HttpPost(TrafficConstants.USER_REG_URL);
Log.e("userName", details.getUserName());
Log.e("pass", details.getPassword());
Log.e("MOb",details.getMobileNumber());
try{
arrayList = new ArrayList<NameValuePair>(3);
arrayList.add(new
BasicNameValuePair("usr",details.getUserName()));
arrayList.add(new
BasicNameValuePair("pass",details.getPassword()));
arrayList.add(new
BasicNameValuePair("mob",details.getMobileNumber()));
httpPost.setEntity(new UrlEncodedFormEntity(arrayList));
HttpResponse response = httpClient.execute(httpPost);
}
catch(Exception e){
e.printStackTrace();
}
return null;
}
@Override
protected Void doInBackground(DetailsDTO... params) {
// TODO Auto-generated method stub
httpClient = new DefaultHttpClient();
httpPost = new HttpPost(TrafficConstants.USER_REG_URL);
DetailsDTO userDetails = params[0];
Log.e("userName", userDetails.getUserName());
Log.e("pass", userDetails.getPassword());
Log.e("MOb",userDetails.getMobileNumber());
try{
arrayList = new ArrayList<NameValuePair>(3);
arrayList.add(new
BasicNameValuePair("usr",userDetails.getUserName()));
arrayList.add(new
BasicNameValuePair("pass",userDetails.getPassword()));
arrayList.add(new
BasicNameValuePair("mob",userDetails.getMobileNumber()));
httpPost.setEntity(new UrlEncodedFormEntity(arrayList));
HttpResponse response = httpClient.execute(httpPost);
}
catch(Exception e){
e.printStackTrace();
}
return null;
}
如果这没有帮助,请准确地编写activity类的
150行
,这会使你的应用程序与NPE崩溃。我认为你的doinbackground
方法返回空值。因此,在类中声明AsyncTask时,它可能会在onpostexecute
中导致错误,请按如下方式声明它:
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
httpClient = new DefaultHttpClient();
httpPost = new HttpPost(TrafficConstants.USER_REG_URL);
Log.e("userName", details.getUserName());
Log.e("pass", details.getPassword());
Log.e("MOb",details.getMobileNumber());
try{
arrayList = new ArrayList<NameValuePair>(3);
arrayList.add(new
BasicNameValuePair("usr",details.getUserName()));
arrayList.add(new
BasicNameValuePair("pass",details.getPassword()));
arrayList.add(new
BasicNameValuePair("mob",details.getMobileNumber()));
httpPost.setEntity(new UrlEncodedFormEntity(arrayList));
HttpResponse response = httpClient.execute(httpPost);
}
catch(Exception e){
e.printStackTrace();
}
return null;
}
class TestAsyncTask extends AsyncTask<Context, Void, Void>{
@Override
protected Void doInBackground(Context... params) {
// TODO Auto-generated method stub
Context context = params[0];
return null;
}
}
发布您的错误日志,即日志您已将数据设置为userDetails对象并从details对象获取??使用userDetails代替details我添加了请看我的代码下我写的这两个都是单独的classes@Durga
Log.e(“userName”,details.getUserName())``details
可能为空。在哪里初始化的?@Durga不,不是。初始化为details=newdetailsdto()代码>所以它被初始化为新的。@durga:谢谢你接受这个答案:)你让我开心