2016-06-17 11 views
0

私はasynctaskを使っていますが、私はdoInBackgroundメソッドでローカル変数を扱うことができませんので、私の場合はローカル変数テストを設定したいときにエラーが発生しました どうすればいいですか? 私はこのようにtestを設定するとtest = "testme"これはなくてもエラーは出ませんでしたが、testは常にnullです。 はので、私は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()) ; 

    } 
} 
+0

doInBackground()

runOnUiThread(new Runnable() { @Override public void run() { //btn.setText("#" + i); test ="???"; } }); 

のコードの下に使用してすることができますバックグラウンドスレッドでの変更を行うことが

を更新?あなたは 'test =" aaaaaaaaa "と言っているのですか?' 'test'の値を設定しませんか? –

+0

はい私はテスト値を設定したい – fatma19

+0

以下の@Sohail Zahidの答えを参照してください..それは正しいです –

答えて

2

Asynctask doInBackground()の方法は、あなたが問題を得ている理由は、バックグラウンドスレッドのthatsに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; 
    } 
+0

runOnUiThreadはあらかじめ定義されていますか? – fatma19

+0

はい、すでに終了しています。 –

+0

しかしdoInBackgroundで呼び出すと動作しません – fatma19

関連する問題