Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 处理internet连接丢失_Java_Android_Android Broadcastreceiver - Fatal编程技术网

Java 处理internet连接丢失

Java 处理internet连接丢失,java,android,android-broadcastreceiver,Java,Android,Android Broadcastreceiver,我设计了一个应用程序,在发出http请求之前检查互联网连接,它工作得很好,但问题是当有互联网连接时,我切换移动数据,或者在搜索数据期间强制失去互联网连接,应用程序崩溃。 如果在获取数据时互联网连接丢失,有没有办法让应用程序报告没有互联网连接?我检查并尝试使用广播接收器,但在android清单中,我们要声明意向过滤器,我找不到这些 我还使用加载程序而不是异步任务来执行网络请求 换句话说 我只是需要一个处理问题的方法 响应验证 应用程序会检查设备是否连接到互联网,并做出相应的响应。验证请求的结果,以

我设计了一个应用程序,在发出http请求之前检查互联网连接,它工作得很好,但问题是当有互联网连接时,我切换移动数据,或者在搜索数据期间强制失去互联网连接,应用程序崩溃。 如果在获取数据时互联网连接丢失,有没有办法让应用程序报告没有互联网连接?我检查并尝试使用广播接收器,但在android清单中,我们要声明意向过滤器,我找不到这些 我还使用加载程序而不是异步任务来执行网络请求 换句话说

我只是需要一个处理问题的方法 响应验证

应用程序会检查设备是否连接到互联网,并做出相应的响应。验证请求的结果,以说明服务器响应错误或缺少服务器响应,这可能是由于在获取数据期间丢失internet连接所致

enter code here   
//这是获取数据的代码

公共类Fesh{

public static ArrayList<word> fesh (){


    // Create an empty ArrayList that we can start adding earthquakes to
    ArrayList<word> words = new ArrayList<>();

    // Try to parse the SAMPLE_JSON_RESPONSE. If there's a problem with the way the JSON
    // is formatted, a JSONException exception object will be thrown.
    // Catch the exception so the app doesn't crash, and print the error message to the logs.

    final String RESPONSE = feshjson();
    try {

        // TODO: Parse the response given by the SAMPLE_JSON_RESPONSE string and
        // build up a list of Earthquake objects with the corresponding data.

        JSONObject rootobject = new JSONObject(RESPONSE);

        JSONArray rootarray = rootobject.getJSONArray("features");
        for(int i = 0;i<rootarray.length();i++){

            JSONObject current = rootarray.getJSONObject(i);
            JSONObject properties = current.getJSONObject("properties");
            double magnitude = properties.getDouble("mag");
            String place = properties.getString("place");
            long date = properties.getLong("time");
            String url = properties.getString("url");

            word earthquake = new word(magnitude,place,date,url);
            words.add(earthquake);

        }



    } catch (JSONException e) {
        // If an error is thrown when executing any of the above statements in the "try" block,
        // catch the exception here, so the app doesn't crash. Print a log message
        // with the message from the exception.
        Log.e("QueryUtils", "Problem parsing the earthquake JSON results", e);
    }

    // Return the list of earthquakes
    // getword(words);
    return words;


}




public static String feshjson(){

    HttpURLConnection connection = null;
    InputStream stream = null;
    BufferedReader reader = null;

    try {
        URL url = new URL("https://earthquake.usgs.gov/fdsnws/event/1/query?format=geojson&starttime=2012-01-01&endtime=2012-12-01&minmagnitude=6");
        connection = (HttpURLConnection) url.openConnection();
        connection.connect();
        stream = connection.getInputStream();
        reader = new BufferedReader(new InputStreamReader(stream));
        String line = "";
        StringBuffer buffer = new StringBuffer();
        while ((line = reader.readLine()) != null) {
            buffer.append(line);
        }
        return  buffer.toString();
    } catch (MalformedURLException e) {
        e.printStackTrace();
        new MainActivity().Nonetwork();
    }
    catch (ConnectException ex)
    {
        ex.printStackTrace();
         new MainActivity().Nonetwork();
    }

    catch (SocketException ex)
    {
        ex.printStackTrace();
        new MainActivity().Nonetwork();
    }
    catch (SocketTimeoutException ex)
    {
        ex.printStackTrace();
        new MainActivity().Nonetwork();
    }
    catch(NullPointerException ex)
    {
        ex.printStackTrace();
        new MainActivity().Nonetwork();
    }
    catch (Exception e)
    {

        e.printStackTrace();

        new MainActivity().Nonetwork();
    }

     finally {
        if (connection != null) {
            connection.disconnect();
        }
        try {
            if (stream != null) {
                stream.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
            new MainActivity().Nonetwork();
        }
    }
    return null;



}
}``

//这就是我的日志
05-25 23:50:46.029 22283-22308/? E/AndroidRuntime:致命异常:AsyncTask#1
进程:com.example.android.myquake,PID:22283
java.lang.RuntimeException:执行doInBackground()时出错
在android.os.AsyncTask$3.done(AsyncTask.java:300)
位于java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
位于java.util.concurrent.FutureTask.setException(FutureTask.java:222)
位于java.util.concurrent.FutureTask.run(FutureTask.java:242)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
运行(Thread.java:818)
原因:java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序
android.os.Handler.(Handler.java:200)
位于android.os.Handler.(Handler.java:114)
在android.app.Activity。(Activity.java:793)
位于android.support.v4.app.BaseFragmentActivityGingerbread。(BaseFragmentActivityGingerbread.java:34)
位于android.support.v4.app.BaseFragmentActivityHoneycomb。(BaseFragmentActivityHoneycomb.java:29)
在android.support.v4.app.BaseFragmentActivityJB。(BaseFragmentActivityJB.java:29)
在android.support.v4.app.FragmentActivity上。(FragmentActivity.java:77)
位于android.support.v7.app.AppCompatActivity。(AppCompatActivity.java:64)
位于com.example.android.myquake.MainActivity。(MainActivity.java:0)
位于com.example.android.myquake.Fesh.feshjson(Fesh.java:129)
位于com.example.android.myquake.Fesh.Fesh(Fesh.java:39)
在com.example.android.myquake.Arrayloader.loadInBackground(Arrayloader.java:28)上
在com.example.android.myquake.Arrayloader.loadInBackground(Arrayloader.java:18)上
位于android.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:312)
在android.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:69)
位于android.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:57)
在android.os.AsyncTask$2.call(AsyncTask.java:288)
位于java.util.concurrent.FutureTask.run(FutureTask.java:237)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
运行(Thread.java:818)

