我刚刚进入 android 开发,在尝试创建登录表单时遇到了一些问题。
我想要做的是输入用户名和密码并按登录,当按下登录按钮时,我希望它向我的服务器发出带有帐户信息的 JSON 请求,并获得是否允许用户登录的响应. 如果用户被允许,我想换一个新的视图。
我的代码正确接收 JSON 信息,但据我了解,UI 代码(推送新活动)应该在 onPostExecute() 中完成。我的问题是 onPostExecute 永远不会运行,我看过其他有同样问题的人,但他们的解决方案对我不起作用。他们所说的是我需要在 onPostExecute 之前有一个@Override,但是当我添加它时,我得到编译错误“该方法不会覆盖其超类中的方法”。
我也从有这个问题的人那里读过解决方案,从我读到的问题是 onPostExecute 方法必须具有与 doInBackground() 中的结果参数相同的参数。我的问题是我觉得我已经这样做了,当我尝试查看超类有什么(即 AsyncTask.java)时,它说 onPostExecute() 方法看起来像:
protected void onPostExecute(Result result) {
}
但我不知道 Result 属于哪个类..
networkTask 使用这一行运行:
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;
}
}