2014-07-16 93 views
1

大家好日子。如何处理url.get()失败

我一直在开发一个应用程序,将数据从网站上的某些表中删除并显示在屏幕上。一切都很好,但我想在没有数据连接的情况下使用冗余。例如一个对话框或烤面包简单地说“没有数据连接”。

如何以及在哪里可以放这个?下面是我的Asynctask,其中jsoup获取数据,所以我假设我可以在这里放些东西?

目前应用程序崩溃,如果没有数据连接到网站。

//AsyncTask 
private class Fixtures extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     mProgressDialog = new ProgressDialog(MainActivity.this); 
     mProgressDialog.setTitle("Fixtures"); 
     mProgressDialog.setMessage("Loading..."); 
     mProgressDialog.setIndeterminate(false); 
     mProgressDialog.show(); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     try { 
      doc = Jsoup.connect(url).get(); 
      } catch (IOException e) { 

      } 

      tables = doc.select("table"); 

      tablesSize = tables.size(); 

      for (int t = 0; t < (tables.size() - 1); t++){ 
       table = tables.get(t); 
       rows = table.select("tr"); 
       date = doc.select("h2").get(t); 
      } 
     return null; 
    } 

任何帮助或其他答案的方向将非常感激。

回答

0

这应该做到这一点,如果你的任务嵌套在一个片段中,你可以将此方法引入外部类。否则找到一种方法来传递应用程序上下文,而不是使用getActivity。这应该是相对线程安全的。

private void buildFailedDialog(){ 

    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity()); 

    dialogBuilder.setMessage("Could Not Connect to Site!"); 
    dialogBuilder.setTitle("Connection Failed"); 

    dialogBuilder.setNegativeButton("OK", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      dialog.cancel(); 
     } 
    }); 
    final AlertDialog dialog = dialogBuilder.create(); 
    dialog.show(); 
} 

它可能只是为了更好地展现敬酒,这样你就不会从活动

Toast.makeText(getActivity(), "Failed to Connect to Site" ,Toast.LENGTH_LONG).show(); 
+0

感谢加布扰乱用户。我想烤面包就足够了,但是我会在哪里放?如果我把它放在应用程序中,应用程序仍然崩溃。我需要对文档进行空检查吗?我只是不希望应用程序崩溃,如果它无法访问该网站。 – Harg

+0

对不起,我错过了一些东西。这是postExecute崩溃。修正并正确实施敬酒。 – Harg