2014-09-17 4 views
0

Так что я просто пытаюсь создать диалог оповещений, который является просто сообщением (без кнопок или заголовков). Я хочу отобразить диалоговое окно предупреждения, когда выполняется фоновое задание. Диалоговое окно предупреждения будет запущено в потоке пользовательского интерфейса.Не удается разрешить символ AlertDialogActivity

Вот что я сделал до сих пор:

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

     AlertDialog altDlg; 
     altDlg = new AlertDialog.Builder(AlertDialogActivity.this).create(); 

     altDlg.setMessage("Retrieving Information. Please Wait"); 

     altDlg.show(); 

    } 

Я также попытался это сделать:

AlertDialog.Builder builder = new AlertDialog.Builder(this) 
      .setMessage("Retrieve Info. Please Wait").show(); 

Ошибка я получаю с первым является:

cannot find symbol 'AlertDialogActivity' 
    symbol: class AlertDialogActivity 
    location: class com.example.Device.Activity 

Вторая ошибка попытки говорит:

incompatible types: com.example.Device.Activity cannot be converted to android.content.Context 

Я не уверен, что я делаю неправильно в любом сценарии. Я просто хочу показать базовое сообщение, когда выполняется фоновое задание, и я надеялся, что самое близкое, что я могу использовать, это AlertDialog.

EDIT для того, как настроить AsyncTask правильно:

Малый фон из того, что я хочу сделать. Я просто хочу прочитать в файле, десериализировать его и сохранить его содержимое в db.

Сейчас я предполагаю, что мне нужны только два вида деятельности.

Одна моя основная деятельность:

public class MainActivity extends Activity { 

/** 
    * Called when the activity is first created. 
    */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.setup); 

    final Button setup_button = (Button) findViewById(R.id.setup_button); 
    setup_button.setOnClickListener (new View.OnClickListener() { 
     public void onClick(View view){ 
      setContentView(R.layout.retrieve_info); 
    } 
    }); 
} 
} 

Теперь событие OnClick просто переходит на новый взгляд, который должен отобразить сообщение или диалог предупреждения, который говорит извлечение информации. Пожалуйста, подождите. Он отображает сообщение во время чтения файла и сохранения на db. После того, как файл будет считан и сохранен, сообщение должно исчезнуть и сказать что-то вроде завершения установки.

Моя вторая активность до сих пор:

public class RetrieveInfoActivity extends AsyncTask<Void,Void,Void> { 


    private ProgressDialog progressBar; 

    private void retrieveInfo(String fileName) { 

     try { 

      File file = new File(fileName); 
      Scanner scanner = new Scanner(file); 

      //Read all the lines until there are no more lines 
      while (scanner.hasNextLine()) { 

       scanner.nextLine(); 

      //TODO: deserialize and save to db 

      } 
      scanner.close(); 
     } 

     catch (FileNotFoundException e) { e.printStackTrace(); } 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     retrieveInfo("test.txt"); 
     return null; 
    } 

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

     progressBar.setIndeterminate(true); 
     progressBar.setCancelable(false); 
     progressBar.setMessage("Retrieve Information.Please wait"); 
     progressBar.show(); 

    } 

    @Override 
    protected void onPostExecute() { 

     progressBar.dismiss(); 
    } 

} 

Это все, что я на самом деле до сих пор. Мне просто нужно понять, как установить это в Android концептуально.

Надеюсь, что это имеет смысл.

+0

Как называется деятельность? – Blackbelt

+0

Какой класс вы продлеваете? – Simas

+0

Я расширяю AsyncTask. –

ответ

0

Попробуйте это:

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
+0

В этом случае, что getActivity() означает/be? Это под андроид.app.PendingIntent.getActivity? –

+0

Я предположил, что вы следовали примеру в документах Android и использовали DialogFragment: [link] (http://developer.android.com/guide/topics/ui/dialogs.html#AlertDialog) –

+0

Чтобы еще больше помочь вам, я должен понимать из в каком классе вы пытаетесь создать диалог. –

0

Вместо использования AlertDialog использовать ProgressBar, он будет делать трюк для вас.

private ProgressDialog progressBar; 

@Override 
    protected void onPreExecute() { 

     super.onPreExecute(); 

     progressBar.setIndeterminate(true); 
     progressBar.setCancelable(false); 
     progressBar.setMessage("Your message"); 
     progressBar.show(); 
} 

@Override 
    protected void onPostExecute(final String error_code) { 

      progressBar.dismiss(); 
} 
0

Похоже, вы расширяете AsyncTask и пытаетесь использовать его в качестве контекста. Это не сработает, поскольку сама AsyncTask - не что иное, как абстрактный класс.

Вам нужно создать пользовательский конструктор для AsyncTask для извлечения контекста:

public class MyTask extends AsyncTask<Void, Void, Void> { 

    private Context mCtx; 

    public MyTask(Context context) { 
     mCtx = context; 
    } 
    ... 

Тогда при запуске AsyncTask, передать контекст:

new MyTask(this).execute(); 

Другой путь был бы чтобы сделать AsyncTask внутренним классом и использовать YourActivity.this при создании диалога. Пример:

public class YourActivity extends Activity { 

    ... 

    private class MyTask extends AsyncTask<Void, Void, Void> { 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      AlertDialog dialog = new AlertDialog.Builder(YourActivity.this).create(); 
     } 

     @Override 
     protected Void doInBackground(Void... params) { 
      ... 
     } 
    } 

} 
+0

У меня вопрос, где бы я прошел контекст? "new MyTask (this) .execute();" Внутри прослушивателя событий, вызывающего запуск фоновой задачи? –

+0

@KalaJ, если вы запустите AsyncTask из действия, которое вы передаете, как только вы создаете экземпляр задачи. Некоторый код, в котором вы запускаете задачу, будет полезен. – Simas

+0

user3249477, я обновил свое сообщение, чтобы отразить весь код, который у меня есть до сих пор. Я новичок в разработке Android, поэтому, если это не имеет смысла, я заранее извиняюсь. Пожалуйста, дай мне знать, если возникнут какие-либо вопросы. Спасибо за вашу помощь! –

Смежные вопросы