您可以将广播的操作声明为:

   <receiver android:name=".Receiver" >
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
        </intent-filter>
    </receiver>

在广播接收器内部,当连接发生变化时,将调用其onReceive


根据更改,您可以显示错误或继续获取数据。

处理网络调用上的异常。您是否使用改装?我看不到我看不到您确定已将此操作与以下语法一起使用吗?
//this is what my Log looks like
05-25 23:50:46.029 22283-22308/? E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
                                               Process: com.example.android.myquake, PID: 22283
                                               java.lang.RuntimeException: An error occured while executing doInBackground()
                                                   at android.os.AsyncTask$3.done(AsyncTask.java:300)
                                                   at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
                                                   at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
                                                   at java.util.concurrent.FutureTask.run(FutureTask.java:242)
                                                   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
                                                   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
                                                   at java.lang.Thread.run(Thread.java:818)
                                                Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
                                                   at android.os.Handler.<init>(Handler.java:200)
                                                   at android.os.Handler.<init>(Handler.java:114)
                                                   at android.app.Activity.<init>(Activity.java:793)
                                                   at android.support.v4.app.BaseFragmentActivityGingerbread.<init>(BaseFragmentActivityGingerbread.java:34)
                                                   at android.support.v4.app.BaseFragmentActivityHoneycomb.<init>(BaseFragmentActivityHoneycomb.java:29)
                                                   at android.support.v4.app.BaseFragmentActivityJB.<init>(BaseFragmentActivityJB.java:29)
                                                   at android.support.v4.app.FragmentActivity.<init>(FragmentActivity.java:77)
                                                   at android.support.v7.app.AppCompatActivity.<init>(AppCompatActivity.java:64)
                                                   at com.example.android.myquake.MainActivity.<init>(MainActivity.java:0)
                                                   at com.example.android.myquake.Fesh.feshjson(Fesh.java:129)
                                                   at com.example.android.myquake.Fesh.fesh(Fesh.java:39)
                                                   at com.example.android.myquake.Arrayloader.loadInBackground(Arrayloader.java:28)
                                                   at com.example.android.myquake.Arrayloader.loadInBackground(Arrayloader.java:18)
                                                   at android.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:312)
                                                   at android.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:69)
                                                   at android.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:57)
                                                   at android.os.AsyncTask$2.call(AsyncTask.java:288)
                                                   at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
                                                   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
                                                   at java.lang.Thread.run(Thread.java:818) 
   <receiver android:name=".Receiver" >
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
        </intent-filter>
    </receiver>