Java 从非活动截击类显示ProgressDialog
当我的应用程序从web服务获取数据时,我试图显示ProgressDialog。当DataController完成从解析web服务添加对象时,我还想调用MapsActivity(主活动)中的一个方法 在我的代码中,什么都没有发生(即没有出现ProgressDialog),我一直在思考如何让MapsActivity知道对象已经创建 如您所见,我已尝试使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
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()
是在响应实际送达后调用的。如果您想显示有意义的进度对话框,我建议您在将请求添加到队列之前执行此操作。驳回逻辑是正确的。抱歉,我对截击一无所知。我在问题描述中遗漏了这一点。请忽略我。