我很沮丧,因为我在等待网络调用时一直在尝试实现一个超级简单的加载轮。我已经搜索并阅读了数十个 SO 问题,我只是觉得我一定错过了一些东西,除非没有人真正做我想做的事情。我试过沿着这AsyncTask
条路线走,但这不是我想要的。
我还要说,现在我的应用程序运行良好,只是从屏幕到屏幕的转换似乎挂起,因为它在网络上等待。我只想要一个加载轮,以便在 1-2 秒内用户知道应用程序正在运行并且没有冻结。
这是我当前的网络调用的样子:
private static String sendDataToServer(String arg1, String arg2)
{
Thread dbThread = new Thread()
{
public void run()
{
// do the call that takes a long time
}
};
dbThread.start();
try {
// I do this so that my program doesn't continue until
// the network call is done and I have received the information
// I need to render my next screen
dbThread.join();
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
现在,为什么我不能ProgressDialog
像这样添加?如果我这样做,progressDialog 永远不会出现。
private static String sendDataToServer(String arg1, String arg2)
{
final ProgressDialog progress = new ProgressDialog(BaseActivity.getInstance());
progress.setIndeterminate(true);
progress.setMessage("Loading...");
progress.show();
Thread dbThread = new Thread()
{
public void run()
{
// do the call that takes a long time
}
};
dbThread.start();
try {
dbThread.join();
progress.dismiss();
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
我想我被卡住了,因为网络调用需要在与 UI 线程不同的线程上,但我不想在我的应用程序中继续,因为我需要该调用的结果才能继续。但如果我这样做,thread.join()
我会举起一切。我以为我需要,AsyncTask
但很快就走下坡路了。如果你好奇的话,这是我的问题。
Android的AsyncTask:多参数,返回值,等待
当这个调用发生而不继续我的应用程序的其余部分时,我怎么只显示一个加载对话框?
编辑
这是我的AsyncTask
尝试。
private class PostToFile extends AsyncTask<PostToFile, Void, Void>{
private String functionName;
private ArrayList<NameValuePair> postKeyValuePairs;
private String result = "";
public PostToFile(String function, ArrayList<NameValuePair> keyValuePairs){
functionName= function;
postKeyValuePairs = keyValuePairs;
}
@Override
protected void onPreExecute() {
progressDialog = ProgressDialog.show(BaseActivity.getInstance(), "Loading", "Please wait...", true, false);
}
@Override
protected Void doInBackground(PostToFile... params) {
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair(FUNCTION_KEYWORD, functionName));
for (int i = 0; i < postKeyValuePairs.size(); i++) {
nameValuePairs.add(postKeyValuePairs.get(i));
}
try{
// ***do the POST magic.***
result = response.toString();
}
catch (Exception e){
// clean up my mess
}
return null;
}
private String getResult(){
return result; // can I use this somehow???
}
@Override
protected void onPostExecute(Void result) {
progressDialog.dismiss();
}
}
当我使用它时:
new PostToPHP(FUNCTION_NAME, postPairings){
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
try
{
if (result != null && !result.startsWith("null"))
{
JSONArray jArray = new JSONArray(result);
parseData(jArray);
}
}
catch (JSONException e)
{
Log.e(Constants.LOG_TAG, e.toString());
}
};
}.execute()
问题是,我有几个这样的电话是背靠背的,它们都是相互依赖的。所以第一个开始,第二个在第一个开始之后立即开始,但在第一个完成之前开始。所以我得到错误的行为。只有在第一个电话完全完成后,我才能开始第二个电话?