Android programlamada .Net ile yazılmış web servisini kullanıyorum; uzun süren bir işlem olduğundan dolayı AsyncTask yapısını kullandım. Fakat şöyle bir hata ile karşılaşıyorum :

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{packageName/packageName.DutyRoster}: java.lang.IllegalStateException: System services not available to Activities before onCreate()

public class DutyRoster extends Activity {

public static String[] rslt = null;    
ArrayList<String> updateList = null;
ArrayList<String> totalDate, totalExam = null;
String[] temp = null; 
webServiceCall wsc = new webServiceCall();;
Button buton1;   //buton tanımlaması yapıldı
String resp;
Intent i;
Bundle b;

final  AlertDialog ad = new AlertDialog.Builder(this).create();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_duty_roster);

    init();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.duty_roster, menu);
    return true;
}

private void init() {

    buton1=(Button)findViewById(R.id.remind);

    buton1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            if (updateList == null) {
                ad.setMessage("Hiç bir satır seçilmedi!");
            } else {

                startAnotherActivity();
            }

        }
    });

    try {
        resp = wsc.Call();
        new SoapCall().execute(resp);
        createDynamicTable(temp);
    }catch (Exception e) {

        ad.setTitle("Error!");
        ad.setMessage(e.toString());
        ad.show();
    }

}

public void startAnotherActivity () {

    i = new Intent(this, ScheduleActivity.class);
    b = new Bundle();
    b.putStringArrayList("updateList", updateList);
    i.putExtra("rowList", b);
    startActivity(i);

}

public void createDynamicTable(String[] tableContentList){

    // Xml'de oluşturduğumuz tablelayout'un adresini tablo değişkenine atadık.
    TableLayout tablo = (TableLayout) findViewById(R.id.tablo);

    for (int i = 0; i < tableContentList.length; i++){

        TableRow newLine = new TableRow(this);

        TextView rowDate = new TextView(this);
        TextView rowName = new TextView(this);
        TextView rowPeriod = new TextView(this);

        CheckBox checkBox = new CheckBox(this);
        checkBox.setOnClickListener(getOnClickDoSomething(checkBox));

        // textviewlerin içeriklerine dizilerin içeriklerini ekliyoruz.
        rowDate.setText(tableContentList[i]);
        rowName.setText(tableContentList[i + 1]);
        rowPeriod.setText(tableContentList[i + 2]);

        totalDate.add(tableContentList[i]);
        totalExam.add(tableContentList[i + 1]);

        //oluşturduğumuz satıra textviewleri ekliyoruz.
        newLine.addView(checkBox);
        newLine.addView(rowDate);
        newLine.addView(rowName);
        newLine.addView(rowPeriod);

        //tablelayout'a satırı ekliyoruz.
        tablo.addView(newLine);
        i += 3;

    }

}

View.OnClickListener getOnClickDoSomething(final Button button) {
    return new View.OnClickListener() {
        public void onClick(View v) { 
            int location = button.getId();
            updateList.add(totalDate.get(location) + "/" + totalExam.get(location));
        } 
    };
}

private class SoapCall extends AsyncTask<String, String[], String[]> {

    private ProgressDialog dialog = new ProgressDialog(DutyRoster.this);

    @Override
    protected void onPreExecute() {
        dialog.setMessage("Yükleniyor..."); 
        dialog.show();
    }

    @Override
    protected void onPostExecute(String[] temp) {

        dialog.dismiss();

    }

    @Override
    protected String[] doInBackground(String... responses) {
        String rsp = responses[0];

        String delimiter = "#";

        try{

            temp = rsp.split(delimiter);

        }catch(Exception ex)
        {
            ad.setMessage("couldn't take any data");
            ad.show();

            //ex.printStackTrace();
        }   
        return temp; 
    }

}

}

Sizce neden böyle bir hata oluşuyor; nasıl çözebilirim? Ve acil bunu çözmem gerekiyor. Yetiştirmem gereken bir projenin parçası yardımlarınız için şimdiden teşekkürler.

soruldu: 17 Oca '14, 14:52

symtkn's gravatar image

symtkn
16556
cevap kabul oranı: 0%

değiştirildi: 17 Oca '14, 17:13

Turgay%20Can's gravatar image

Turgay Can
8.3k63798


Kendi yağımla kavruldum gibi olacak ama hatayı çözmeyi başardım.

final  AlertDialog ad = new AlertDialog.Builder(this).create();

satırını onCreate() metodundan önce tanımladığım için böyle bir hata oluşuyormuş. Bunu onCreate() içine taşıyınca hata ortadan kalktı.

permanent link

cevaplandı: 22 Oca '14, 22:32

symtkn's gravatar image

symtkn
16556
cevap kabul oranı: 0%

hata mesajına dikkat edersen hatanın belirttiğin satırdan kaynaklandığı aşikar zira new AlertDialog.Builder(this) çağrımında "this" içinde bulunduğun activity'i işaret eder, bu satırda onCreate'den önce işletildiği için IllegalStateException hatası fırlatılır.

(23 Oca '14, 02:03) gturedi gturedi's gravatar image
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×819
×17
×6

Soruldu: 17 Oca '14, 14:52

Görüntüleme: 977 kez

Son güncelleme: 23 Oca '14, 02:03

powered by BitNami OSQA