onPostExecute没有运行,@ override不能用于android开发

Dan*_*iel 2 java android android-asynctask

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

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

我的代码正确地接收了JSON信息,但是从我所理解的UI代码(推动新活动)应该在onPostExecute()中完成.我的问题是onPostExecute永远不会运行,我已经看过其他ppl有同样的问题,但他们的解决方案对我没用.他们所说的是我需要在onPostExecute之前有一个@Override,但是当我添加它时,我得到编译错误" 该方法不会覆盖其超类的方法 ".

我也从那些有问题的人那里读过解决方案,从我读过的问题来看,onPostExecute方法必须与doInBackground()的result参数具有相同的参数.我的问题是我觉得我已经做了,当我试着查看超类的内容(即AsyncTask.java)时,它说onPostExecute()方法如下:

protected void onPostExecute(Result result) {
    }
Run Code Online (Sandbox Code Playgroud)

但我不知道结果类属于什么..

使用此行运行networkingTask:

new networkingTask().execute(url);
Run Code Online (Sandbox Code Playgroud)

如果有人能帮助我,我将永远感激不尽!:)

这就是我的代码

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;
    }

}
Run Code Online (Sandbox Code Playgroud)

dum*_*ers 8

在你的行:

private class networkingTask extends AsyncTask
Run Code Online (Sandbox Code Playgroud)

只需将其更改为:

private class networkingTask extends AsyncTask<String, Void, JSONObject>
Run Code Online (Sandbox Code Playgroud)

虽然String是你传递参数的地方,但在你的情况下url,第二个参数Void用于显示进度,最后一个参数是要传递doInBackground给的参数.onPostExecute

有关进一步说明和信息,请参阅Android开发人员:AsyncTask