0

asynctask クラスを介して URL にアクセスしようとしていますが、場合によっては、URL に到達できない場合があります。そのような場合、アプリケーションがクラッシュします。これを防ぐにはどうすればよいですか。UI にエラー メッセージ/トーストを表示したいと思います。 runOnUiThread() を実装しようとしましたが、成功しませんでした。

これは私の asynctask クラスです。この場合、gettin IOException になります。

public class SelectedEmployeeAsyncTask extends AsyncTask<String, Void, ArrayList<Employee>>{

private CaptureActivity captureActivity;
public SelectedEmployeeAsyncTask(CaptureActivity activity) {
    this.captureActivity = activity;
}


@Override
protected ArrayList<Employee> doInBackground(String... url) {

    ArrayList<Employee> employees = null;
    for(String employeeUrl : url){
        employees = fetch(employeeUrl);
    }
    return employees;
}

private ArrayList<Employee> fetch(String url) {

    ArrayList<Employee> employees = null;
    String response = null;
    try {
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(url);

        HttpResponse httpResponse = httpClient.execute(httpGet);
        HttpEntity httpEntity = httpResponse.getEntity();
        response = EntityUtils.toString(httpEntity);
        employees = EmployeeXMLParser.selectedEmployeeParser(response);
        System.out.println("Size in fetch "+employees.size());

        //System.out.println("Employee Name :: " + employees.get(0).getFirstName() + " " + employees.get(0).getLastName());
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } /*catch (XmlPullParserException e) {
        // TODO Auto-generated catch block
        System.out.println("Error parsing the response :: " + response);
        e.printStackTrace();
    }*/
    return employees;
}


@Override
public void onPostExecute(ArrayList<Employee> employees){
    super.onPostExecute(employees);

    System.out.println("in post execxute "+employees.size());
    //progressDialog.dismiss();
    captureActivity.display(employees);
    //activity.showEmployees(employees);

    //activity.setContentView(R.layout.activity_capture);

}

}

これは、asynctask が呼び出される私のアクティビティ クラスです。

public class CaptureActivity extends Activity {

//private String url = "http://192.168.3.140:8080/EmployeeXmlDemo/EmployeeList.xml";
private String url = "http://192.168.2.223:8680/capture/clientRequest.do?r=employeeList&cid=0";

FetchEmployeeAsyncTask employeeAsyncTask;

private ArrayList<Employee> employees = null;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setTitle("");
    //if(employees!=null){
     employeeAsyncTask = new FetchEmployeeAsyncTask(this);
     //selectedEmployeeAsyncTask = new SelectedEmployeeAsyncTask(this);
     employeeAsyncTask.execute(url);
     setContentView(R.layout.activity_capture);
    System.out.println("Status "+employeeAsyncTask.getStatus());

    //}


}
4

1 に答える 1

0

これを試して、

                catch (final Exception e) {if (e != null) {                     
                    e.printStackTrace();                
                    Temes.this.runOnUiThread(new Runnable() {
                          public void run() {                         
                Toast.makeText(getApplicationContext(),e.toString(),Toast.LENGTH_LONG).show();                                  
                          }
                     });
                }
于 2013-02-06T06:14:24.680 に答える