2013-01-04 14 views
8

में "findViewById" तक नहीं पहुंच सकता है मैं एक php फ़ाइल से डेटा डाउनलोड करने के लिए AsyncTask क्लास का उपयोग कर रहा हूं। डाउनलोड करने के बाद, मैं इस डेटा को अलग-अलग टेक्स्ट व्यू में रखना चाहता हूं, लेकिन मैं findViewById विधि का उपयोग नहीं कर सकता।AsyncTask

समस्या यह है कि मैं इसे अलग-अलग वर्गों द्वारा कर रहा हूं, और यह सब एक टुकड़े के भीतर कर रहा है।

यह मेरा कोड है:

public class RecuperarComentarisFoto extends AsyncTask<String, String, String>{ 
private Context mContext; 
[...] 
public RecuperarComentarisFoto(Context context){ 
    this.mContext=context; 
} 
@Override 
protected void onPreExecute() { 
    [...] 
} 

@Override 
protected String doInBackground(String... arg0) { 
    params.add(new BasicNameValuePair("pid", "1")); 
    JSONObject json = jsonParser.makeHttpRequest(url_get_comentaris, "GET", params); 
    JSONArray productObj; 
    //HERE I RETRIEVE DATA FROM JSON. ITS WORKING OK. 

    return null; 
} 

और जहां मैं इस समस्या है: मैं इस कोशिश की है

@Override 
protected void onPostExecute(String result) { 
    super.onPostExecute(result); 
    this.pDialog.dismiss(); 
    TextView comentariEditText = (TextView) findViewById(R.id.commentsMostrar); 
} 

:

 TextView comentariEditText = (TextView) mContext.findViewById(R.id.commentsMostrar); 

लेकिन भी काम नहीं कर रहा ।

ध्यान दें कि मैं इस AsyncTask को एक टुकड़े से बुला रहा हूं।

public class MyFragmentA extends Fragment { 
Context cont; 

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

    View myFragmentView = inflater.inflate(R.layout.fragment_a, container, false); 

    cont=getActivity(); 
    new RecuperarComentarisFoto(cont).execute(); 
    return myFragmentView; 
} 


} 

मुझे क्या करना चाहिए: जैसा कि आप देख सकते हैं, मैं AsyncTask करने के लिए) संदर्भ getActivity (द्वारा प्राप्त पारित करने के लिए था?

धन्यवाद।

+0

अपना लॉगकाट – Ahmad

उत्तर

24

इस तरह AsyncTask करने के लिए अपने फुलाया दृश्य दर्रा:

public class RecuperarComentarisFoto extends AsyncTask<String, String, String>{ 
private Context mContext; 
private View rootView; 
[...] 
public RecuperarComentarisFoto(Context context, View rootView){ 
    this.mContext=context; 
    this.rootView=rootView; 
} 
@Override 
protected void onPreExecute() { 
    [...] 
} 

@Override 
protected String doInBackground(String... arg0) { 
    params.add(new BasicNameValuePair("pid", "1")); 
    JSONObject json = jsonParser.makeHttpRequest(url_get_comentaris, "GET", params); 
    JSONArray productObj; 
    //HERE I RETRIEVE DATA FROM JSON. ITS WORKING OK. 

    return null; 
} 
@Override 
protected void onPostExecute(String result) { 
    //super.onPostExecute(result); <--GET RID OF THIS (it will screw up on 2.1 devices) 
    this.pDialog.dismiss(); 
    // use rootview to findViewById 
    TextView comentariEditText = (TextView) rootView.findViewById(R.id.commentsMostrar); 
} 

फिर तो जैसे फोन,

View myFragmentView = inflater.inflate(R.layout.fragment_a, container, false); 

cont=getActivity(); 
new RecuperarComentarisFoto(cont, myFragmentView).execute(); 
+2

पोस्ट पोस्ट आमतौर पर उपयोग किए जाने वाले एप्लिकेशन या गतिविधि को संदर्भित करता है। दृश्य यूआई तत्व जैसे टेक्स्ट व्यू/बटन और कंटेनर (लीनियरलाउट, इत्यादि – petey

+0

उत्तर के लिए धन्यवाद, मैं एंड्रॉइड में नया हूं .... इसलिए मदद के लिए धन्यवाद ... –

+0

बढ़िया! यह काम करता है .... – partho

1

रूप getActivity() के बजाय MyFragmentA संदर्भ पास करने के बाद कोशिश:

cont=this; 
new RecuperarComentarisFoto(cont).execute(); 

और बदल RecuperarComentarisFoto

रूप
public class RecuperarComentarisFoto extends AsyncTask<String, String, String>{ 
public Fragment mContext; 
[...] 
public RecuperarComentarisFoto(Fragment context){ 
    this.mContext=context; 
} 
@Override 
protected void onPostExecute(String result) { 
    super.onPostExecute(result); 
    this.pDialog.dismiss(); 
    TextView comentariEditText = 
        (TextView)mContext.findViewById(R.id.commentsMostrar); 
} 
//...your code.. 
1

बस दृश्य myFragmentView के साथ अपने AsyncTask करने के लिए एक अतिरिक्त पैरामीटर जोड़ने और उस पर अपने TextView लगता है ।

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

    View myFragmentView = inflater.inflate(R.layout.fragment_a, container, false); 

    cont=getActivity(); 
    new RecuperarComentarisFoto(cont, myFragmentView).execute(); 
    return myFragmentView; 
} 

और फिर बस उस दृश्य का उपयोग ..

TextView comentariEditText = (TextView) mView.findViewById(R.id.commentsMostrar); 
0

आप अपना myFragmentView वैश्विक बना सकते हैं , इस तरह आप ऑनस्टार्ट जैसे अपने टुकड़े विधियों से कहीं भी अपने विचारों तक पहुंच सकते हैं।