Android 应用程序打开前没有internet连接时应用程序崩溃

Android 应用程序打开前没有internet连接时应用程序崩溃,android,Android,当我打开我的应用程序时,它会在祝酒词显示之前崩溃。我不知道该如何使用我的方法isOnline() public class Url_cont extends AsyncTask<String, Object, ArrayList<Movie>> { final String log_tag = Url_cont.class.getSimpleName(); ArrayList<Movie> resultObj = new ArrayList&

当我打开我的应用程序时,它会在祝酒词显示之前崩溃。我不知道该如何使用我的方法
isOnline()

public class Url_cont extends AsyncTask<String, Object, ArrayList<Movie>> {

    final String log_tag = Url_cont.class.getSimpleName();
    ArrayList<Movie> resultObj = new ArrayList<>();
    ICallBack myCallBack;
    private Context mContext;
    ProgressDialog progressDialog;

    public Url_cont(ICallBack NetworkCallBack, Context mContext) {
        myCallBack = NetworkCallBack;
        this.mContext = mContext;
    }

    public boolean isOnline() {
        ConnectivityManager cm = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo netinfo = cm.getActiveNetworkInfo();
        return netinfo != null && netinfo.isConnectedOrConnecting();
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        if (isOnline() != false) {
            progressDialog = new ProgressDialog(mContext);
            progressDialog.setMessage("Please wait...");
            progressDialog.show();
        } else {
            Context context = mContext;
            CharSequence text = "check your internet connection!";
            int duration = Toast.LENGTH_LONG;

            Toast toast = Toast.makeText(context, text, duration);
            toast.show();
        }
    }

    private ArrayList<Movie> formatMyJson(String jsonstr) throws JSONException {
        JSONObject object = new JSONObject(jsonstr);
        JSONArray mylist = object.getJSONArray("results");

        Movie mMovie;

        for (int i = 0; i < mylist.length(); i++) {
            mMovie = new Movie();
            JSONObject mynewob = mylist.getJSONObject(i);
            mMovie.setVote(mynewob.getString("vote_average"));
            mMovie.setTitle(mynewob.getString("original_title"));
            mMovie.setPoster_image(mynewob.getString("poster_path"));
            mMovie.setOverview(mynewob.getString("overview"));
            mMovie.setDate(mynewob.getString("release_date"));
            resultObj.add(mMovie);
        }
        return resultObj;
    }

    @Override
    protected ArrayList<Movie> doInBackground(String... params) {
        HttpURLConnection httpURLConnection = null;
        BufferedReader reader = null;
        String jsonstr = null;
        try {
            Uri builtUri = Uri.parse(params[0]).buildUpon().appendQueryParameter("api_key", BuildConfig.APIKRY).build();
            Log.i("url_site", builtUri.toString());
            URL uRl = new URL(builtUri.toString());
            httpURLConnection = (HttpURLConnection) uRl.openConnection();
            httpURLConnection.connect();

            int responseCode = httpURLConnection.getResponseCode();
            Log.i("ResponseCode", String.valueOf(responseCode));
            BufferedReader in = new BufferedReader(
                    new InputStreamReader(httpURLConnection.getInputStream()));
            String inputLine;
            StringBuffer response = new StringBuffer();

            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();

            jsonstr = response.toString();

        } catch (Exception e) {
            Log.e(log_tag, "this url has a problem 111");
        } finally {
            if (httpURLConnection != null) {
                httpURLConnection.disconnect();
            }
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        try {
            return formatMyJson(jsonstr);
        } catch (Exception e) {
            Log.i(log_tag, "not thing work at alllllll");
        }
        return null;
    }

    @Override
    protected void onPostExecute(ArrayList<Movie> strings) {
        progressDialog.dismiss();
        myCallBack.onPostExcuteCallBack(strings);
    }

}
这是我的舱单

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.massive.movieapp">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission  android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application
    android:allowBackup="true"
    android:icon="@drawable/videoplayer"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

</manifest>

似乎,您忘记在
AndroidManifest.xml
中设置权限
android.permission.ACCESS\u NETWORK\u STATE
。你应该加上

<uses-permission  android:name="android.permission.ACCESS_NETWORK_STATE"/>


行。

将这一行添加到您的
AndroidManifest.xml

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.new">

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
        android:allowBackup="false"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:largeHeap="true"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        tools:replace="android:icon">

        <!-- Your Activities here -->
    </application>

</manifest>

最后我解决了这个问题

    private void CallNetwork(String baseUrl) {
    if (NetworkUtils.isNetworkAvailable(getActivity())) {
        new Url_cont(this, getActivity()).execute(baseUrl);
    } else {
        CharSequence text = "check your internet connection!";
        int duration = Toast.LENGTH_LONG;
        Toast toast = Toast.makeText(getActivity(), text, duration);
        toast.show();
    }



 public static boolean isNetworkAvailable(Context mContext) {
    ConnectivityManager mConnectivityManager = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
    if (mNetworkInfo != null && mNetworkInfo.isConnected()) {
        return true;
    }
    return false;
}

我在代码中做任何事情之前都会进行检查,因此感谢您的帮助

共享您的清单文件,您的目标sdk是什么?您的应用可能被排除在默认情况下可以访问internet的应用之外。例如,一些华为设备就是这样做的……或者,您是否做了更改,忘记了做清洁项目?从设备卸载你的应用程序,清理项目并重新安装。我卸载并清理它,然后安装agian,它仍然可以运行crashing@KeroFawzy你在用什么设备?
    private void CallNetwork(String baseUrl) {
    if (NetworkUtils.isNetworkAvailable(getActivity())) {
        new Url_cont(this, getActivity()).execute(baseUrl);
    } else {
        CharSequence text = "check your internet connection!";
        int duration = Toast.LENGTH_LONG;
        Toast toast = Toast.makeText(getActivity(), text, duration);
        toast.show();
    }



 public static boolean isNetworkAvailable(Context mContext) {
    ConnectivityManager mConnectivityManager = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
    if (mNetworkInfo != null && mNetworkInfo.isConnected()) {
        return true;
    }
    return false;
}