Theme.AppCompat тема, необходимая для неактивности для AlertDialog - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь добавить AlertDialog в класс (а не в активность), который обрабатывает асинхронный вызов на серверной части и обновляет графический интерфейс действия, переданного ему onPostExecute ().Действие, переданное этому классу, реализует потомок Theme.AppCompat, но сам класс этого не делает (поскольку это не действие), но я получаю следующую ошибку:

java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.

Класс с асинхронной задачей выглядитнапример:

public class QueryUserTask extends AsyncTask<Void, Void, Seller>{
private Context mainContext;
private View mainView;
int barcode;

public QueryUserTask(Context context, View rootView, int sellerID) {
    this.mainContext = context;
    this.mainView = rootView;
    this.barcode = sellerID;
}

protected Seller doInBackground(Void... unused) {
    Seller seller = null;
    try {
        ApiRequester API = new ApiRequester();
        seller = API.getSellerFromApi(barcode);

    } catch (NoSuchAlgorithmException e) {
        Log.d("Seller API Error", e.getMessage(), e);
        Toast APIError = Toast.makeText(mainContext,R.string.NoSuchAlgorithmException, Toast.LENGTH_LONG);
        APIError.show();
    }
    return seller;
}

protected void onPostExecute(Seller seller) {
    // Do something with the result.
    TextView sellerNameTextView = (TextView) mainView.findViewById(R.id.sellername);
    TextView sellerIDTextView = (TextView) mainView.findViewById(R.id.sellerid);
    TextView newspaperCountTextView = (TextView) mainView.findViewById(R.id.newsCount);
    TextView calenderCountTextView = (TextView) mainView.findViewById(R.id.calCount);

    sellerNameTextView.setText(String.valueOf(seller.getName()));
    // sellerIDTextView.setText(String.valueOf());
    newspaperCountTextView.setText(String.valueOf(seller.getNewspapers()));
    calenderCountTextView.setText(String.valueOf(seller.getCalendars()));

    ImageView sellerImage = (ImageView)mainView.findViewById(R.id.imageView2);
    sellerImage.setImageBitmap(seller.getImage());

    String text = seller.getText();
    Log.d("text", text);
    if(!text.equals("")){

        AlertDialog.Builder builder = new AlertDialog.Builder(mainContext);
        builder.setMessage("test")
                .setTitle("test");
        AlertDialog dialog = builder.create();
        dialog.show();

Контекст и root-права, передаваемые классу, получены из моей HomeActivity.Домашняя деятельность выглядит так в файле манифеста:

    <activity
        android:name=".HomeActivity"
        android:parentActivityName=".BarcodeCaptureActivity"
        android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
    <activity

Заранее большое спасибо

1 Ответ

0 голосов
/ 31 мая 2018

Измените свой код, чтобы передать Activity, который вызывает ваш AsyncTask:

Activity mActivity;

public QueryUserTask(Activity activity, View rootView, int sellerID) {
    this.mActivity= activity;
    this.mainView = rootView;
    this.barcode = sellerID;
}

Теперь используйте Activity, например:

AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
...