Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ProgressDialog不';不要出现在Android中_Android_Android Dialog - Fatal编程技术网

ProgressDialog不';不要出现在Android中

ProgressDialog不';不要出现在Android中,android,android-dialog,Android,Android Dialog,当我在“活动”中获取一些数据时,我试图让ProgressDialog出现。 “活动”正常运行,并获得数据,但未显示ProgressDialog private void updateData() { ProgressDialog dialog = ProgressDialog.show(ParkActivity.this, "fvhnn", "A actualizar. Aguarde por favor...", true); ... ...

当我在“活动”中获取一些数据时,我试图让ProgressDialog出现。 “活动”正常运行,并获得数据,但未显示ProgressDialog

 private void updateData() {
        ProgressDialog dialog = ProgressDialog.show(ParkActivity.this, "fvhnn", "A actualizar. Aguarde por favor...", true);
        ...
        ...
        dialog.dismiss();
        ...
 }
遵循我的活动代码

public class ParkActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Set View to register.xml
        setContentView(R.layout.park);

        SharedPreferences settings = getSharedPreferences(PREF_FILE, 0);
        int ocupados = settings.getInt("ocupados", -1);

        if(ocupados == -1) {
            ((TextView) findViewById(R.id.txtPercentageOcupation)).setVisibility(View.INVISIBLE);
            ((TextView) findViewById(R.id.txtLastUpdate)).setVisibility(View.INVISIBLE);
            ((TextView) findViewById(R.id.txtPlacesAvailable)).setVisibility(View.INVISIBLE);
            ((Button) findViewById(R.id.btnParkUpdate)).setVisibility(View.INVISIBLE);

            updateData();
        } else {
            int total = settings.getInt("total", 440);
            long data = settings.getLong("data", 0);

            putData(ocupados, total, data);
        }


        Button btnUpdate = (Button) findViewById(R.id.btnParkUpdate);
        btnUpdate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                updateData();
            }
        });
    }

    private void updateData() {
        ProgressDialog dialog = ProgressDialog.show(ParkActivity.this, "fvhnn", "A actualizar. Aguarde por favor...", true);
        SharedPreferences settings = getSharedPreferences(PREF_FILE, 0);
        String session = settings.getString("sessionID", "null");
        int[] vagas = ISEP_Proxy.vagas(session);
        Date dt = new Date();
        putData(vagas[0], vagas[1], dt.getTime());
        dialog.dismiss();

        // save data
        SharedPreferences.Editor editor = settings.edit();
        editor.putInt("ocupados", vagas[0]);
        editor.putInt("total", vagas[1]);
        editor.putLong("data", dt.getTime());

        editor.commit();
    }

    private void putData(int ocupados, int total, long date) {
        String placesFormat = getResources().getString(R.string.PLACES_AVAILABLE);
        String percentageFormat = getResources().getString(R.string.PERCENTAGE_OCUPATION);
        String lastUpdate = getResources().getString(R.string.LAST_UPDATE);
        double percentage =  100.0 * ocupados / total;

        SimpleDateFormat df = new SimpleDateFormat("HH'h'mm 'de' dd-MM-yyyy");

        ((TextView) findViewById(R.id.txtPercentageOcupation)).setVisibility(View.VISIBLE);
        ((TextView) findViewById(R.id.txtLastUpdate)).setVisibility(View.VISIBLE);
        ((TextView) findViewById(R.id.txtPlacesAvailable)).setVisibility(View.VISIBLE);
        ((Button) findViewById(R.id.btnParkUpdate)).setVisibility(View.VISIBLE);

        ((TextView) findViewById(R.id.txtPercentageOcupation)).setText(String.format(percentageFormat, ((int) percentage) + "%"));
        ((TextView) findViewById(R.id.txtPlacesAvailable)).setText(String.format(placesFormat, total - ocupados));
        ((TextView) findViewById(R.id.txtLastUpdate)).setText(String.format(lastUpdate, df.format(date)));
    }
}
有人知道问题出在哪里吗


编辑

@Ted Hopp建议使用异步任务。 我创建了GetISEPData类并将其放在对话框中,但现在应用程序给我一个错误并关闭

private class GetISEPData extends AsyncTask<Void, Void, Void> {
    Context cx;
    ProgressDialog dialog;

    public GetISEPData (Context context) {
        cx = context;
    }

