【问题标题】:How to call a method如何调用方法
【发布时间】:2014-11-13 15:08:32
【问题描述】:

如何调用不同类中的方法并在 MainActivity 中获取结果。

我在我的 API 中调用 Get 方法。但我不确定如何将结果数据传回 mainActivity:

我的代码

CallAPI 类:

...
public void Get() {
        Log.i(TAG, "GET()");
        // GET method example
        new AsyncTask<Void, Void, String>() {

            protected String doInBackground(Void... parameters) {
                API api = new API(mApiKey, mApiSecret);

                List<NameValuePair> params = new ArrayList<NameValuePair>();       
                params.add(new BasicNameValuePair("api_key", mApiKey));                     

                return api.get("category", params);
            }

            protected void onPostExecute(String result) {  // *** >I NEED THIS result< ***
                Log.i(TAG + " - APIRESULT", "GET() => " + result);
            }

        }.execute();
    }//end Get
...

MainActivity 类:

...
super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main)

           mCallApi.Get();

...

所以在 MainActivity 中我可以运行该方法,但不确定如何在此处获取结果日期。

谢谢

【问题讨论】:

  • 为方法提供返回类型......当你调用该方法时......将响应存储在字符串对象中......

标签: java android class methods return


【解决方案1】:

使用接口。由于代码是异步的,所以不能使用返回值。

interface myCallBack(){
    public void callBack( String result );
}

public void Get(final myCallBack callback) {
    Log.i(TAG, "GET()");
    // GET method example
    new AsyncTask<Void, Void, String>() {

        protected String doInBackground(Void... parameters) {
            API api = new API(mApiKey, mApiSecret);

            List<NameValuePair> params = new ArrayList<NameValuePair>();       
            params.add(new BasicNameValuePair("api_key", mApiKey));                     

            return api.get("category", params);
        }

        protected void onPostExecute(String result) {  // *** >I NEED THIS result< ***
            Log.i(TAG + " - APIRESULT", "GET() => " + result);
            callback.callBack( result );
        }

    }.execute();
}

来自班级:

...

get( new myCallBack(){ 
   public void callBack(String result ){
   //do something with result.
   }
} 
);

【讨论】:

    【解决方案2】:

    A. public void Get() {} 这没有任何用于将值返回给调用者的参数 B.即使它有一个返回类型,它也无关紧要,因为你在方法内部产生了一个 AsyncTask,返回 值与操作结果无关。

    现在来解决您的问题,这可以通过观察者设计模式来解决。这是我对类似问题的回复,请仔细阅读。这将解决您的问题。 Observer Design

    【讨论】:

      猜你喜欢
      • 2021-12-21
      • 2015-05-17
      • 1970-01-01
      • 2013-12-25
      • 2020-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多