3

プログレスバーを非表示にして、フラグメント内の編集テキストにonPostExecute()のエラーメッセージを設定しようとしていますが、アプリケーションがクラッシュしています。私はこれを正しく行うための助けが必要です。私はこのプロジェクトのために私の断片に多くの更新をしていますので、OnPostExecute()メソッドからフラグメントを更新する正しい方法を知る必要があります。AsynctaskのonPostExecute()メソッドでフラグメントを変更する

Fragmentクラスのオブジェクトを作成してからオブジェクトを使用して、にアクセスしようとしましたが、progressBarメソッドshowProgress()にアクセスしましたが、実行時エラーが発生します。

protected void onPostExecute(String result) { 
     super.onPostExecute(result); 
     String jsonStr = result; 
     SellerRegisterFragment sr = new SellerRegisterFragment(); 
     Toast toast = null; 
     if (jsonStr != null) { 
      try { 
       JSONObject jsonObj = new JSONObject(jsonStr); 
       String query_result = jsonObj.getString("query_result"); 
       if (query_result.equals("SUCCESS")) { 
        toast = null; 
        Toast.makeText(context, "Registered successfully. You can now Login", Toast.LENGTH_SHORT).show(); 
        if (toast == null || toast.getView().getWindowVisibility() != View.VISIBLE) { 
        context.startActivity(new Intent(context, SellerLoginOrRegisterActivity.class)); 
       } 
       } 
       else if (query_result.equals("DUPLICATE")) { 
        toast = null; 
        Toast.makeText(context, "Account for the given URL already exists", Toast.LENGTH_SHORT).show(); 
        sr.showProgress(false); 
       } 
       else if (query_result.equals("FAILURE")) { 
        Toast.makeText(context, "Data could not be inserted. Signup failed.", Toast.LENGTH_SHORT).show(); 
       } else { 
        Toast.makeText(context, "Couldn't connect to remote database.", Toast.LENGTH_SHORT).show(); 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
       Toast.makeText(context, "Error parsing JSON data."+"...... "+ jsonStr, Toast.LENGTH_SHORT).show(); 
      } 
     } else { 
      Toast.makeText(context, "Couldn't get any JSON data.", Toast.LENGTH_SHORT).show(); 
     } 
    } 
+0

ログキャストを投稿できますか? – Raghavendra

+0

ur返信ありがとう...私はすぐに投稿します.. 1分待ってください –

+0

このエラーが発生しました:java.lang.IllegalStateException:フラグメントSellerRegisterFragment {1b16e429}アクティビティに添付されていません –

答えて

2

フラグメントインスタンスをonPostExecute内に作成しています。次に、Fragmentのメンバー変数を使用します。フラグメントのインスタンスを作成するだけで何もしません。

フラグメントをアクティビティに追加する必要があります。そのときだけ、Fragmentのコールバックが実行されます。これらのコールバック(onCreate、onCreateViewなど)では、EditText、ProgressBarのインスタンスを作成します。

フラグメンテーションをアクティビティに追加せずにこれらの変数を使用すると、NullPointerExceptionが発生します。

私はあなたがすでにアクティビティにフラグメントを追加していると思います。そのFragmentインスタンスを使用する代わりに、新しいインスタンスを作成し、そのインスタンスをonPostExecute内で使用します。

+0

yesフラグメントが既にアクティビティに追加されています。ユーザが登録ボタンをクリックすると、asynctaskはそのジョブを実行します。つまり、サーバ上のユーザを検証し、onPostExecute()メソッドが実行されるまで、フラグメントにプログレスバーが表示されます。 。私はフラグメント上の進行状況バーを隠し、既にアクティビティに追加されているフラグメントにエラーメッセージを設定したい –

+0

AsyncTaskコードはフラグメント内にありますか? – Bob

+0

他にはありません –

0

エラーログに問題が明確に示されています。

Fragment SellerRegisterFragment{1b16e429} not attached to Activity 

問題は、アクティビティにアタッチする前にSellerRegisterFragmentでメソッドを呼び出そうとしていることです。

FragmentSはアクティビティに関連付けられており、その説明はAndroidのマニュアルhereで確認できます。私は、次のLOC

SellerRegisterFragment sr = new SellerRegisterFragment(); 

であなたのロジックに疑問を持っている

あなたはSellerRegisterFragmentの既存のインスタンスのメソッドを呼び出すしますか?もしそうなら、簡単にbroadcastを使うことができます。

ない場合は、その後、transaction、その後committransactionを実行するためにFragmentManagerを使用して、新しいインスタンスを作成する必要があります。

関連する問題