Проблемы с запуском активности в AsyncTask в Android - PullRequest
1 голос
/ 26 ноября 2011

Я столкнулся с одной проблемой в AsyncTask в моем приложении в Android.Проблема в том, что я запускаю еще один Activity из AsyncTask в моем приложении, которое работает нормально, когда его макет имеет простой Button, но когда я использую ImageButton, это дает мне ошибку handler и looper.loop.Я не понимаю причину, по которой происходит такая ошибка.Я отображаю меню с изображениями в вызове Activity.

Кто-нибудь может мне подсказать, в чем проблема в этом и как мне добиться такого рода функциональности?

protected void onPostExecute(Void result) {
    super.onPostExecute(result);
    if (Dialog != null && Dialog.isShowing()) {
       Dialog.dismiss();
       locationManager.removeUpdates(locationListener);
       Intent homeIntent = new Intent(ATMActivity.this.getApplicationContext(), HomeMenuActivity.class);
       homeIntent.putExtra("lat", latitude);
       homeIntent.putExtra("lng", longitude);
       startActivity(homeIntent);
    }
}

XML-файл: -

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical" >

    <ImageButton
        android:id="@+id/imageButton1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/atm_icon"
        android:onClick="buttonClicked" />

</LinearLayout>

Другая деятельностьКласс: -

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
       setContentView(R.layout.home);

       Button btn = (Button) findViewById(R.id.imageButton1);
       btn.setHint("ATM");
       float latitude = getIntent().getFloatExtra("lat", 0);
       float longitude = getIntent().getFloatExtra("lng", 0);
       Toast.makeText(getApplicationContext(), "Location Floats:- " + latitude + "," + longitude, Toast.LENGTH_LONG).show();
}

Ответы [ 2 ]

2 голосов
/ 26 ноября 2011

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

Activity_name.this.runOnUiThread(new Runnable() {

            @Override
            public void run() {
                // here you can add stuff to Update the UI.
            }
        });
1 голос
/ 26 ноября 2011

Без полной трассировки стека трудно сказать наверняка, но я думаю, что вы на самом деле получаете ClassCastException.

Ваш ATMActivity пытается привести imageButton1, определенный в xml как ImageButton, к Button. Это невозможно, поскольку последний не является суперклассом первого.

// Can't do below: Button is not a superclass of ImageButton
Button btn = (Button) findViewById(R.id.imageButton1);

Поскольку вы запускаете действие из onPostExecute AsyncTask, вы, вероятно, найдете некоторые вещи, упоминающие циклический обработчик / обработчик в трассировке стека.

...