Java onPostExecute不';无法运行,@override无法运行android开发

Java onPostExecute不';无法运行,@override无法运行android开发,java,android,android-asynctask,Java,Android,Android Asynctask,我刚刚进入android开发阶段,在尝试创建登录表单时遇到了一些问题 我要做的是输入用户名和密码,然后按login,当按下login按钮时,我希望它向我的服务器发送一个带有帐户信息的JSON请求,并获得一个关于是否允许用户登录的响应。如果允许该用户,我希望更改为新视图 我的代码正确接收JSON信息,但据我所知,UI代码(推送新活动)应该在onPostExecute()中完成。我的问题是onPostExecute从来没有运行过,我看过其他有同样问题的ppl,但他们的解决方案对我来说不起作用。他们说

我刚刚进入android开发阶段,在尝试创建登录表单时遇到了一些问题

我要做的是输入用户名和密码,然后按login,当按下login按钮时,我希望它向我的服务器发送一个带有帐户信息的JSON请求,并获得一个关于是否允许用户登录的响应。如果允许该用户,我希望更改为新视图

我的代码正确接收JSON信息,但据我所知,UI代码(推送新活动)应该在onPostExecute()中完成。我的问题是onPostExecute从来没有运行过,我看过其他有同样问题的ppl,但他们的解决方案对我来说不起作用。他们说的是,我需要在onPostExecute之前有一个@Override,但是当我添加它时,我得到了编译错误“该方法没有从它的超类重写方法”

我也从有这个问题的人那里读过解决方案,从我读到的问题是,onPostExecute方法必须具有与doInBackground()中的结果参数相同的参数。我的问题是,我觉得我已经这样做了,当我尝试查看超类的内容(即AsyncTask.java)时,它会说onPostExecute()方法看起来像:

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