Android-обработчик не может получить доступ к элементам графического интерфейса - PullRequest
0 голосов
/ 03 марта 2012

Я чувствую себя глупо, задавая этот вопрос, потому что у меня есть другое приложение, которое работает нормально, или, по крайней мере, я думаю, что это то же самое.Я определенно нуждаюсь в другом взгляде на это, потому что мне кажется, это должно работать.Мой код ниже:

public class InventorySystemActivity extends Activity {
private EditText barcode;
private EditText proddesc;
private EditText quantity;
public String scan_result;
public int which;
private InventorySystemDB db;
public Item singleItem;
public Item[] itemList;
private Thread t;
Handler handler = new Handler() {
    public void handleMessage(Message msg) {
        switch (msg.what) {
        case 1:
            barcode.setText(scan_result);
            proddesc.setText(singleItem.name);
            quantity.setText(singleItem.quantity);
            break;
        case 3:
            updateUI();
            pd.dismiss();
        }
    }
};
public static Intent in = new Intent("com.google.zxing.client.android.SCAN");
private ProgressDialog pd;
private Thread dbt;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.db = new InventorySystemDB(this);
    try {
        this.db.createDataBase();
        this.db.openDataBase();
    } catch (Exception e) {
        e.printStackTrace();
    }
    this.dbt = new Thread(this.db);
    setContentView(R.layout.main);
    Button scan = (Button) findViewById(R.id.scan);
    scan.setOnClickListener(new Button.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivityForResult(in, 0);
        }
    });
    Button search = (Button) findViewById(R.id.searchbutton);
    search.setOnClickListener(new Button.OnClickListener() {
        @Override
        public void onClick(View v) {
            pd.show();
            which = 1;
            scan_result = barcode.getText().toString();
            dbt.start();
        }
    });
    barcode = (EditText) findViewById(R.id.barcodenum);
    proddesc = (EditText) findViewById(R.id.proddesc);
    quantity = (EditText) findViewById(R.id.prodquantity);
    pd = new ProgressDialog(this);
    pd.setMessage("Loading data...");
}
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    if (requestCode == 0) {
        if (resultCode == RESULT_OK) {
            scan_result = intent.getStringExtra("SCAN_RESULT");
            barcode.setText(scan_result);
        } else if (resultCode == RESULT_CANCELED) {

        }
    }
}
private void updateUI() {
    barcode.setText(singleItem.upc);
    proddesc.setText(singleItem.name);
    quantity.setText("0");
}

}

Все, что я делаю, это берет номер UPC и получает информацию с пары веб-сайтов.Код отправляет сообщение обработчику просто отлично, и я сделал несколько таких приложений, используя потоки и обработчики, не знаю, почему у меня сейчас такая проблема.В любом случае, я могу закрыть ProgressDialog, но не могу обновить какие-либо объекты пользовательского интерфейса.Все это выглядит хорошо для меня, поэтому мне действительно нужно еще несколько глаз на это.Спасибо, ребята.

1 Ответ

0 голосов
/ 03 марта 2012

Вам нужно внести изменения в пользовательский интерфейс в runOnUIThread ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...