2011-12-19 4 views
1

나는 doInBackground()입니다. 기능 후에는 TextViewMainActivity으로 변경하고 싶습니다. 하지만 기본 활동에서 기능을 실행하면 NullPointerExceptionTextView 행에 있습니다.onPostExecute()는 MainActivity 요소를 사용할 수 없습니다.

protected String doInBackground(Object... arguments) { 

    some code.. 

    return result; 
} 

@Override 
protected void onPostExecute(String result) { 
    if(result!=null) 
     new MainActivity().setScoreListUpdate(result); 
} 

MainActivity :

public void setScoreListUpdate(String settings) 
{ 
    String[] yeniscore = settings.split("\\|"); 

    if(yeniscore.length > 1) 
    { 
      birinci.setText(yeniscore[1]); << NULLPOINTEREXC. 
    } 
} 
+0

MainActivity의 onCreate 메소드에서 find를 호출하여 TextView birinci를 가져 오겠습니까? ViewById? –

+0

@Chunhui 예 .. birinci = (TextView) findViewById (R.id.birinci); – Mert

답변

2

이것은 NullPointerException을 제공하는 이유는 당신이 대신 한 기존 작업의 MainActivity의 새 인스턴스를 만들 것입니다.

Activity에 대한 참조를 AsyncTask으로 전달한 다음 해당 참조에서 메소드를 호출하십시오.

private MainActivity myMainActivity; 

당신의 AsyncTask - 클래스에 생성자를 추가 : 다음

public MyAsyncTaskClassName(MainActivity activity) { 
    myMainActivity = activity; 
} 

onPostExecute에 당신이 할 :

myMainActivity.setScoreListUpdate(result); 
당신은 변수가됩니다 -class 당신의 AsyncTask에 따라서

+0

그냥 완벽한 작품을 시도 .. 아주 고마워요 :) – Mert

1

대신 사용

new MainActivity().setScoreListUpdate(result); 

MainActivity.this.setScoreListUpdate(result); 

이 행해져 Yout postExecute 방법이다.

또한 birinci이라는 TextView는 onCreate 메서드의 변수뿐만 아니라 MainActivity 클래스의 필드 여야합니다.

편집 : 이것은 내 프로그램에서 이와 같이 작동합니다. 차이점을 확인하십시오.

public class DeviceSettingsStatsActivity extends ListActivity { 

    AsyncTask<Void, Integer, ListAdapter> task = null; 
    ListAdapter listAdapter = null; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     task = new ComputeTask().execute(); 
    } 

    protected void viewComputeResult(ListAdapter result) { 
     setListAdapter(result); 
    } 

    private class ComputeTask extends AsyncTask<Void, Integer, ListAdapter> { 

     @Override 
     protected ListAdapter doInBackground(Void... params) { 
      // some stuff 
     } 

     @Override 
     protected void onPostExecute(ListAdapter result) { 
      DeviceSettingsStatsActivity.this.viewComputeResult(result); 
     } 
    } 
} 
+0

나는 그것을 시도했지만 "범위에서 접근 가능한 MainActivity 유형의 엔 클로징 인스턴스가 없습니다." – Mert

+0

제 편집 내용을 사용해보십시오. – Moyshe

+0

이 작업은 동일한 범위에 있음을 의미합니다. 하지만 시간 내 주셔서 감사합니다. 정말 너희들을 기쁘게 :) – Mert

관련 문제