2017-02-22 14 views
0

私は非常に多くの質問と回答を見てきましたが、私が見つけたもののどれも実際に働いていませんでした!AsyncTaskは必ずしも呼び出すとは限りませんが、そうであればnullになりますか?

基本的にタイトルがあまり役に立たないなら、私がやろうとしていることはダイアログからAsyncTaskを実行することですが、実行していないときにはnullオブジェクトとして表示されます。それは血の迷惑なのですね。

だれでも助けてくれればそれはすばらしいことでしょう。

クラスはサブベッドです。

ここで非同期クラスです:

String oldPassword = changePassOld.getText().toString(); 
String newPassword = changePassNew.getText().toString(); 
AsyncTask task = new UpdatePassword(oldPassword, newPassword, ProfileFragment.this.getContext()); 
task.execute(); 

編集を:私は私が唯一doInBackgroundを持っていることに気づいたが、私はpreExecuteを持っていた場合でも、

static class UpdatePassword extends AsyncTask<String, String, String> { 

    Context context; 
    String oldPassword; 
    String newPassword; 

    public UpdatePassword(String setOldPassword, String setNewPassword, Context context) { 
     this.oldPassword = setOldPassword; 
     this.newPassword = setNewPassword; 
     this.context = context; 
    } 

    @Override protected String doInBackground(String... params) { 
     HttpRequestUtils httpRequestUtils = new HttpRequestUtils(context); 
     if (TextUtils.isEmpty(oldPassword) || TextUtils.isEmpty(newPassword)) { 
      return null; 
     } else { 
      String response = null; 
      String baseUrl = "rest/ws/user/update/password"; 
      ApiResponse apiResponse = null; 
      try { 
       response = httpRequestUtils.getResponse(baseUrl + "?oldPassword=" + oldPassword + "&newPassword=" + newPassword, "application/json", "application/json"); 
       if (TextUtils.isEmpty(response)) { 
        return null; 
       } 
       apiResponse = (ApiResponse) GsonUtils.getObjectFromJson(response, ApiResponse.class); 
       if (apiResponse != null && apiResponse.isSuccess()) { 
        return apiResponse.getStatus(); 
       } 
       Log.i("Update", "password call" + apiResponse); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      return newPassword; 
     } 
    } 
} 

そして、ここでは、私はそれを実行するためにやってんですよそれでも動作しませんでした。

+0

をAsyncTaskのonPostExecuteを実装するには、あなたの 'postExecute()'メソッドをデバッグしていますか? 'doInBackground'から何の返答もないことを確信していますか? –

+0

ええ、何も返しません。 – user3125867

+0

あなたの問題は間違いなく' doInBackground'本体にあります。ヌルを返してデバッグし、 –

答えて

0

AsyncTaskは必ずしも呼び出すとは限りませんが、そうであればnullになります?

それは最も興味深いAsyncTaskである;)


は、一般的には、あなたがヒットされている)あなたはそれを期待ポイント(または return null条件にデータを返すことがないように見えます。

代わりにコールバックを定義できます。

public interface PasswordChangeListener { 
    void onPasswordChanged(String oldPass, String newPass); 
} 

あなたはパラメータ

(コンテキストは通常​​の方法により、最初行く)

new UpdatePassword(
    ProfileFragment.this.getActivity(), 
    oldPassword, newPassword, 
    ProfileFragment.this).execute(); 
ように、そのコールバックを追加した後、あなたのAsyncTaskを呼び出して、あなたのフラグメントのクラス

public class ProfileFragment extends Fragment 
    implements PasswordChangeListener { // See here 

    ... 

    @Override 
    public void onPasswordChanged(String oldPass, String newPass) { 
     Toast.makeText(getActivity(), 
      String.format("Changed %s to %s", oldPass, newPass), 
      Toast.LENGTH_SHORT).show(); 
    } 

にそれを実装します

提案:あなたはですdoInBackground

からそして、心の中でその提案に

@Override 
public void onPostExecute(ApiResponse result) { 
    if (apiResponse != null && apiResponse.isSuccess()) { 
     if (this.callback != null) { 
      callback.onPasswordChanged(this.oldPassword, this.newPassword); 
     } else { 
      Log.w("Password change", "Password callback not set!"); 
     } 
    } else { 
     // TODO: Error handling 
    } 
} 
+0

私はこの行にヌルリファレンスを取得しています: 'HttpRequestUtils httpRequestUtils = new HttpRequestUtils(context);' – user3125867

+0

今すぐ取得しているのは 'E/Editor:hideClipTrayIfNeeded()です。 hideClipTray() ' – user3125867

+0

1)httpRequestUtils行は、' context'がnullでない場合、エラーにはなりません... 2)そのエラーはAsyncTaskと無関係です –

関連する問題