android - 将数据传递给类中的主要活动

时间:2012-10-20 14:49:25

标签: android facebook listview android-activity handler

我正在尝试根据facebook-android-sdk中的示例实现Facebook应用。 我正在改变它,我很难解决一些非常基本的问题。

我正在进行主要活动,显示Facebook附近的地方。 这就是mainActivity.java中的代码

private void getFBPlaces()
{
   fbObject.fetchPlaces();

   // NOW I want to fill my listview with the results.....
   // someting like
   placesList = (ListView) findViewById(R.id.places_list);
   placesList.setOnItemClickListener(Places.this);
   placesList.setAdapter(new PlacesListAdapter(Places.this));

}

这是来自FBObject.java的相关代码,请参阅TODO

private void fetchPlaces() {
    /*
     * Source tag: fetch_places_tag
     */
    Bundle params = new Bundle();
    params.putString("type", "place");
    try {
        params.putString("center",
                location.getString("latitude") + "," + location.getString("longitude"));
    } catch (JSONException e) {
        showToast("No places fetched.");
        return;
    }
    params.putString("distance", "1000");
    Utility.mAsyncRunner.request("search", params, new placesRequestListener());
}

/*
 * Callback after places are fetched.
 */
public class placesRequestListener extends BaseRequestListener {

    @Override
    public void onComplete(final String response, final Object state) {
        Log.d("Facebook-FbAPIs", "Got response: " + response);
        dialog.dismiss();

        try {
            jsonArray = new JSONObject(response).getJSONArray("data");
            if (jsonArray == null) {
                showToast("Error: nearby places could not be fetched");
                return;
            }
        } catch (JSONException e) {
            showToast("Error: " + e.getMessage());
            return;
        }
        mHandler.post(new Runnable() {
            @Override
            public void run() {

                // TODO: I want to return the result to main activity
                .....
            }
        });

    }

有任何想法吗? 感谢

2 个答案:

答案 0 :(得分:0)

我这样做的方法是将活动实例传递给PlacesRequestListener,并在完整的回调中执行类似“activity.findViewById(R.id.places_list)”的操作以获取列表。从这里你可以设置适配器。 当然,该方法需要在主线程上运行才能操作UI

答案 1 :(得分:0)

您应该考虑使用Android SDK的新v3.0b。特别是,它有一个内置的位置选择器,可以帮助加速你在这里尝试做的事情。

您可以在http://developers.facebook.com/android

找到它