Java 从非活动截击类显示ProgressDialog

Java 从非活动截击类显示ProgressDialog,java,android,android-volley,progressdialog,Java,Android,Android Volley,Progressdialog,当我的应用程序从web服务获取数据时,我试图显示ProgressDialog。当DataController完成从解析web服务添加对象时,我还想调用MapsActivity(主活动)中的一个方法 在我的代码中,什么都没有发生(即没有出现ProgressDialog),我一直在思考如何让MapsActivity知道对象已经创建 如您所见,我已尝试使ProgressDialog与一起显示 pd.show(context, "text", "text") MapsActivity.java pub

当我的应用程序从web服务获取数据时,我试图显示ProgressDialog。当DataController完成从解析web服务添加对象时,我还想调用MapsActivity(主活动)中的一个方法

在我的代码中,什么都没有发生(即没有出现ProgressDialog),我一直在思考如何让MapsActivity知道对象已经创建

如您所见,我已尝试使ProgressDialog与一起显示

pd.show(context, "text", "text")
MapsActivity.java

public class MapsActivity extends FragmentActivity {
    private DataController controller = new DataController(MapsActivity.this);

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

        sharedPref = new SharedPreference(MapsActivity.this);
        storedLikes = controller.readLike(sharedPref);
        //This runs getLikedPos() in DataController

        /Lots of code....
public class DataController {
// Fields

public DataController(MapsActivity mapsActivity) {
    this.context = mapsActivity;
}

public void getLikedPos() {

    this.url = getUrl();

    JsonObjectRequest jrequest = new JsonObjectRequest(Request.Method.GET, url, null,
            new Response.Listener<JSONObject>() {

                @Override
                public void onResponse(JSONObject response) {
                    try {
                        ProgressDialog pd = ProgressDialog.show(context, "In progress", "Loading");
                        int success = response.getInt("success");

                        if (success == 1) {
                            JSONArray ja = response.getJSONArray("spots");

                            for (int i=0; i < ja.length(); i++) {
                                JSONObject spot = ja.getJSONObject(i);

                                Location location = new Location("");
                                location.setLatitude(spot.getDouble(LIKE_LAT));
                                location.setLongitude(spot.getDouble(LIKE_LONG));

                                int id = spot.getInt(LIKE_ID);

                                String time = spot.getString(LIKE_TIMESTAMP);
                                Calendar parsedTime = convertDate(time);
                                likeArr.add(new Like(location, id, parsedTime));
                            }
                            System.out.println("Size of LikeArr ArrayList after parsing: " + likeArr.size());
                            pd.dismiss();
                            //context.updateMap();   ??
                        }

                    } catch (JSONException e) {
                        e.printStackTrace();    
                    }

                }
            }
            , new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
        }
    });
DataController.Java

public class MapsActivity extends FragmentActivity {
    private DataController controller = new DataController(MapsActivity.this);

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

        sharedPref = new SharedPreference(MapsActivity.this);
        storedLikes = controller.readLike(sharedPref);
        //This runs getLikedPos() in DataController

        /Lots of code....
public class DataController {
// Fields

public DataController(MapsActivity mapsActivity) {
    this.context = mapsActivity;
}

public void getLikedPos() {

    this.url = getUrl();

    JsonObjectRequest jrequest = new JsonObjectRequest(Request.Method.GET, url, null,
            new Response.Listener<JSONObject>() {

                @Override
                public void onResponse(JSONObject response) {
                    try {
                        ProgressDialog pd = ProgressDialog.show(context, "In progress", "Loading");
                        int success = response.getInt("success");

                        if (success == 1) {
                            JSONArray ja = response.getJSONArray("spots");

                            for (int i=0; i < ja.length(); i++) {
                                JSONObject spot = ja.getJSONObject(i);

                                Location location = new Location("");
                                location.setLatitude(spot.getDouble(LIKE_LAT));
                                location.setLongitude(spot.getDouble(LIKE_LONG));

                                int id = spot.getInt(LIKE_ID);

                                String time = spot.getString(LIKE_TIMESTAMP);
                                Calendar parsedTime = convertDate(time);
                                likeArr.add(new Like(location, id, parsedTime));
                            }
                            System.out.println("Size of LikeArr ArrayList after parsing: " + likeArr.size());
                            pd.dismiss();
                            //context.updateMap();   ??
                        }

                    } catch (JSONException e) {
                        e.printStackTrace();    
                    }

                }
            }
            , new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
        }
    });
公共类数据控制器{
//田地
公共数据控制器(MapsActivity MapsActivity){
this.context=mapsActivity;
}
public void getLikedPos(){
this.url=getUrl();
JsonObjectRequest jrequest=新的JsonObjectRequest(Request.Method.GET,url,null,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
试一试{
ProgressDialog pd=ProgressDialog.show(上下文“正在进行”、“正在加载”);
int success=response.getInt(“success”);
如果(成功==1){
JSONArray ja=response.getJSONArray(“点”);
对于(int i=0;i
请查看
AsyncTask
。这提供了一种机制,可以精确地执行您想要的操作,您应该可以找到大量的教程,其中有关于如何使用它的示例。感谢您的评论。我已经读了很多遍,在使用截击时不需要使用AsyncTask。是否需要详细说明?只有一件事-
onResponse()
是在响应实际送达后调用的。如果您想显示有意义的进度对话框,我建议您在将请求添加到队列之前执行此操作。驳回逻辑是正确的。抱歉,我对截击一无所知。我在问题描述中遗漏了这一点。请忽略我。