2016-06-13 11 views
0

私は4つの断片を持つアクティビティを持っています。このアクティビティからasyncTaskの変数にアクセスしたいと思います。この変数は、asyncTaskのonPostExecuteメソッドでインスタンス化されます。asyncTaskの変数にアクセスできません

このクラスにメソッドを作成し、アクティビティでアクセスしようとしました。私はnullオブジェクトを取得しています。

いいえアイデア何が起こっていません。

AsyncTask

public class GetProfileAsyncTask extends AsyncTask<String, Void, JSONObject> { 
    String api; 
    JSONObject jsonParams; 
    private Context context; 
    public static JSONObject profile; 

    public GetProfileAsyncTask(Context context) { 
     this.context = context; 
    } 

    @Override 
    protected JSONObject doInBackground(String... params) { 
     try { 
      api = context.getResources().getString(R.string.server_url) + "api/user/getprofile.php"; 

      jsonParams = new JSONObject(); 
      String username = params[0]; // params[0] is username 
      jsonParams.put("user", username); 

      ServerRequest request = new ServerRequest(api, jsonParams); 
      return request.sendRequest(); 
     } catch(JSONException je) { 
      return Excpetion2JSON.getJSON(je); 
     } 
    } //end of doInBackground 

    @Override 
    protected void onPostExecute(JSONObject response) { 
     super.onPostExecute(response); 
     Log.e("ServerResponse", response.toString()); 
     try { 
      int result = response.getInt("result"); 
      profile = response.getJSONObject("profile"); 

      String message = response.getString("message"); 
      if (result == 0) { 
       Toast.makeText(context, message, Toast.LENGTH_LONG).show(); 
       //code after getting profile details goes here 
      } else { 
       Toast.makeText(context, message, Toast.LENGTH_LONG).show(); 
       //code after failed getting profile details goes here 
      } 
     } catch(JSONException je) { 
      je.printStackTrace(); 
      Toast.makeText(context, je.getMessage(), Toast.LENGTH_LONG).show(); 
     } 
    } //end of onPostExecute 

    public static JSONObject getProfile() 
    { 
     return profile; 
    } 
} 

活動

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_profile); 

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 

    toolbar.setTitle("Profile"); 

    toolbar.setNavigationIcon(R.drawable.ic_arrow_back_white_24dp); 


    setSupportActionBar(toolbar); 

    // Create the adapter that will return a fragment for each of the three 
    // primary sections of the activity. 
    toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      finish(); 

     } 
    }); 

    profileAsyncTask = new GetProfileAsyncTask(this); 

    GetProfileAsyncTask task = new GetProfileAsyncTask(this); 

    profile = GetProfileAsyncTask.getProfile(); 

    task.execute("sid"); 

    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager(),mTitles,mNumbOfTabs); 

    // Set up the ViewPager with the sections adapter. 
    mViewPager = (ViewPager)findViewById(R.id.pager); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 

    mTabs = (SlidingTabLayout)findViewById(R.id.tabs); 
    mTabs.setDistributeEvenly(true); 
    mTabs.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() { 
     @Override 
     public int getIndicatorColor(int position) { 
      return getResources().getColor(R.color.tab_scroll_color); 
     } 
    }); 

    mTabs.setViewPager(mViewPager); 
} 

EDITは:そのヌルまだこれを試してみました。

JSONオブジェクトからパラメータにアクセスするにはどうすればよいですか? asyncTaskで

public void onTaskCompleted(JSONObject response) { 
    profile = response; 
} 

アクティビティー:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_profile); 

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 

    toolbar.setTitle("Profile"); 

    toolbar.setNavigationIcon(R.drawable.ic_arrow_back_white_24dp); 


    setSupportActionBar(toolbar); 

    // Create the adapter that will return a fragment for each of the three 
    // primary sections of the activity. 
    toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      finish(); 

     } 
    }); 

    profileAsyncTask = new GetProfileAsyncTask(this); 

    GetProfileAsyncTask task = new GetProfileAsyncTask(this); 
    task.execute("sid"); 

    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager(),mTitles,mNumbOfTabs); 

    // Set up the ViewPager with the sections adapter. 
    mViewPager = (ViewPager)findViewById(R.id.pager); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 

    mTabs = (SlidingTabLayout)findViewById(R.id.tabs); 
    mTabs.setDistributeEvenly(true); 
    mTabs.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() { 
     @Override 
     public int getIndicatorColor(int position) { 
      return getResources().getColor(R.color.tab_scroll_color); 
     } 
    }); 

    mTabs.setViewPager(mViewPager); 
} 

@Override 
public void onTaskCompleted(JSONObject response) { 
    profile = response; 
} 

がヌルとしてプロファイルオブジェクトを取得します。助けてください。ありがとうございました。

+1

asynctaskは非同期です。あなたは、アクティビティ – Raghunandan

+0

へのコールバックとしてインターフェイスを使用できますか? @ Raghunandan –

+0

あなただけのGoogle多くのstackvoerflow答えを見つける。ここに1つhttps://xelsoft.wordpress.com/2014/11/28/asynctask-implementation-using-callback-interface/ – Raghunandan

答えて

0

タスク外のフィールドをアクティビティレベルで作成します。 onPostExecuteで更新してください。

+0

私はこのリンクに従っています:stackoverflow.com/questions/9963691/...、アクティビティで何をするのですか?アクティビティでその変数を取得する方法は?@usajnf –

関連する問題