    @Override
    protected Void doInBackground(Void... params) {
        SharedPreferences settings = getSharedPreferences(PREF_FILE, 0);
        String session = settings.getString("sessionID", "null");
        int[] vagas = ISEP_Proxy.vagas(session);
        Date dt = new Date();
        putData(vagas[0], vagas[1], dt.getTime());

        // save data
        SharedPreferences.Editor editor = settings.edit();
        editor.putInt("ocupados", vagas[0]);
        editor.putInt("total", vagas[1]);
        editor.putLong("data", dt.getTime());

        editor.commit();            
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        dialog = ProgressDialog.show(ParkActivity.this, "", "A actualizar. Aguarde por favor...", true);
    }

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();
        dialog.dismiss();
    }       
}

在调用
show()
和调用
dismise()
之间,您需要在单独的线程中完成这项工作。在将控制权返回到框架之前,对话框没有机会绘制。请看一个简单的方法来做到这一点


编辑:在代码的更新版本中,onPreExecute和onPostExecute的逻辑颠倒了——您试图在对话框显示之前关闭它

在调用
show()
和调用
dismise()
之间,您需要在单独的线程中完成这项工作。在将控制权返回到框架之前,对话框没有机会绘制。请看一个简单的方法来做到这一点


编辑:在代码的更新版本中,onPreExecute和onPostExecute的逻辑颠倒了——您试图在对话框显示之前关闭它

我认为它已显示,但它也会立即解除,因为show()和disclose()方法放在同一个线程中。

我认为它已显示,但它也会立即解除,因为show()和disclose()方法位于同一个线程中方法放在同一个线程中。

可能重复的thx可能重复的响应我创建了类GetISEPData并放置在对话框中,但现在应用程序给我一个错误并关闭<代码>私有类GetISEPData扩展AsyncTask{Context cx;ProgressDialog对话框;公共GetISEPData(Context Context){cx=Context;}@Override受保护的Void doInBackground(Void…params){int[]vagas=ISEP_Proxy.vagas(会话);Date dt=new Date();putData(vagas[0],vagaas[1],dt.getTime());}
@Override protected void onPostExecute(void result){super.onPostExecute(result);dialog=ProgressDialog.show(ParkActivity.this,“,”A realizar.Aguarde por four…”,true);}@Override protected void onPreExecute(){super.onPreExecute();dialog.dismise();}
在invoke中放入:
按钮btnUpdate=(按钮)findViewById(R.id.btnParkUpdate);btnUpdate.setOnClickListener(新视图.OnClickListener(){@Override public void onClick(视图arg0){new GetISEPData(ParkActivity.this.execute();}})
@MiguelBorges无法读取粘贴到注释中的代码。你能编辑你原来的帖子并在那里添加代码吗?另外,请发布有关error.lol的详细信息(堆栈跟踪)。谢谢。那时我意识到,无论何时你想要实现一个ProcessDialog异步任务,你都必须实现一个,对吗?@MiguelBorges是的。任何耗时的操作都需要工作线程。虽然有很多方法可以做到这一点,但使用AsyncTask是最简单的响应方法之一。thx我创建了类GetISEPData并放置在对话框中,但现在应用程序给我一个错误并关闭<代码>私有类GetISEPData扩展AsyncTask{Context cx;ProgressDialog对话框;公共GetISEPData(Context Context){cx=Context;}@Override受保护的Void doInBackground(Void…params){int[]vagas=ISEP_Proxy.vagas(会话);Date dt=new Date();putData(vagas[0],vagaas[1],dt.getTime());}
@Override protected void onPostExecute(void result){super.onPostExecute(result);dialog=ProgressDialog.show(ParkActivity.this,“,”A realizar.Aguarde por four…”,true);}@Override protected void onPreExecute(){super.onPreExecute();dialog.dismise();}
在invoke中放入:
按钮btnUpdate=(按钮)findViewById(R.id.btnParkUpdate);btnUpdate.setOnClickListener(新视图.OnClickListener(){@Override public void onClick(视图arg0){new GetISEPData(ParkActivity.this.execute();}})
@MiguelBorges无法读取粘贴到注释中的代码。你能编辑你原来的帖子并在那里添加代码吗?另外,请发布有关error.lol的详细信息(堆栈跟踪)。谢谢。那时我意识到,无论何时你想要实现一个ProcessDialog异步任务,你都必须实现一个,对吗?@MiguelBorges是的。任何耗时的操作都需要工作线程。虽然有很多方法可以做到这一点,但使用AsyncTask是最简单的方法之一。获取数据是由Webservice/SOAP完成的,因此需要时间。获取数据是由Webservice/SOAP完成的,因此需要时间。
    Button btnUpdate = (Button) findViewById(R.id.btnParkUpdate);
    btnUpdate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            new GetISEPData(ParkActivity.this).execute();
        }
    });