2017-05-21 1 views
0

asynctask를 사용하여 일부 XML 작업을 수행하고 있지만 완료되면 textview를 업데이트하려고하지만 findViewById를 사용하여 textview를 참조 할 수없는 다음과 같은 문제가 발생합니다.Asynctask의 텍스트 뷰 참조하기

public class HTTPRequestTask extends AsyncTask<String , Void, String > { 

    @Override 
protected String doInBackground(String... args) { 

    q = (TextView)findViewById(R.id.xmlData); //cannot resolve findViewbyId 

그러면 게시 실행 방법에서 textview를 업데이트하고 싶습니다.

@Override 
protected void onPostExecute(String s) { 
    super.onPostExecute(s);{ 
     q.setText(s); 
    } 
} 

postExecute 메서드에서 텍스트를 설정할 수있는 가장 직접적인 방법은 무엇입니까 ??

+0

당신의 코드는 ** 메모리 누출 **을 유발할 것입니다.이 경우'WeakReference'를 사용하십시오. – Enzokie

답변

0

당신은 Activity 변수 또는 내 말은 HTTPRequestTask

TextView 변수 중 하나를 통과해야,

public class HTTPRequestTask extends AsyncTask<String , Void, String > { 

    private Activity act; 
private TextView q; 
     public HTTPRequestTask (Activity act) { 
     this.act = act; 
q = (TextView)act.findViewById(R.id.xmlData); 
     } 
     @Override 
     protected String doInBackground(String... args) { 
     //some code with your q 

이 작업 사용이를 시작하려면 생성자를 만들 new HTTPRequestTask(this).execute();

+1

잠재적 인 메모리 누수 인 WeakReference를 사용하십시오. – Enzokie

+0

@Enzokie, 그런 구현을 사용하여이 문제에 직면 한 적이 없습니다. – Vyacheslav

+0

3 개의 인수 만 취할 수있는 경우 클래스에 특정 변수를 전달하는 방법은 무엇입니까? – MXG123

0

HTTPRequestTask이 포함 된 Activity class을 참조하십시오.

예 :

: MyActivity.this.findViewById(R.id.xmlData);

+0

다른 Java 파일에있는 것처럼 보입니다. – Vyacheslav

+0

어떻게 확인할 수 있습니까? –

+0

IDE가이 클래스가 서브 클래스 인 경우이 문제를 해결할 수 있습니다. – Vyacheslav