Java 无法正确执行异步任务
在Android片段类中执行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
AsyncTask
时,我遇到了一些问题。
在onClick
方法中,我使用以下代码调用了我的executenewbackgroundtaskpost().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));
}