Android系统。如何从Listener onSuceess获取参数

时间:2016-03-30 05:38:06

标签: android

public List<Post> loadPostsFromBomb(){

        postList = new ArrayList<>();

        BmobQuery<Post> query = new BmobQuery<>();

        query.findObjects(ContextHolder.getContext(), new FindListener<Post>() {


            @Override
            public void onSuccess(List<Post> object) {
                // TODO Auto-generated method stub

                if (object.size() != 0) {
                    postList.addAll(object);
                    Toast.makeText(ContextHolder.getContext(),postList.get(0).getUserName(),Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(ContextHolder.getContext(),"还没有约球组织",Toast.LENGTH_LONG).show();
                }

            }

            @Override
            public void onError(int code, String msg) {
                // TODO Auto-generated method stub
                Toast.makeText(ContextHolder.getContext(), msg + " " + code, Toast.LENGTH_LONG).show();
            }
        });

        return postList;

    }

BmobQuery是一种低音工具。现在,我可以在onSuccess()右边获取对象,onSuccess中的postList可以正确赋值。但是当返回postList时,它为null。

有什么问题?我认为这可能是Listener的问题..如何在onSuccess方法中获取对象?非常感谢您的关注。

2 个答案:

答案 0 :(得分:0)

它将始终返回null,因为在

之前调用了return语句
 public void onSuccess(List<Post> object)

所以不是返回创建一个全局List。这样您就可以在 onSuccess()功能

之后访问它

答案 1 :(得分:0)

你需要这样做:

添加界面:

public interface ResponseListener {
    void onSuccess(List<Post> objects);
}

创建method而不是function

public void loadPostsFromBomb(ResponseListener listener){

    postList = new ArrayList<>();

    BmobQuery<Post> query = new BmobQuery<>();

    query.findObjects(ContextHolder.getContext(), new FindListener<Post>() {


        @Override
        public void onSuccess(List<Post> object) {
            // TODO Auto-generated method stub

            if (object.size() != 0) {
                postList.addAll(object);
                listener.onSuccess(postList);
                Toast.makeText(ContextHolder.getContext(),postList.get(0).getUserName(),Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(ContextHolder.getContext(),"还没有约球组织",Toast.LENGTH_LONG).show();

            }

        }

        @Override
        public void onError(int code, String msg) {
            // TODO Auto-generated method stub
            Toast.makeText(ContextHolder.getContext(), msg + " " + code, Toast.LENGTH_LONG).show();
        }
    });
 }

您需要在Activity / Fragment中实施ResponseListener:

您将在Override方法上收到列表。

public class MenuActivity extends ActionBarActivity implements ResponseListener  {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_my_menu);

  // Other stuff

  loadPostsFromBomb(this);

  }

  @Override
  public void onSuccess(List<Post> objects); {
   Log.i("List" , "Received");
  }

}