Java 访问服务器时如何捕获错误

Java 访问服务器时如何捕获错误,java,android,android-asynctask,Java,Android,Android Asynctask,我创建我的util以从服务器请求数据: public class PushServer { public static ArrayList<DataBean> getAllData() { ArrayList<DataBean> data = new ArrayList<DataBean>(); String uriJson = "http://api.mydomain.com/news.html";

我创建我的util以从服务器请求数据:

public class PushServer {
      public static ArrayList<DataBean> getAllData() {
        ArrayList<DataBean> data = new ArrayList<DataBean>();

        String uriJson = "http://api.mydomain.com/news.html";
        String resp = Utils.getResponseText1(uriJson);

        try {
            JSONObject json = new JSONObject(resp);
            JSONArray jArray = json.getJSONArray("items");

            for (int i=0; i<jArray.length(); i++) {
                JSONObject jData = jArray.getJSONObject(i);

                DataBean bean = new DataBean();             
                bean.setMenu_ID(jData.getString("ID"));
                bean.setIsDisplay(jData.getString("First_Data"));
                bean.setCategoryName(jData.getString("Second_Data"));

                data.add(bean);
            }
        }
        catch(Exception e) {
            e.printStackTrace();
        }
        return data;
    }
 }
我没有收到错误响应。当我的连接断开时,我的屏幕是空白的。。。
如果我的android应用程序无法访问URL API,例如出现问题的连接等,我如何做出响应。

您的代码中存在一些问题。大多数都不是那么重要,但从概念上讲,有一个重要的问题:您不应该使用asynctask在android上访问网络

解释了异步任务的缺陷

此外,在以正确的方式捕获异常时,异步任务更糟糕:没有内置的错误处理功能。您仍然可以实现某种手动错误处理(保留异常,并通过getter使其可访问,然后询问在异步任务完成时是否收到任何异常)

但是,越来越多的lib在网络方面提供了更有趣的替代方案,并且大多数lib都为异步异常提供了一个很好的错误处理模型。看看我提到的线程,它是可选的。如果您不喜欢它,它还会列出所有其他众所周知的替代方案。

您可以使用该库来简化此过程并提供错误处理:

final ArrayList<DataBean> data = new ArrayList<DataBean>();
$.ajax(new AjaxOptions().url("http://api.mydomain.com/news.html").success(new Function() {
    @Override
    public void invoke($ d, Object... args) {
        JSONObject json = (JSONObject) args[0];
         JSONArray jArray = json.getJSONArray("items");
         for (int i=0; i<jArray.length(); i++) {
             JSONObject jData = jArray.getJSONObject(i);
              DataBean bean = new DataBean();             
              bean.setMenu_ID(jData.getString("ID"));
              bean.setIsDisplay(jData.getString("First_Data"));
              bean.setCategoryName(jData.getString("Second_Data"));
              data.add(bean);

              //hear you may want to make a call to handle the "next step" for how to process this bean.
         }
     }
}).error(new Function() {
    @Override
    public void invoke($ d, Object... args) {
        AjaxError error = (AjaxError) args[0];
        //print the error status code and reason to logcat
        Log.e("Ajax", "Error " + error.status + ": " + error.reason);
    }
}));
final ArrayList data=new ArrayList();
$.ajax(新的AjaxOptions().url(“http://api.mydomain.com/news.html)。成功(新功能(){
@凌驾
公共void调用($d,对象…args){
JSONObject json=(JSONObject)参数[0];
JSONArray jArray=json.getJSONArray(“items”);

对于(int i=0;iy不使用进度对话框?@MT8我使用ProgressBar pgBar.setVisibility(View.VISIBLE)在
onPreExecute
中,如果您想在调用函数时捕获异常,请不要吞下所有异常。它会显示吗?我认为当显示进度条时,黑屏不会显示appers@MT8我的ProgressBar显示了…但当我放入
pgBar.setVisibility(View.GONE)时,它消失了
onPostExecute
有趣的解释中…我将查看并尝试此库
final ArrayList<DataBean> data = new ArrayList<DataBean>();
$.ajax(new AjaxOptions().url("http://api.mydomain.com/news.html").success(new Function() {
    @Override
    public void invoke($ d, Object... args) {
        JSONObject json = (JSONObject) args[0];
         JSONArray jArray = json.getJSONArray("items");
         for (int i=0; i<jArray.length(); i++) {
             JSONObject jData = jArray.getJSONObject(i);
              DataBean bean = new DataBean();             
              bean.setMenu_ID(jData.getString("ID"));
              bean.setIsDisplay(jData.getString("First_Data"));
              bean.setCategoryName(jData.getString("Second_Data"));
              data.add(bean);

              //hear you may want to make a call to handle the "next step" for how to process this bean.
         }
     }
}).error(new Function() {
    @Override
    public void invoke($ d, Object... args) {
        AjaxError error = (AjaxError) args[0];
        //print the error status code and reason to logcat
        Log.e("Ajax", "Error " + error.status + ": " + error.reason);
    }
}));