私はアンドロイド開発を始めたばかりで、ログインフォームを作成しようとしているときにいくつかの問題に遭遇しました。
私がしたいのは、ユーザー名とパスワードを入力してログインを押すことです。ログインボタンが押されたら、サーバーへのアカウント情報を使用して JSON 要求を実行し、ユーザーがログインを許可されているかどうかの応答を取得します。 . ユーザーが許可されている場合は、新しいビューに変更したい。
私のコードは JSON 情報を正しく受け取りますが、UI コード (新しいアクティビティのプッシュ) は onPostExecute() で行う必要があることを理解しました。私の問題は、 onPostExecute が実行されないことです。同じ問題を抱えている他の ppl を見てきましたが、彼らの解決策はうまくいきませんでした。彼らが言ったことは、onPostExecuteの前に@Overrideが必要だということですが、それを追加すると、「メソッドはスーパークラスのメソッドをオーバーライドしません」というコンパイルエラーが発生します。
私はその問題を抱えている人々からの解決策も読みました。私が読んだ問題から、メソッド onPostExecute は doInBackground() からの結果パラメーターと同じパラメーターを持つ必要があるということです。私の問題は、私がすでにやっていると感じていることです。スーパークラスが持っているもの (つまり、AsyncTask.java) を調べようとすると、メソッド onPostExecute() は次のようになります。
protected void onPostExecute(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;
}
}