-1

데이터를 액티비티에서 프래그먼트로 전달하는 방법. 그것은 잘 문서화되어 있지만 불행히도 나를위한 해결책은 없습니다.AsyncTask에서 Fragment로 데이터를 보내는 방법

내 주요 활동 내에서 내부 AsyncTask 클래스의 데이터를 다른 조각으로 보내려고합니다.

가장 인기있는 대답은 다음과 같은 번들 그래서 시도 사용하는 것입니다

AsyncTask를 :

Bundle bundle = new Bundle(); 
bundle.putString("test", "From AsyncTask"); 

MyFragmentClass fragobj = new MyFragmentClass(); 
fragobj.setArguments(bundle); 

조각 :

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

rootView = inflater.inflate(R.layout.fragment_one, container, false); 

String value = getArguments().getString("test"); 
Log.i("valueTest", value); 

return rootView; 

} 

문자열은 조각에 전달되지 않는 다음과 같이 나타납니다 :

"java.lang.NullPointerException : Attemp t는 가상 메소드 'java.lang.String을 호출합니다. null 객체 참조에서'android.os.Bundle.getString (java.lang.String) '

감사합니다.

+0

당신의 AsyncTask를 코드는 무엇입니까 ? –

+0

'FragmentTransaction'에'MyFragmentClass'의 다른 인스턴스를 추가하지 않았는지 확인하십시오. 또한 공유 한 코드로 인해 오류가 발생합니다. 'bundle.putString ("test", "AsyncTask From); ' – SlashG

+0

제안 해 주셔서 감사합니다 Cgx 솔루션이 작동했습니다 –

답변

0

를 해결하는 데 도움이

Bundle b = getActivity().getIntent().getExtras(); 
    if(b != null) { 
     String test = b.getString("test"); 
    } 

이 시도하는) 비동기입니다 .so는 당신을 asyncTask가 완료되면 BroadCastReceiver를 사용하여 데이터를 수신 할 수 있습니다. 조각 :

@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.layout_demo, container, false); 
    //to register br 
    initBroadCastReceiver(); 
    return view; 
} 

private void initBroadCastReceiver() { 
    manager = LocalBroadcastManager.getInstance(getContext()); 
    MyBroadCastReceiver receiver = new MyBroadCastReceiver(); 
    IntentFilter filter = new IntentFilter(); 
    //whatever 
    filter.addAction("com.action.test"); 
    manager.registerReceiver(receiver,filter); 
} 

class MyBroadCastReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     //e.g 
     String key = intent.getStringExtra("key"); 
    } 
} 

asyncTask-> onPostExcute()

Intent intent = new Intent("com.action.test"); 
    intent.putExtra("key","123"); 
    manager.sendBroadcast(intent); 
+0

도움 주셔서 감사합니다. 솔루션이 작동했습니다. asyncTask에 manager = LocalBroadcastManager.getInstance (getApplicationContext());를 추가해야했습니다. –

0

당신의 onCreateView이는 조각을 만들고 AsyncTask를으로부터 얻을 수 있기 때문에, 당신은 번들을 얻을 수 물론 널 포인터 오류

+0

이것은'NullPointerException' 만 처리 할 것입니다. 데이터가 전달되지 않는 문제 수정 – SlashG

+0

Cgx 제안으로 문제가 정렬되었습니다. –