2015-08-09 23 views
7

Genel olarak Android geliştirme ve Java için süper oldum. İşte temel kurulum: Sunucu kullanılabilirliğini kontrol etmek için bir AsyncTask ile bir açılış ekranım var. this numaralı parçacığı izleyerek, aktivitemde bir geri arama yaptım. Bu görevi farklı faaliyetlerde yeniden kullanmak istediğim için OnPostExecute()'daki işi yapmaktan daha mantıklı.Android, anonim sınıf içinden etkinliğe sahip olsun

Ancak, geri bildirimde durumun iyi olup olmadığını kontrol ediyorum. Öyleyse, sonraki aktiviteyi başlatmalıdır. Ama geri çağırma bağlamından, Intent için bir parametre olarak ihtiyacım olan Activity referansımı nasıl alabildiğimi anlamadım. Bu getActivity() olan başarısız

//Check server status 
    CheckServiceTask t = new CheckServiceTask(new OnTaskCompleted<ShaggyServiceStatus>() { 
     @Override 
     public void onTaskCompleted(ShaggyServiceStatus result) { 
      Log.i(TAG, "Callback. Result: " + result.getStatus()); 
      ProgressBar pb = (ProgressBar) findViewById(R.id.splash_progress); 
      pb.setVisibility(View.INVISIBLE); 

      if (result.getStatusCode() == 999){ 
       TextView t = (TextView) findViewById(R.id.splash_status_text); 
       t.setText(result.getStatus()); 
       return; 
      } 

      Intent i = new Intent(getActivity(), LoginActivity.class); 
      startActivity(i); 
      finish(); 

     } 
    }); 

    t.execute(); 

kısmı:

Bu

OnCreate altında benim Faaliyetinizdeki kodudur. Bu çağrı mevcut değil. this'u kullanarak ( OnTaskCompleted bağlamında olduğum gibi) bir hata atar.

bütünlüğü için

bu OnTaskCompleted için arayüz:

public interface OnTaskCompleted<T> { 
    public void onTaskCompleted(T result); 
} 

Bu CheckServiceTask sınıfıdır:

public class CheckServiceTask extends AsyncTask<Void, Void, ShaggyServiceStatus>{ 
    private static final String TAG = "coo"; 

    public OnTaskCompleted<ShaggyServiceStatus> listener; 

    public CheckServiceTask (OnTaskCompleted<ShaggyServiceStatus> l){ 
     this.listener = l; 
    } 

    @Override 
    protected ShaggyServiceStatus doInBackground(Void... params) { 
     try { 
      Log.i(TAG, "Connecting to server..."); 
      //TODO: Make this a setting 
      final String url = "https://someplace.com/status"; 
      RestTemplate restTemplate = new RestTemplate(); 
      restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); 
      //restTemplate.postForObject("url", bodyObject, ShaggySer.class); 
      ShaggyServiceStatus sss = restTemplate.getForObject(url, ShaggyServiceStatus.class); 
      Log.d(TAG, "Got the status."); 
      return sss; 
     } catch (Exception e) { 
      //TODO: Exception handling 
      Log.e(TAG, e.getMessage(), e); 
     } 

     //If we're here, it's not okay. 
     ShaggyServiceStatus r = new ShaggyServiceStatus("Cannot connect to server", 999, "none"); 

     return r; 
    } 

    @Override 
    protected void onPostExecute(ShaggyServiceStatus result) { 
     super.onPostExecute(result); 
     listener.onTaskCompleted(result); 
    } 
} 

cevap

11

kullanımlar CurrentClassName.this

Intent i = new Intent(CurrentClassName.this, LoginActivity.class); 

getActivity(): Fragments

ile kullanılan

Bu parçanın şu anda ilişkilendirilmiş olduğu etkinliği döndür.

class.this Sınıfa iç içe olan this aynı değildir.

+0

yup dönecektir Bu kod yığın, Numara! SplashActivity.this – Coo

4

sen denilen kullanın etkinlik "MyActivity" o zaman yapabiliyorsa aşağıdaki:

MyActivity.this 

yaptığı dış sınıfının bu "güncel" nesne

+1

Basit ve Temiz. Teşekkürler – MyMy

İlgili konular