我需要在生成和运行子进程时显示一些进度条或其他东西.我怎么能用python做到这一点?
import subprocess
cmd = ['python','wait.py']
p = subprocess.Popen(cmd, bufsize=1024,stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
p.stdin.close()
outputmessage = p.stdout.read() #This will print the standard output from the spawned process
message = p.stderr.read()
Run Code Online (Sandbox Code Playgroud)
我可以使用这段代码生成子进程,但是我需要在每秒传递时打印出一些东西.
我想在我的Android应用程序中为ProgressDialog设置一个时间(例如5秒).我怎样才能做到这一点?
我试图在收到的广播上增加我的进度条,但从myProgressDialog.incrementProgressBy(increment);我的观点来看代码没有任何影响.我试过把命令放在不同的地方,但我仍然看不到任何效果.
这是我的代码的样子.
public static final int max = 180;
public final static int increment = (1/180);
@Override
public void onCreate(Bundle savedInstanceState) {
...
i = new Intent();
i.setAction(ITEM_CREATED);
registerReceiver(myBroadcastReceiver, new IntentFilter(ITEM_CREATED));
findFeeds = new Runnable(){
@Override
public void run()
{
getFeedObjects();
}
};
beginThread();
}
public static Context getAppContext() {
return context;
}
private void beginThread()
{
switch (checkConnectionState(OffsideLiteActivity.this))
{
case 0:
thread = new Thread(null, findItems, "DoingInBackground");
thread.start();
myProgressDialog = new ProgressDialog(this);
myProgressDialog.setCancelable(true);
myProgressDialog.setMessage("Loading...");
myProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
myProgressDialog.setProgress(0);
myProgressDialog.setMax(max); …Run Code Online (Sandbox Code Playgroud) 我有一个在AsyncTask中运行的ProgressDialog.我试图实现,只要缓冲区的长度更大,然后说10000,来自ProgressDialog的消息就会发生变化.
有人可以帮帮我吗,这可能吗?先感谢您.
@Override
protected void onProgressUpdate(Integer... progUpdate) {
if (progUpdate[0] >= 10000){
progress.setMessage("Informatie wordt opgehaald....");
}
}
Run Code Online (Sandbox Code Playgroud)
缓冲区是在AsyncTask doInBackGround中创建的:
try {
HttpResponse response = httpClient.execute(request);
System.out.println("Response: " + response.getEntity().getContentLength());
/******* READ CONTENT IN BUFFER *******/
InputStream inputStreamActivity = response.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStreamActivity));
StringBuilder sb = new StringBuilder();
String line = null;
int count = sb.length();
while ((line = reader.readLine()) != null) {
sb.append(line);
publishProgress(sb.length());
}
/******* CLOSE CONNECTION AND STREAM *******/
System.out.println(sb);
inputStreamActivity.close();
kpn = sb.toString();
httpClient.getConnectionManager().shutdown(); …Run Code Online (Sandbox Code Playgroud) 我有一个进度对话框,我试图在用户点击按钮启动新活动时显示.微调器应显示在当前页面上,直到出现其他活动.(活动有时需要4-5秒才能启动,没有微调器,它只显示一个看起来已冻结的按下按钮)
这就是我所拥有的,它只有在我移除时才有效hideProgressDialog();,但是当我回到之前的活动时,旋转器仍然会在那里.
我究竟做错了什么 ?
进度对话框:
public void showProgressDialog(Context context) {
if(this.progressDialog != null) {
this.progressDialog.dismiss();
this.progressDialog = null;
}
this.progressDialog = ProgressDialog.show(context, "", "Chargement en cours, veuillez patienter");
}
public void hideProgressDialog() {
if(this.progressDialog != null) {
this.progressDialog.dismiss();
this.progressDialog = null;
}
}
Run Code Online (Sandbox Code Playgroud)
功能:
public void startActivity(Context context, Class<? extends Activity> activityClass) {
try {
showProgressDialog(context);
Intent intent = new Intent(this, activityClass);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
hideProgressDialog();
}
catch(Throwable e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
单击按钮的示例,此处调用函数以显示微调器:
@Override
public void onClick(View …Run Code Online (Sandbox Code Playgroud) public class async extends AsyncTask<String, Integer, String>{
ProgressDialog prog;
@Override
protected void onPreExecute() {
super.onPreExecute();
prog=new ProgressDialog(async.this);//This is chowing error
prog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
prog.setMax(100);
prog.show();
}
@Override
protected String doInBackground(String... params) {
for (int i = 0; i < 10; i++) {
publishProgress(5);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
prog.dismiss();
}
@Override
protected void onProgressUpdate(Integer... values) {
prog.setProgress(values[0]);
super.onProgressUpdate(values);
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码产生错误: …
我需要在Android上显示ProgressDialog的次要进度,但它只显示对话框中的第一个进度条.
这是我使用的代码:
progress = new ProgressDialog(this);
progress.setIndeterminate(false);
progress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progress.setProgress(25);
progress.setSecondaryProgress(10);
progress.show();
Run Code Online (Sandbox Code Playgroud) 我是Android的新手,我正在练习创建一个进度对话框.我想每隔几秒更改一次对话框中的消息,但是当我更改消息时,我的应用程序崩溃了.我有什么想法可能做错了吗?
private void progressDialogTest(final ArrayList<String> messages)
{
AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>()
{
private ProgressDialog progressDialog;
@Override
protected void onPreExecute()
{
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setTitle("Progress Dialog");
progressDialog.show();
}
@Override
protected Void doInBackground(Void... arg0)
{
try
{
for(int i=0; i<messages.size(); i++)
{
/******** APPLICATION SEEMS TO CRASH AT LINE BELOW ********/
progressDialog.setMessage(messages.get(i));
Thread.sleep(3000);
}
}
catch (InterruptedException e)
{
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result)
{
progressDialog.dismiss();
}
};
task.execute((Void[])null);
}
Run Code Online (Sandbox Code Playgroud)

这是我的登录代码.
public void Login_Click(View view) {
HashMap<String, String> op_Config = XMLParser
.parse(LoginActivity.this);
}
Run Code Online (Sandbox Code Playgroud)
完成执行大约需要4秒.所以我添加了这样的进度对话框.
public void Login_Click(View view) {
new IsLogedIn().execute();
}
class IsLogedIn extends AsyncTask<String, String, String>
{
@Override
protected void onPreExecute() {
super.onPreExecute();
showDialog(progress_bar_type);
}
@Override
protected String doInBackground(String... value) {
try
{
HashMap<String,String> op_Config = XMLParser.parse(LoginActivity.this);
finish();
Intent intent=new Intent(LoginActivity.this,MainMenuActivity.class);
startActivity(intent);
}
catch (Exception e) {
}
}
@Override
protected void onPostExecute(String file_url) {
dismissDialog(progress_bar_type);
}
}
Run Code Online (Sandbox Code Playgroud)
但现在需要超过1分钟才能完成.
在我的应用程序中,我想展示ProgressDialog某些事件(AsyncTasks例如在期间).我从不想ProgressDialogs同时展示多个.
这样做的最佳和最有效的方法是什么?我当前的代码如下所示:
public class ProgressDialogHelper {
private static ProgressDialog progressDialog;
public static void showProgressDialog(Context c) {
if (progressDialog == null) {
progressDialog = ProgressDialog.show(c, null, null);
progressDialog.setContentView(R.layout.progress_bar);
}
}
public static void dismissProgressDialog() {
if (progressDialog != null) {
progressDialog.dismiss();
progressDialog = null;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在从我的其他类中调用这些方法来显示/关闭ProgressDialog.
这被认为是好习惯吗?如果没有,我该怎么做?