Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.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_Android Asynctask - Fatal编程技术网

Java 无法正确执行异步任务

Java 无法正确执行异步任务,java,android,android-asynctask,Java,Android,Android Asynctask,在Android片段类中执行AsyncTask时,我遇到了一些问题。 在onClick方法中,我使用以下代码调用了我的executenewbackgroundtaskpost().execute() 我曾尝试以不同的方式构建我的AsyncTask,但都不起作用 我的最新尝试如下: public class BackgroundTaskPost extends AsyncTask<String, String, String> { @Override protected

在Android片段类中执行
AsyncTask
时,我遇到了一些问题。 在
onClick
方法中,我使用以下代码调用了我的execute
newbackgroundtaskpost().execute()

我曾尝试以不同的方式构建我的
AsyncTask
,但都不起作用

我的最新尝试如下:

public class BackgroundTaskPost extends AsyncTask<String, String, String> {
    @Override
    protected void onPreExecute(){
        SharedPreferences preferenceLogin = getActivity().getSharedPreferences(loginPreference, Context.MODE_PRIVATE);
        userName = preferenceLogin.getString("UserName", null);
        password = preferenceLogin.getString("Password", null);

        SharedPreferences sharedPreferences = getActivity().getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
        radioId1 = sharedPreferences.getString("check1", " ");
        radioId2 = sharedPreferences.getString("check2", " ");
        radioId3 = sharedPreferences.getString("check3", " ");
        radioId4 = sharedPreferences.getString("check4", " ");
        radioId5 = sharedPreferences.getString("check5", " ");
        radioId6 = sharedPreferences.getString("check6", " ");
        radioId7 = sharedPreferences.getString("check7", " ");
        radioId8 = sharedPreferences.getString("check8", " ");
        radioId9 = sharedPreferences.getString("check9", " ");
        radioId10 = sharedPreferences.getString("check10", " ");
        radioId11 = sharedPreferences.getString("check11", " ");
        //fev1 = pref.getFloat("Result", 0);

        outputs = new Outputs[13];
        outputs[0] = new Outputs("387.WEIGHT", "Float", "25.3");
        outputs[1] = new Outputs("383.FIELD", "String", radioId1);
        outputs[2] = new Outputs("384.FIELD", "String", radioId2);
        outputs[3] = new Outputs("381.FIELD", "String", radioId3);
        outputs[4] = new Outputs("389.FIELD", "String", radioId4);
        outputs[5] = new Outputs("388.LF#FEV1", "Float", "0.99");
        outputs[6] = new Outputs("390.FIELD", "String", radioId5);
        outputs[7] = new Outputs("378.FIELD", "String", radioId6);
        outputs[8] = new Outputs("379.FIELD", "String", radioId7);
        outputs[9] = new Outputs("380.FIELD", "String", radioId8);
        outputs[10] = new Outputs("382.FIELD", "String", radioId9);
        outputs[11] = new Outputs("385.FIELD", "String", radioId10);
        outputs[12] = new Outputs("386.FIELD", "String", radioId11);
    }

    @Override
    protected String doInBackground(String... params){
        postRequest = new HttpPostRequest(userName, password);

        String content = postRequest.postQuestionnaire(59, "Månedkontrol", "1.0", outputs);
        return content;
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        Toast.makeText(getActivity(), result, Toast.LENGTH_LONG).show();
    }
}
我可以说,我已经多次尝试在Eclipse中的控制台应用程序中使用相同的代码,在那里它工作得非常好,没有问题。因此,我可以得出结论,问题出现在
AsyncTask

HttpRequest:

public String getInput(int id, String name, String version, Outputs[] outputs){
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");

    String retVal = "{\"QuestionnaireId\":" + id + "," +
            "\"date\":\"" + dateFormat.format(new Date()) + "\"," +
            "\"name\":\"" + name + "\"," +
            "\"version\":\"" + version + "\"," +
            "\"output\":[";
    for (int i = 0; i < outputs.length; i++) {
        retVal += "{\"name\":\""+ outputs[i].getName() +
                "\",\"type\":\"" + outputs[i].getType() +
                "\",\"value\":" + outputs[i].getValue() +
                "}";
        if(i < outputs.length - 1)
            retVal += ",";
    }
    retVal += "]}";

    return retVal;
}

public String postQuestionnaire(int id, String name, String version, Outputs[] outputs){
    return postRequest("rest/questionnaire/listing", getInput(id, name, version, outputs));
}
publicstringgetinput(int-id,stringname,stringversion,Outputs[]Outputs){
DateFormat DateFormat=新的简化格式(“yyyy-MM-dd'T'HH:MM:ss'Z'”;
String retVal=“{\”QuestionnaireId\:“+id+”,”+
“\”日期\“:\”+日期格式。格式(新日期())+“\”,”+
“\”名称“:\”+名称+“\”,”+
“\”版本\“:\”+版本+“\”,”+
“\”输出\“:[”;
for(int i=0;i
希望任何人都能帮助我,过去两天我在这个问题上花了很多时间。
非常感谢。

一个观察-有几个非常好的网络/rest库,所以没有理由使用低级的HttpRequest和friends。您在处理一个简单的HTTP 500错误时遇到的问题强调了这一点

此外,尽管获得了很多“正面新闻”,但异步任务是尝试进行网络访问的一个糟糕的地方。我认为这是一个根本不应该使用的构造,因为它不支持活动生命周期,但我离题了


我建议您查看上述库中的一个,例如改装或截击。他们将为您提供一个框架来处理许多这些问题,而不是重新发明轮子。

您的问题是您在
doInBackground()
代码中得到了HTTP错误代码500。你能为你的
HttpPostRequest
类发布你的代码吗?@drschultz 500是一个服务器端错误。@tylersbastian-是的,我知道。这就是导致他出错的原因,如输出中所述。他的HttpPostRequest对象运行的方法由于服务器的500响应而失败,这就是我请求HttpPostRequest代码的原因。
public String getInput(int id, String name, String version, Outputs[] outputs){
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");

    String retVal = "{\"QuestionnaireId\":" + id + "," +
            "\"date\":\"" + dateFormat.format(new Date()) + "\"," +
            "\"name\":\"" + name + "\"," +
            "\"version\":\"" + version + "\"," +
            "\"output\":[";
    for (int i = 0; i < outputs.length; i++) {
        retVal += "{\"name\":\""+ outputs[i].getName() +
                "\",\"type\":\"" + outputs[i].getType() +
                "\",\"value\":" + outputs[i].getValue() +
                "}";
        if(i < outputs.length - 1)
            retVal += ",";
    }
    retVal += "]}";

    return retVal;
}

public String postQuestionnaire(int id, String name, String version, Outputs[] outputs){
    return postRequest("rest/questionnaire/listing", getInput(id, name, version, outputs));
}