Android:应用要在启动时检查互联网连接,但会崩溃

瓦桑斯

在我的应用程序中,我从Xml加载数据并成功加载,但是当我关闭Internet连接时,它只是说Appname崩溃。

我签入Stackoverflow时都在使用Sugeststing,ConnectivityManager但即使我的应用程序崩溃了,我也不知道为什么会发生,请给我一些想法和Sugesstion来摆脱它

我需要的是,当我的应用程序启动时,它想检查Internet连接(如果可用),我的列表视图将显示其他内容,并显示“连接到互联网并重试”。

这是我的代码:

public class MainActivity extends AppCompatActivity {
    // All static variables
    static final String URL1 = "http://my_server.com/tamil";
    // XML node keys
    static final String KEY_ITEM = "item"; // parent node
    static final String KEY_TITLE = "title";
    static final String KEY_LINK = "link";
    URL url;
    URLConnection urlConnection;
    //Context context;
    ListView listview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        isNetworkAvailable(this);

        listview = (ListView) findViewById(R.id.list);

        new GetData().execute();


    }
    private boolean isNetworkAvailable(Context context) {
        ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivity != null) {
            NetworkInfo[] info = connectivity.getAllNetworkInfo();
            if (info != null) {
                for (int i = 0; i < info.length; i++) {
                    Log.w("INTERNET:",String.valueOf(i));
                    if (info[i].getState() == NetworkInfo.State.CONNECTED) {
                        Log.w("INTERNET:", "connected!");
                        return true;
                    }
                }
            }
        }
        return false;
    }

    class GetData extends AsyncTask<String, String, String> {
        String xml;

        @Override
        protected String doInBackground(String... params) {

            try {
                url = new URL(URL1);

                urlConnection = (HttpURLConnection) url.openConnection();

                InputStream in = urlConnection.getInputStream();

                InputStreamReader isw = new InputStreamReader(in);

                BufferedReader br = new BufferedReader(isw);
                StringBuilder sb = new StringBuilder();
                String line;
                while ((line = br.readLine()) != null) {
                    sb.append(line + "\n");
                }
                br.close();

                xml = sb.toString();
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }


            return xml;
        }


        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();
            Document doc = null;
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            try {

                DocumentBuilder db = dbf.newDocumentBuilder();

                InputSource is = new InputSource();
                is.setCharacterStream(new StringReader(xml));
                doc = db.parse(is);


                NodeList nl = doc.getElementsByTagName(KEY_ITEM);
                for (int i = 0; i < nl.getLength(); i++) {
                    HashMap<String, String> map = new HashMap<String, String>();
                    Element e = (Element) nl.item(i);
                    Log.e("TAg1", getValue(e, KEY_TITLE));
                    //Log.e("TAg2", getValue(e, KEY_LINK));
                    map.put(KEY_TITLE, getValue(e, KEY_TITLE));
                    map.put(KEY_LINK, getValue(e, KEY_LINK));
                    menuItems.add(map);
                }


            } catch (ParserConfigurationException e) {
                Log.e("Error: ", e.getMessage());
            } catch (SAXException e) {
                Log.e("Error: ", e.getMessage());
            } catch (IOException e) {
                Log.e("Error: ", e.getMessage());

            }

            ListAdapter adapter = new SimpleAdapter(getApplicationContext(), menuItems,
                    R.layout.list_item,
                    new String[]{KEY_TITLE, KEY_LINK}, new int[]{
                    R.id.name});
            listview.setAdapter(adapter);
            listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                }
            });

        }

        public final String getElementValue(Node elem) {
            Node child;
            if (elem != null) {
                if (elem.hasChildNodes()) {
                    for (child = elem.getFirstChild(); child != null; child = child.getNextSibling()) {
                        if (child.getNodeType() == Node.TEXT_NODE) {
                            return child.getNodeValue();
                        }
                    }
                }
            }
            return "";
        }

        public String getValue(Element item, String str) {
            NodeList n = item.getElementsByTagName(str);
            return this.getElementValue(n.item(0));
        }


    }

Logcat:

c/ussrs/a/studio1.3/config/options/ java.lang.NullPointerException
            at java.io.StringReader.<init>(StringReader.java:47)
            at com.example.a.ro.MainActivity$GetData.onPostExecute(MainActivity.java:132)
            at com.example.a.ro.MainActivity$GetData.onPostExecute(MainActivity.java:86)
            at android.os.AsyncTask.finish(AsyncTask.java:632)
            at android.os.AsyncTask.access$600(AsyncTask.java:177)
            at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:146)
            at android.app.ActivityThread.main(ActivityThread.java:5641)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1288)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1104)
            at dalvik.system.NativeStart.main(Native Method)
拉维

是的,因为当您关闭Internet连接时,它将引发异常,因此它将移至catch块,最后返回xml变量,该变量为null
这就是您获取null指针异常的原因。

使用互联网连接条件:

if(isNetworkAvailable(this))
    new GetData().execute();
else
    //no internet connection, show your message here

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android:应用要在启动时检查互联网连接,但会崩溃

来自分类Dev

互联网连接关闭时,Android应用崩溃

来自分类Dev

没有互联网连接时,应用崩溃

来自分类Dev

没有互联网连接时,应用崩溃

来自分类Dev

没有互联网连接时,应用崩溃

来自分类Dev

没有互联网连接时,应用崩溃

来自分类Dev

没有互联网连接时,应用崩溃

来自分类Dev

没有互联网连接时android线程崩溃的应用程序

来自分类Dev

在Android应用中检查互联网连接

来自分类Dev

按下按钮时android检查互联网连接

来自分类Dev

Android:检查互联网连接

来自分类Dev

Android:检查互联网连接

来自分类Dev

检查互联网连接Android的超时

来自分类Dev

互联网连接打开时打开Android应用,否则不显示互联网连接消息

来自分类Dev

没有持续的互联网连接时,应用程序崩溃

来自分类Dev

互联网连接上的android崩溃关闭

来自分类Dev

没有互联网连接,Android Volley崩溃

来自分类Dev

在启动wifi时连接到互联网

来自分类Dev

用户交互时检查互联网连接

来自分类Dev

安装了Docker,然后在重新启动时失去了互联网连接![Ubuntu 16.04.2 LTS]

来自分类Dev

在Android WebView(Cordova)中检查互联网连接

来自分类Dev

Android:检查网络和真实的互联网连接

来自分类Dev

Android-在开始意图之前检查互联网连接

来自分类Dev

Android MVP,可检查互联网连接

来自分类Dev

Android检查互联网连接,如果离线则重试或退出

来自分类Dev

在android编程上检查互联网连接

来自分类Dev

没有互联网连接时,Android应用程序强制终止

来自分类Dev

没有互联网连接时,Android应用程序强制终止

来自分类Dev

Android应用无法连接到互联网

Related 相关文章

热门标签

归档