Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.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
Java 进度条无限旋转_Java_Android_Progress Bar_Android Asynctask_Progressdialog - Fatal编程技术网

Java 进度条无限旋转

Java 进度条无限旋转,java,android,progress-bar,android-asynctask,progressdialog,Java,Android,Progress Bar,Android Asynctask,Progressdialog,代码: 我的应用程序几乎没有延迟,所以我决定在应用程序加载时加入进度条微调器。我的代码在进度条旋转大约6分钟后显示错误。它会在fileReader()上抛出一个错误,有时它会永远旋转。FileReader()是另一个类文件,它是代码的核心。如果您希望看到该类,请单击 请帮帮我。非常感谢。此.dialog.disclose(),只要在运行onPostExecute时自动关闭对话框即可 编辑:我的代码建议: 在启动AsyncTask的类中: 04-10 21:05:05.398: D/skia(30

代码:

我的应用程序几乎没有延迟,所以我决定在应用程序加载时加入进度条微调器。我的代码在进度条旋转大约6分钟后显示错误。它会在fileReader()上抛出一个错误,有时它会永远旋转。FileReader()是另一个类文件,它是代码的核心。如果您希望看到该类,请单击 请帮帮我。非常感谢。

此.dialog.disclose(),只要在运行
onPostExecute
时自动关闭对话框即可

编辑:我的代码建议:

在启动AsyncTask的类中:

04-10 21:05:05.398: D/skia(30039): purging 270K from font cache [38 entries]
04-10 21:05:05.508: D/dalvikvm(30039): GC_EXPLICIT freed 1828K, 18% free 12468K/15107K, external 7017K/7937K, paused 106ms
04-10 21:06:36.318: D/skia(30039): purging 13K from font cache [2 entries]
04-10 21:06:36.418: D/dalvikvm(30039): GC_EXPLICIT freed 3271K, 39% free 9233K/15107K, external 7017K/7937K, paused 93ms
04-10 21:07:37.208: W/dalvikvm(30039): threadid=9: thread exiting with uncaught exception (group=0x40015568)
04-10 21:07:37.228: E/AndroidRuntime(30039): FATAL EXCEPTION: AsyncTask #1
04-10 21:07:37.228: E/AndroidRuntime(30039): java.lang.RuntimeException: An error occured while executing doInBackground()
04-10 21:07:37.228: E/AndroidRuntime(30039):    at android.os.AsyncTask$3.done(AsyncTask.java:200)
04-10 21:07:37.228: E/AndroidRuntime(30039):    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
04-10 21:07:37.228: E/AndroidRuntime(30039):    at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
04-10 21:07:37.228: E/AndroidRuntime(30039):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
04-10 21:07:37.228: E/AndroidRuntime(30039):    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
04-10 21:07:37.228: E/AndroidRuntime(30039):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
04-10 21:07:37.228: E/AndroidRuntime(30039):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
04-10 21:07:37.228: E/AndroidRuntime(30039):    at java.lang.Thread.run(Thread.java:1019)
04-10 21:07:37.228: E/AndroidRuntime(30039): Caused by: android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
04-10 21:07:37.228: E/AndroidRuntime(30039):    at android.view.ViewRoot.checkThread(ViewRoot.java:2954)
04-10 21:07:37.228: E/AndroidRuntime(30039):    at android.view.ViewRoot.invalidateChild(ViewRoot.java:644)
04-10 21:07:37.228: E/AndroidRuntime(30039):    at android.view.ViewRoot.invalidateChildInParent(ViewRoot.java:670)
04-10 21:07:37.228: E/AndroidRuntime(30039):    at android.view.ViewGroup.invalidateChild(ViewGroup.java:2533)
04-10 21:07:37.228: E/AndroidRuntime(30039):    at android.view.View.invalidate(View.java:5288)
04-10 21:07:37.228: E/AndroidRuntime(30039):    at android.widget.TextView.checkForRelayout(TextView.java:5663)
04-10 21:07:37.228: E/AndroidRuntime(30039):    at android.widget.TextView.setText(TextView.java:2814)
04-10 21:07:37.228: E/AndroidRuntime(30039):    at android.widget.TextView.setText(TextView.java:2682)
04-10 21:07:37.228: E/AndroidRuntime(30039):    at android.widget.TextView.setText(TextView.java:2657)
04-10 21:07:37.228: E/AndroidRuntime(30039):    at dev.android.CCActivity3.fileReader(CCActivity3.java:207)
04-10 21:07:37.228: E/AndroidRuntime(30039):    at dev.android.CCActivity3$xyz.doInBackground(CCActivity3.java:110)
04-10 21:07:37.228: E/AndroidRuntime(30039):    at dev.android.CCActivity3$xyz.doInBackground(CCActivity3.java:1)
04-10 21:07:37.228: E/AndroidRuntime(30039):    at android.os.AsyncTask$2.call(AsyncTask.java:185)
04-10 21:07:37.228: E/AndroidRuntime(30039):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
04-10 21:07:37.228: E/AndroidRuntime(30039):    ... 4 more
04-10 21:07:37.258: I/Process(30039): Sending signal. PID: 30039 SIG: 9
04-10 21:14:03.819: D/dalvikvm(30687): GC_EXTERNAL_ALLOC freed 109K, 64% free 487K/1347K, external 0K/0K, paused 4ms
04-10 21:14:03.988: D/dalvikvm(30687): GC_EXTERNAL_ALLOC freed 4K, 64% free 491K/1347K, external 1K/513K, paused 14ms
04-10 21:14:04.778: D/dalvikvm(30687): GC_EXTERNAL_ALLOC freed 10K, 61% free 534K/1347K, external 1521K/2013K, paused 12ms
04-10 21:14:04.968: D/dalvikvm(30687): GC_EXTERNAL_ALLOC freed 2K, 61% free 533K/1347K, external 4856K/6064K, paused 10ms
04-10 21:14:27.868: W/IInputConnectionWrapper(30687): getExtractedText on inactive InputConnection
04-10 21:14:27.888: W/IInputConnectionWrapper(30687): getCursorCapsMode on inactive InputConnection
04-10 21:14:27.888: W/IInputConnectionWrapper(30687): getExtractedText on inactive InputConnection
04-10 21:14:27.898: W/IInputConnectionWrapper(30687): performPrivateCommand on inactive InputConnection
04-10 21:14:38.208: D/szipinf(30687): Initializing inflate state
04-10 21:14:38.238: D/szipinf(30687): Initializing zlib to inflate
04-10 21:14:40.628: D/dalvikvm(30687): GC_FOR_MALLOC freed 412K, 24% free 3798K/4995K, external 7079K/7937K, paused 27ms
04-10 21:14:40.808: D/dalvikvm(30687): GC_CONCURRENT freed 405K, 18% free 5440K/6595K, external 7079K/7937K, paused 0ms+4ms
04-10 21:14:41.038: D/dalvikvm(30687): GC_CONCURRENT freed 7K, 10% free 7457K/8259K, external 7079K/7937K, paused 1ms+4ms
04-10 21:14:41.288: D/dalvikvm(30687): GC_CONCURRENT freed 351K, 11% free 9202K/10307K, external 7079K/7937K, paused 1ms+7ms
04-10 21:14:41.488: D/dalvikvm(30687): GC_FOR_MALLOC freed 6K, 7% free 10789K/11587K, external 7079K/7937K, paused 75ms
04-10 21:14:41.758: D/dalvikvm(30687): GC_CONCURRENT freed 522K, 10% free 12363K/13635K, external 7079K/7937K, paused 0ms+9ms
04-10 21:14:42.118: D/dalvikvm(30687): GC_CONCURRENT freed 8K, 6% free 14316K/15107K, external 7079K/7937K, paused 1ms+9ms
04-10 21:15:55.768: D/skia(30687): purging 340K from font cache [47 entries]
04-10 21:15:55.888: D/dalvikvm(30687): GC_EXPLICIT freed 1817K, 17% free 12542K/15107K, external 7079K/7937K, paused 107ms
04-10 21:16:42.368: D/skia(30687): purging 13K from font cache [2 entries]
04-10 21:16:42.478: D/dalvikvm(30687): GC_EXPLICIT freed 1038K, 24% free 11524K/15107K, external 7079K/7937K, paused 102ms
04-10 21:18:28.688: D/skia(30687): purging 13K from font cache [2 entries]
04-10 21:18:28.788: D/dalvikvm(30687): GC_EXPLICIT freed 6921K, 70% free 4646K/15107K, external 7079K/7937K, paused 91ms
04-10 21:18:33.758: W/dalvikvm(30687): threadid=9: thread exiting with uncaught exception (group=0x40015568)
04-10 21:18:33.768: E/AndroidRuntime(30687): FATAL EXCEPTION: AsyncTask #1
04-10 21:18:33.768: E/AndroidRuntime(30687): java.lang.RuntimeException: An error occured while executing doInBackground()
04-10 21:18:33.768: E/AndroidRuntime(30687):    at android.os.AsyncTask$3.done(AsyncTask.java:200)
04-10 21:18:33.768: E/AndroidRuntime(30687):    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
04-10 21:18:33.768: E/AndroidRuntime(30687):    at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
04-10 21:18:33.768: E/AndroidRuntime(30687):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
04-10 21:18:33.768: E/AndroidRuntime(30687):    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
04-10 21:18:33.768: E/AndroidRuntime(30687):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
04-10 21:18:33.768: E/AndroidRuntime(30687):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
04-10 21:18:33.768: E/AndroidRuntime(30687):    at java.lang.Thread.run(Thread.java:1019)
04-10 21:18:33.768: E/AndroidRuntime(30687): Caused by: android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
04-10 21:18:33.768: E/AndroidRuntime(30687):    at android.view.ViewRoot.checkThread(ViewRoot.java:2954)
04-10 21:18:33.768: E/AndroidRuntime(30687):    at android.view.ViewRoot.invalidateChild(ViewRoot.java:644)
04-10 21:18:33.768: E/AndroidRuntime(30687):    at android.view.ViewRoot.invalidateChildInParent(ViewRoot.java:670)
04-10 21:18:33.768: E/AndroidRuntime(30687):    at android.view.ViewGroup.invalidateChild(ViewGroup.java:2533)
04-10 21:18:33.768: E/AndroidRuntime(30687):    at android.view.View.invalidate(View.java:5288)
04-10 21:18:33.768: E/AndroidRuntime(30687):    at android.widget.TextView.checkForRelayout(TextView.java:5663)
04-10 21:18:33.768: E/AndroidRuntime(30687):    at android.widget.TextView.setText(TextView.java:2814)
04-10 21:18:33.768: E/AndroidRuntime(30687):    at android.widget.TextView.setText(TextView.java:2682)
04-10 21:18:33.768: E/AndroidRuntime(30687):    at android.widget.TextView.setText(TextView.java:2657)
04-10 21:18:33.768: E/AndroidRuntime(30687):    at dev.android.CCActivity3.fileReader(CCActivity3.java:207)
04-10 21:18:33.768: E/AndroidRuntime(30687):    at dev.android.CCActivity3$xyz.doInBackground(CCActivity3.java:110)//file reader
04-10 21:18:33.768: E/AndroidRuntime(30687):    at dev.android.CCActivity3$xyz.doInBackground(CCActivity3.java:1)
04-10 21:18:33.768: E/AndroidRuntime(30687):    at android.os.AsyncTask$2.call(AsyncTask.java:185)
04-10 21:18:33.768: E/AndroidRuntime(30687):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
04-10 21:18:33.768: E/AndroidRuntime(30687):    ... 4 more
以及异步任务本身:

            ProgressDialog progressDialog = new ProgressDialog(getActivity());
            progressDialog.setMessage("Logging in...");
            LoginTask loginTask = new LoginTask((Polling) getActivity(), progressDialog);
            loginTask.execute();
公共类登录任务扩展异步任务{
私有进程对话;
私人投票活动;
公共登录任务(轮询活动,ProgressDialog)
{
这个。活动=活动;
this.progressDialog=progressDialog;
}
@凌驾
受保护的void onPreExecute()
{
progressDialog.show();
}
受保护的整数doInBackground(字符串…arg0){
EditText用户名=(EditText)activity.findViewById(R.id.emailEditText);
EditText passwordEdit=(EditText)activity.findViewById(R.id.passEditText);
字符串email=userName.getText().toString();
字符串密码=passwordEdit.getText().toString();
UserFunctions userFunction=新的UserFunctions();
JSONObject json=userFunction.loginUser(电子邮件、密码);
//检查登录响应
试一试{
if(json.getString(KEY_SUCCESS)!=null){
String res=json.getString(KEY_SUCCESS);
if(Integer.parseInt(res)==1){
//一大堆额外的代码!
响应代码=1;
//关闭登录屏幕
//完成();
}否则{
响应代码=0;
//登录错误
}
}
}捕获(NullPointerException e){
e、 printStackTrace();
}
捕获(JSONException e){
e、 printStackTrace();
}
返回响应代码;
}
@凌驾
受保护的void onPostExecute(整数响应代码)
{
EditText用户名=(EditText)activity.findViewById(R.id.emailEditText);
EditText passwordEdit=(EditText)activity.findViewById(R.id.passEditText);
如果(响应代码==1){
progressDialog.disclose();
活动。登录报告(响应代码);
userName.setText(“”);
passwordEdit.setText(“”);
//共享首选项、存储名称
}
如果(响应代码==0){
progressDialog.disclose();
活动。登录报告(响应代码);
}
}
}


只需按照progressDialog进行操作。它在启动任务的主类中启动,并传递给AsyncTask。然后,当AsyncTask构造时,progressDialog作为字段存储在AsyncTask中。然后,在preExecute中,我们显示()progressDialog。然后,根据doInBackground的结果,我们向onPostExecute发送1或0。1或0告诉onPostExecute要做什么,在我的代码中,这两种方式都会取消对话框,但随后会在主类中运行不同的方法。希望这能帮助您将类似的任务与自己的任务进行比较

问题是您试图从
doInBackground
方法更改UI。根本原因可能是您的
FileReader
类执行
display.setText(fg)。当您在
doInBackground
中时,您无法对
活动的
用户界面进行更改。您将需要使用AsyncTask的和方法来实现这一点

public class LoginTask extends AsyncTask<String, Void, Integer> {

private ProgressDialog progressDialog;
private Polling activity; 
 public LoginTask(Polling activity, ProgressDialog progressDialog)
{
    this.activity = activity;
    this.progressDialog = progressDialog;
}

@Override
protected void onPreExecute()
{
    progressDialog.show();
}

protected Integer doInBackground(String... arg0) {
    EditText userName = (EditText)activity.findViewById(R.id.emailEditText);
    EditText passwordEdit = (EditText)activity.findViewById(R.id.passEditText);
    String email = userName.getText().toString();
    String password = passwordEdit.getText().toString();
    UserFunctions userFunction = new UserFunctions();
    JSONObject json = userFunction.loginUser(email, password);

    // check for login response
    try {
        if (json.getString(KEY_SUCCESS) != null) {
            String res = json.getString(KEY_SUCCESS);

            if(Integer.parseInt(res) == 1){
                //whole bunch of extra code!
                responseCode = 1;
                // Close Login Screen
                //finish();

            }else{
                responseCode = 0;
                // Error in login
            }
        }

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

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

    return responseCode;
}

@Override
protected void onPostExecute(Integer responseCode)
{
    EditText userName = (EditText)activity.findViewById(R.id.emailEditText);
    EditText passwordEdit = (EditText)activity.findViewById(R.id.passEditText);

    if (responseCode == 1) {
        progressDialog.dismiss();
        activity.loginReport(responseCode);
        userName.setText("");
        passwordEdit.setText("");
        //shared prefences, store name

    }
    if (responseCode == 0) {
        progressDialog.dismiss();
        activity.loginReport(responseCode);

    }
}

在doInBackground()的catch块中使用上述代码。

请发布所获得错误的堆栈跟踪。我已将错误放在下面,您可以滚动查看。Thanksupper.onPostExecute(未使用);this.dialog.disclose();我就是这样做的。但是它仍然像永恒一样旋转嗯,看看我的编辑,并将您的代码与我自己的代码进行比较,这可能会有所帮助。在上面的代码中,已在ui线程中从onPostExecute调用dialog.Dislose。我不知道这会有什么帮助。你能告诉我如何使用onprogressupdate吗。我是否将fileReader()放在onprogressupdate类中。感谢AsyncTask Javadoc顶部有一个非常简单的示例:。您必须拆分fileReader,以便在doInBackground中完成工作,并在onProgressUpdate中完成UI更新。非常感谢您现在正在工作。与Java桌面应用程序相比,Android Gui是困难的。
public class LoginTask extends AsyncTask<String, Void, Integer> {

private ProgressDialog progressDialog;
private Polling activity; 
 public LoginTask(Polling activity, ProgressDialog progressDialog)
{
    this.activity = activity;
    this.progressDialog = progressDialog;
}

@Override
protected void onPreExecute()
{
    progressDialog.show();
}

protected Integer doInBackground(String... arg0) {
    EditText userName = (EditText)activity.findViewById(R.id.emailEditText);
    EditText passwordEdit = (EditText)activity.findViewById(R.id.passEditText);
    String email = userName.getText().toString();
    String password = passwordEdit.getText().toString();
    UserFunctions userFunction = new UserFunctions();
    JSONObject json = userFunction.loginUser(email, password);

    // check for login response
    try {
        if (json.getString(KEY_SUCCESS) != null) {
            String res = json.getString(KEY_SUCCESS);

            if(Integer.parseInt(res) == 1){
                //whole bunch of extra code!
                responseCode = 1;
                // Close Login Screen
                //finish();

            }else{
                responseCode = 0;
                // Error in login
            }
        }

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

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

    return responseCode;
}

@Override
protected void onPostExecute(Integer responseCode)
{
    EditText userName = (EditText)activity.findViewById(R.id.emailEditText);
    EditText passwordEdit = (EditText)activity.findViewById(R.id.passEditText);

    if (responseCode == 1) {
        progressDialog.dismiss();
        activity.loginReport(responseCode);
        userName.setText("");
        passwordEdit.setText("");
        //shared prefences, store name

    }
    if (responseCode == 0) {
        progressDialog.dismiss();
        activity.loginReport(responseCode);

    }
}
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
if (this.dialog.isShowing()) {
this.dialog.dismiss();
}
});