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;
}