Java onPostExecute不';无法运行,@override无法运行android开发
我刚刚进入android开发阶段,在尝试创建登录表单时遇到了一些问题 我要做的是输入用户名和密码,然后按login,当按下login按钮时,我希望它向我的服务器发送一个带有帐户信息的JSON请求,并获得一个关于是否允许用户登录的响应。如果允许该用户,我希望更改为新视图 我的代码正确接收JSON信息,但据我所知,UI代码(推送新活动)应该在onPostExecute()中完成。我的问题是onPostExecute从来没有运行过,我看过其他有同样问题的ppl,但他们的解决方案对我来说不起作用。他们说的是,我需要在onPostExecute之前有一个@Override,但是当我添加它时,我得到了编译错误“该方法没有从它的超类重写方法” 我也从有这个问题的人那里读过解决方案,从我读到的问题是,onPostExecute方法必须具有与doInBackground()中的结果参数相同的参数。我的问题是,我觉得我已经这样做了,当我尝试查看超类的内容(即AsyncTask.java)时,它会说onPostExecute()方法看起来像:Java onPostExecute不';无法运行,@override无法运行android开发,java,android,android-asynctask,Java,Android,Android Asynctask,我刚刚进入android开发阶段,在尝试创建登录表单时遇到了一些问题 我要做的是输入用户名和密码,然后按login,当按下login按钮时,我希望它向我的服务器发送一个带有帐户信息的JSON请求,并获得一个关于是否允许用户登录的响应。如果允许该用户,我希望更改为新视图 我的代码正确接收JSON信息,但据我所知,UI代码(推送新活动)应该在onPostExecute()中完成。我的问题是onPostExecute从来没有运行过,我看过其他有同样问题的ppl,但他们的解决方案对我来说不起作用。他们说
protected void onPostExecute(Result result) {
}
但是我不知道这门课的成绩属于哪门课
networkingTask使用以下行运行:
new networkingTask().execute(url);
如果有人能帮助我,我会永远感激的!:)
这就是我的代码的样子
private class networkingTask extends AsyncTask {
Context context;
private networkingTask(Context context) {
this.context = context.getApplicationContext();
}
public networkingTask() {
}
@Override
protected JSONObject doInBackground(Object... params) {
try {
String urlString = (String) params[0];
System.out.println(urlString);
// Creating JSON Parser instance
JSONParser jParser = new JSONParser();
// getting JSON string from URL
JSONObject json;
json = jParser.getJSONFromUrl(urlString);
String responseLogged = json.getString("logged");
System.out.println("can we log in?: "+ responseLogged);
return json;
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(JSONObject result) {
String responseLogged = "";
try {
responseLogged = result.getString("logged");
} catch (JSONException e) {
e.printStackTrace();
}
if(responseLogged.equals("true")){ //Login = true
Intent intent = new Intent(context, ShowListActivity.class);
intent.putExtra(EXTRA_JSON_OBJECT, result.toString());
startActivity(intent);
} else{ //Login = false
System.out.println("wrong password");
}
return;
}
}
签名不匹配。您正在尝试覆盖:
protected void onPostExecute(Result result)
签名
protected void onPostExecute(JSONObject result)
…在超类中不存在。在您的行中:
private class networkingTask extends AsyncTask
只需将其更改为:
private class networkingTask extends AsyncTask<String, Void, JSONObject>
私有类网络任务扩展异步任务
虽然String
是您传递参数的地方,但在您的情况下,它是url
,第二个参数Void
用于显示进度,最后一个参数是要从doInBackground
传递到onPostExecute
有关进一步的解释和信息,请参阅我认为您可能需要为您的任务填写通用类型 您的类签名应该如下所示:
private class networkingTask extends AsyncTask<Object, Void, JSONObject>
私有类网络任务扩展异步任务
括号中的类型分别对应于doInBackground
、onProgressUpdate
和onPostExecute
的参数类型,如果要覆盖这些方法,使它们不同于泛型方法签名,则必须使用这些类型
另外,作为旁注,在Java/Android中,用它来启动类名是一种常见的约定。我还将您的类的名称更改为“NetworkingTask”,以帮助其他查看您的代码的开发人员更好地理解它。我的代码中仍然存在问题,但至少onPostExecute()正在运行!非常感谢你@Daniel,我很高兴知道这有帮助D