2014-02-28 1 views
0

onCreate에 다른 활동으로 AsyncTask이 시작되어 Activity이라는 SpotDetails가 있습니다. AsyncTaskxml 파일을 다운로드하고 파싱하며 그 결과는 ActivityTextView으로 출력되어야합니다.AsyncTask에서 TextView를 설정하십시오.

어떻게해야합니까? 메인 클래스 니펫 (SpotDetails) AsyncTask에서

public TextView TextView_WindStrenghFromVindsiden, spoTextView; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.spot_overview); 
    //Recive intent 
    Intent intent = getIntent(); 
    //Set strings to information from the intent 

    //Create a intance of Place with information 
    place = vindsiden.createSted(intent.getStringExtra("StedsNavn")); 
    // TextView spoTextView = (TextView)findViewById(R.id.spot_overview_WindDegreesForeCastFromYRinfo); 

    spoTextView = (TextView)findViewById(R.id.spot_overview_WindDegreesForeCastFromYRinfo); 

    String URL = place.getNB_url(); 
    DomXMLParser domXMLParser = new DomXMLParser(); 

    //domXMLParser.DownloadXML(URL); 
    domXMLParser.DownloadXML(URL, this); 


    // 

니펫 (DomXMLParser.java)

TextView tv; 


    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

     tv = (TextView) spotDetails.findViewById(R.id.spot_overview_WindDegreesForeCastFromYRinfo); 
     // Create a progressbar 

----- 니핏 onPostExecute

tv.setText(yrMeasurmentList.get(0).getWindDirection_degree()); 

행 예외 : http://pastebin.com/WEqSdc1t

(StackOverflow는 코드로 내 예외를 인식합니다.)

+0

doinbackground()에 들어가기 전에 textview를 null로 설정하십시오. –

+0

은 onPreExecute의 textview를 null로 설정하는 것과 같습니다. – Dukes

+0

그래서 append()를 시도하십시오. –

답변

0

다른 활동에 AsyncTask을 넣지 마십시오. 여러 곳에서 사용하고있는 AsyncTask을 가지고 있다면 유틸리티 클래스에 넣거나 자신의 파일에 선언 할 수 있습니다. 하나의 활동 만 UI를 수정하는 AsyncTask이있는 경우 해당 활동에서 선언해야합니다. AsyncTask 여러 활동에 의해 사용되는 경우에, 당신은 생성자에서 Activity을 통과 private 필드로 저장하고, onPostExecute()의 견해를 해결할 수 :

class MyAsyncTask extends AsyncTask... { 
    WeakReference<Activity> mActivity; 

    public MyAsyncTask(Activity activity) { 
     super(); 
     mActivity = new WeakReference<Activity>(activity); 
    } 

    ... 

    public void onPostExecute(...) { 
     Activity act = mActivity.get(); 
     if(act != null) { 
      TextView tv = act.findViewById(...id...); 
      tv.setText("Hello World"); 
     } else { 
      // the Activity was destroyed 
     } 
    } 

} 

참고 : 내가 거기 이는 WeakReference를 사용하고 장기 실행 AsyncTasks로 대부분의 문제를 완화하는 데 도움이됩니다.

+0

코드에서 말했듯이 나는 완벽하게 작동했습니다. 귀하의 의견대로 저는 이미 당신이 말한 것처럼합니다 :) – Dukes

관련 문제