Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在doInbackground中调用局部变量_Android_Android Asynctask - Fatal编程技术网

Android 在doInbackground中调用局部变量

Android 在doInbackground中调用局部变量,android,android-asynctask,Android,Android Asynctask,我使用的是asynctask,但是我不能在doInBackground方法中处理局部变量,所以在我的例子中,当我想设置局部变量测试时,我得到了一个错误 那我该怎么办? 当我以这种方式设置test时,test=“testme”没有这个选项,我并没有得到一个错误,但test总是空的。 那么,在doinbackground方法中,我可以做些什么来设置一个局部变量呢 public class ConnectTask extends AsyncTask{ Context context;

我使用的是asynctask,但是我不能在doInBackground方法中处理局部变量,所以在我的例子中,当我想设置局部变量测试时,我得到了一个错误 那我该怎么办? 当我以这种方式设置test时,test=“testme”没有这个选项,我并没有得到一个错误,但test总是空的。 那么,在doinbackground方法中,我可以做些什么来设置一个局部变量呢

public class ConnectTask extends AsyncTask{
    Context context;
    User user2 ;
    String test;
    private User authentifcatedUser;

    public ConnectTask(User authentifcatedUser) {
        this.authentifcatedUser = authentifcatedUser;

    }

    public User getAuthentifcatedUser() {
        return authentifcatedUser;
    }

    public void setAuthentifcatedUser(User authentifcatedUser) {
        this.authentifcatedUser = authentifcatedUser;
    }



    public String getTest() {
        return test;
    }

    public  User getUser(){
        return  this.user2;
    }

    public void setTest(String test) {
        this.test = test;
    }

    @Override
    protected Object doInBackground(Object[] params) {

        connect();

        return test;
    }

    public String connect(){


        final Firebase ref = new Firebase("https://app.firebaseio.com/users");
                Query query = ref.orderByChild("username").equalTo("testme");
                query.addListenerForSingleValueEvent(new ValueEventListener() {

                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        for (DataSnapshot userSnapshot : dataSnapshot.getChildren()) {
                          User  user = userSnapshot.getValue(User.class);

                           System.out.println("my birth day is "+user.getDateOfBirth());

                          user2=new User(user.getUsername(),user.getEmail(),user.getPassword(),user.getSignUpDate(),user.dateOfBirth);
                            System.out.println("my email is" + user2.getEmail());
                            test="aaaaaaaaa";


                        }

                       /* User user = dataSnapshot.getValue(User.class);
                        Log.w( "tag", dataSnapshot.toString());*/

                    }

                    @Override
                    public void onCancelled(FirebaseError firebaseError) {

                    }

                });


        return test;


    }

    @Override
    protected void onPostExecute(Object o) {
        super.onPostExecute(o);

        System.out.println("retuuuurn"+connect())   ;

    }
}

Asynctask doInBackground()
方法在后台线程中工作您无法在后台线程中操作UI线程对象这就是您遇到问题的原因

要在后台线程中进行更改,可以使用
doInBackground()

更新您的案例

 public String connect() {

        final Firebase ref = new Firebase("https://app.firebaseio.com/users");
        Query query = ref.orderByChild("username").equalTo("testme");
        query.addListenerForSingleValueEvent(new ValueEventListener() {

            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot userSnapshot : dataSnapshot.getChildren()) {
                    User user = userSnapshot.getValue(User.class);

                    System.out.println("my birth day is " + user.getDateOfBirth());

                    user2 = new User(user.getUsername(), user.getEmail(), user.getPassword(), user.getSignUpDate(), user.dateOfBirth);
                    System.out.println("my email is" + user2.getEmail());
//                    test = "aaaaaaaaa";
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() { 
                            test = "aaaaaaaaa";
                        }
                    });

                       /* User user = dataSnapshot.getValue(User.class);
                        Log.w( "tag", dataSnapshot.toString());*/
                }
            }

            @Override
            public void onCancelled(FirebaseError firebaseError) {

            }
        });
        return test;
    }

Asynctask doInBackground()
方法在后台线程中工作您无法在后台线程中操作UI线程对象这就是您遇到问题的原因

要在后台线程中进行更改,可以使用
doInBackground()

更新您的案例

 public String connect() {

        final Firebase ref = new Firebase("https://app.firebaseio.com/users");
        Query query = ref.orderByChild("username").equalTo("testme");
        query.addListenerForSingleValueEvent(new ValueEventListener() {

            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot userSnapshot : dataSnapshot.getChildren()) {
                    User user = userSnapshot.getValue(User.class);

                    System.out.println("my birth day is " + user.getDateOfBirth());

                    user2 = new User(user.getUsername(), user.getEmail(), user.getPassword(), user.getSignUpDate(), user.dateOfBirth);
                    System.out.println("my email is" + user2.getEmail());
//                    test = "aaaaaaaaa";
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() { 
                            test = "aaaaaaaaa";
                        }
                    });

                       /* User user = dataSnapshot.getValue(User.class);
                        Log.w( "tag", dataSnapshot.toString());*/
                }
            }

            @Override
            public void onCancelled(FirebaseError firebaseError) {

            }
        });
        return test;
    }

你到底想要什么??你是想说
test=“aaaaaaaaaaaaa”
不会设置
测试的值
?是的,我想设置测试值请参考下面的@Sohail Zahid的答案。。这是正确的,它不起作用:/write context.runOnUiThread(new Runnable(){@Override public void run(){//btn.setText(“#”+i);test=“?”;});你到底想要什么??你是想说
test=“aaaaaaaaaaaaa”
不会设置
测试的值
?是的,我想设置测试值请参考下面的@Sohail Zahid的答案。。这是正确的,它不起作用:/write context.runOnUiThread(new Runnable(){@Override public void run(){//btn.setText(“#”+i);test=“?”;});但是当我在doInBackgroundprotected对象doInBackground(Object[]参数){connect();runOnUiThread(new Runnable(){@Override public void run(){//btn.setText(“#”+i);test=“?”;});return test;}中调用它时,它就不起作用了已解决:我使用了runOnUiThread,顺便说一句,runOnUiThread是android.app.Activity的方法,所以我在我的task@fatma19如果我的回答对你有帮助,请考虑TIK和投票。但是在doiBead保护对象doI背景(object [] PARAMS){连接())中,它不起作用。;runOnUiThread(new Runnable(){@Override public void run(){//btn.setText(“#”+i);test=“?”;}});return test;}已解决:我使用了runOnUiThread,顺便说一句,runOnUiThread是android.app.Activity的方法,所以我在我的task@fatma19如果我的回答对你有帮助,请考虑一下并投票表决。