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:谢谢你接受这个答案:)你让我开心