Java 我在android中的异步任务没有在后台执行do,为什么?

Java 我在android中的异步任务没有在后台执行do,为什么?,java,android,android-asynctask,Java,Android,Android Asynctask,我的AsyncTask没有执行doInBackground,preExecute正在运行我用Toast测试了它 我也在运行另一个异步任务,但当我启动这个任务时,我取消了那个任务,它仍然无法工作 它没有抛出任何错误,但这仍然发生在我身上 这是我的代码,任何帮助都将不胜感激 有些代码被删掉了。我只是展示重要的部分 如果我的英语有任何错误,我很抱歉 // AsyncTask package com.test.testing; //imports public class Update_Score

我的AsyncTask没有执行doInBackground,preExecute正在运行我用Toast测试了它

我也在运行另一个异步任务,但当我启动这个任务时,我取消了那个任务,它仍然无法工作

它没有抛出任何错误,但这仍然发生在我身上

这是我的代码,任何帮助都将不胜感激

有些代码被删掉了。我只是展示重要的部分

如果我的英语有任何错误,我很抱歉

// AsyncTask

package com.test.testing;

//imports 
public class Update_Score extends AsyncTask<Void, Void, Void> {

    String result="vvv",
            name,
            score,
            lastTest,
            maximum;

    ProgressBar loading;

    TextView text;

    Context context;

    @Override
    protected Void doInBackground(Void... voids) {
        String strUrl="http://test.tk/updatesomething.php";
        while (result=="vvv") {

            try {

                URL url = new URL(strUrl);

                HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection();

                httpConnection.setRequestMethod("POST");
                httpConnection.setDoOutput(true);
                httpConnection.setDoInput(true);

                //output

                OutputStream output = httpConnection.getOutputStream();
                BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(output,"UTF-8"));
                String post_data= URLEncoder.encode("name","UTF-8")+"="+URLEncoder.encode(name,"UTF-8")+"&"
                        +URLEncoder.encode("score","UTF-8")+"="+URLEncoder.encode(score,"UTF-8")+"&"
                        +URLEncoder.encode("lastTest","UTF-8")+"="+URLEncoder.encode(lastTest,"UTF-8");

                writer.write(post_data);
                writer.flush();
                writer.close();
                output.close();

                //input

                InputStream input = httpConnection.getInputStream();
                BufferedReader reader=new BufferedReader(new InputStreamReader(input,"iso-8859-1"));
                result="";
                String line="";

                while ((line=reader.readLine())!=null){

                    result += line;

                }

                reader.close();
                input.close();

                httpConnection.disconnect();

            } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) {
                e.printStackTrace();
            }

        }

        new AlertDialog.Builder(context).setMessage("updateEnd").create().show();

        return null;
    }

}





// Calling AsyncTask

package com.test.testing;

//imports

public class Final_Score extends AppCompatActivity {

    public TextView score;
    public ProgressBar loading;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_final__score);

        initVar();

        String totalMark =getIntent().getStringExtra("TOTAL_MARKS"),
                name =getIntent().getStringExtra("NAME") ,
                lastTest =getIntent().getStringExtra("TESTNUM"),
                maximum =getIntent().getStringExtra("MAX");

        boolean forced=getIntent().getBooleanExtra("FORCED",false);

        if(forced){

            new AlertDialog.Builder(this).setMessage("Time Up").setTitle("").create().show();

        }

        score.setText(totalMark);
        Update_Score update=new Update_Score(name,totalMark,lastTest,loading,this,score,maximum);
        update.execute();

    }

}

//异步任务
包com.test.testing;
//进口
公共类更新任务{
String result=“vvv”,
名称
分数
最后一次测试,
最大限度
钢筋加载;
文本查看文本;
语境;
@凌驾
受保护的空位背景(空位…空位){
字符串strUrl=”http://test.tk/updatesomething.php";
而(结果=“vvv”){
试一试{
URL=新URL(strUrl);
HttpURLConnection httpConnection=(HttpURLConnection)url.openConnection();
setRequestMethod(“POST”);
httpConnection.setDoOutput(true);
httpConnection.setDoInput(true);
//输出
OutputStream output=httpConnection.getOutputStream();
BufferedWriter writer=新的BufferedWriter(新的OutputStreamWriter(输出,“UTF-8”));
字符串post_data=URLEncoder.encode(“名称”,“UTF-8”)+”=“+URLEncoder.encode(名称,“UTF-8”)+”&”
+URLEncoder.encode(“分数”,“UTF-8”)+”=“+URLEncoder.encode(分数,“UTF-8”)+”&”
+urlcoder.encode(“lastest”,“UTF-8”)+“=”+urlcoder.encode(lastest,“UTF-8”);
writer.write(post_数据);
writer.flush();
writer.close();
output.close();
//输入
InputStream输入=httpConnection.getInputStream();
BufferedReader reader=新的BufferedReader(新的InputStreamReader(输入,“iso-8859-1”);
结果=”;
字符串行=”;
而((line=reader.readLine())!=null){
结果+=行;
}
reader.close();
input.close();
httpConnection.disconnect();
}catch(MalformedURLException e){e.printStackTrace();}catch(IOException e){
e、 printStackTrace();
}
}
新建AlertDialog.Builder(context.setMessage(“updateEnd”).create().show();
返回null;
}
}
//调用异步任务
包com.test.testing;
//进口
公开课期末成绩扩大了活动范围{
公共文本视图分数;
公共酒吧;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u final\u分数);
initVar();
字符串totalMark=getIntent().getStringExtra(“总标记”),
name=getIntent().getStringExtra(“名称”),
lastTest=getIntent().getStringExtra(“TESTNUM”),
最大值=getIntent().getStringExtra(“最大值”);
boolean forced=getIntent().getBooleanExtra(“forced”,false);
如果(强制){
新建AlertDialog.Builder(this.setMessage(“Time Up”).setTitle(“”).create().show();
}
score.setText(totalMark);
更新分数更新=新的更新分数(名称、totalMark、lastTest、loading、this、Score、maximum);
update.execute();
}
}

提前谢谢。

我遇到了问题,我说正在运行的任务即使调用了
AsyncTask也不会取消。取消(true)
这是一项循环直到达到特定时间(如11:17)的任务

while(!mainActivity.timeNotEnds){

   //some stuff here

   if (time==previouslySpecifiedTime){

       break;

   }       
}

因此,我在主活动中创建了一个布尔值,并将该任务中的代码设置为
而(!mainActivity.timeNotEnds)

您的代码没有更新分数构造函数。还要确保您在清单中有INTERNET权限。我有构造函数,但我没有显示它,因为在问题中添加太多代码会给我带来错误,我还添加了INTERNET权限。请尝试从
doInBackground
方法中删除
while
循环。
新建AlertDialog.Builder(上下文).setMessage(“updateEnd”).create().show()
将其从doInBackground中取出,并在onPostExecute中执行UI操作。正如@blackapps指出的,不应在doInBackground方法中调用AlertDialog,我很惊讶您没有从中得到崩溃,因为这需要在UI线程中执行