Ошибка выхода из потока в Android - PullRequest
0 голосов
/ 18 ноября 2011

Пожалуйста, помогите с этой ошибкой .... В следующем коде функция get info работает правильно, но выдает ошибку, говорящую, что поток перехватил исключение при выходе .... Я пытаюсь использовать хост с вкладками и первый Страница вкладки следующая ... В этом я показываю диалог прогресса, пока не получу свои данные, а затем покажу их в виде списка

public class History extends Activity implements OnItemClickListener
{
/** Called when the activity is first created. */
ListView list;

//LIST OF ARRAY STRINGS WHICH WILL SERVE AS LIST ITEMS
ArrayList<String> listItems;

//DEFINING STRING ADAPTER WHICH WILL HANDLE DATA OF LISTVIEW
ArrayAdapter<String> adapter;
private String resDriver,resPassenger,ID;
private ProgressDialog dialog;
ArrayList<HashMap<String, Object>> listInfo = new ArrayList<HashMap<String, Object>>();
HashMap<String, Object> item;
JSONObject jDriver;
//JSONObject jPassenger;

// Make strings for logging
private final String TAG = this.getClass().getSimpleName();
private final String RESTORE = ", can restore state";
private final String state = "Home Screen taking care of all the tabs";
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    Intent loginIntent = getIntent();
    ID = loginIntent.getStringExtra("ID");
    listItems = new ArrayList<String>();
    Log.i(TAG, "Started view active rides");
    setContentView(R.layout.searchresults);
    list = (ListView)findViewById(R.id.ListView01);
    list.setOnItemClickListener(this);
    adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,listItems);

    list.setAdapter(adapter);
    getInfo();
}

Функция getInfo используется для запуска потока, который показывает диалоговое окно и запускает http-запрос для получения некоторых данных ...

public void getInfo(){
    GetInfoThread checkUpdate = new GetInfoThread();
    checkUpdate.start();
    dialog = ProgressDialog.show(History.this, "Retrieving Info","Please Wait ...", true);
}

private class GetInfoThread extends Thread
{
    public void run() {
        jDriver = new JSONObject();
        try {
            jDriver.put("ID", ID);
            jDriver.put("task", "GET DATES");

        } catch (JSONException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        listItems = new ArrayList<String>();
        Log.i(TAG,"Sending data for the driver rides");
        resDriver = HTTPPoster.sendJson(jDriver,"http://dsadsada"); // Any Server URL

        JSONObject driver;
        try {
            driver = new JSONObject(resDriver);
            Log.i(TAG,"Recieved Driver details");

                    listItems.add(array[0]);
                    handler.sendEmptyMessage(0);
                }
            }
        } catch (JSONException e) {
        // TODO Auto-generated catch block
            listItems.add("No driver rides created");
            handler.sendEmptyMessage(0);
        }

    }

    private Handler handler = new Handler() {
        @Override
       public void handleMessage(Message msg) {
           dialog.dismiss();
           Log.i(TAG,"hello 123");
           adapter.notifyDataSetChanged();
       }
    };
}

1 Ответ

1 голос
/ 18 ноября 2011

Я не уверен точно, что является причиной вашей ошибки, но я подозреваю, что это связано с изменениями пользовательского интерфейса, не выполняющимися в реальном потоке пользовательского интерфейса.В Android есть класс с именем AsyncTask , который будет выполнять за вас потоки и обрабатывать передачу данных между фоновым потоком и потоком пользовательского интерфейса.Я бы предложил переписать ваш код для использования класса AsyncTask .

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