我已经使用webview构建了一个简单的应用程序并尝试实现网络检测方法。已经通过添加
编辑了manifest.xml<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
问题分为两部分;一个我的应用程序有一个背景方法,它在现在的位置工作正常但在添加网络检测功能后,它已开始显示语法错误。
我的MainActivity.Java的完整代码:
package pk.shippingexpress.shippingexpress;
import android.app.ProgressDialog;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
import com.google.android.gms.appindexing.Action;
import com.google.android.gms.appindexing.AppIndex;
import com.google.android.gms.appindexing.Thing;
import com.google.android.gms.common.api.GoogleApiClient;
public class MainActivity extends AppCompatActivity {
ProgressDialog prDialog;
public WebView view;
NetworkDetect myNetworkstate;
/**
* ATTENTION: This was auto-generated to implement the App Indexing API.
* See https://g.co/AppIndexing/AndroidStudio for more information.
*/
private GoogleApiClient client;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myNetworkstate = new NetworkDetect(this);
if (myNetworkstate.isConnected()) {
String url = "http://shippingexpress.pk";
view = (WebView) this.findViewById(R.id.express);
view.getSettings().setJavaScriptEnabled(true);
view.loadUrl(url);
view.setWebViewClient(new WebViewClient());
view.getSettings().setCacheMode(2);
view.getSettings().setDomStorageEnabled(true);
view.clearHistory();
view.clearCache(true);
view.getSettings().setUseWideViewPort(false);
view.getSettings().setLoadWithOverviewMode(false);
view.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
// ATTENTION: This was auto-generated to implement the App Indexing API.
// See https://g.co/AppIndexing/AndroidStudio for more information.
client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
ActionBar myicon = getSupportActionBar();
myicon.setDisplayShowHomeEnabled(true);
myicon.setIcon(R.mipmap.ic_launcher);
public void onBackPressed(){
if (view.canGoBack()) {
view.goBack();
} else
{
//otherwise exit my app
super.onBackPressed();
}
}
} else {
Toast.makeText(MainActivity.this, "INTERNET NOT AVAILABLE !",Toast.LENGTH_SHORT).show();}
}
/**
* ATTENTION: This was auto-generated to implement the App Indexing API.
* See https://g.co/AppIndexing/AndroidStudio for more information.
*/
public Action getIndexApiAction() {
Thing object = new Thing.Builder()
.setName("Main Page") // TODO: Define a title for the content shown.
// TODO: Make sure this auto-generated URL is correct.
.setUrl(Uri.parse("http://[ENTER-YOUR-URL-HERE]"))
.build();
return new Action.Builder(Action.TYPE_VIEW)
.setObject(object)
.setActionStatus(Action.STATUS_TYPE_COMPLETED)
.build();
}
@Override
public void onStart() {
super.onStart();
// ATTENTION: This was auto-generated to implement the App Indexing API.
// See https://g.co/AppIndexing/AndroidStudio for more information.
client.connect();
AppIndex.AppIndexApi.start(client, getIndexApiAction());
}
@Override
public void onStop() {
super.onStop();
// ATTENTION: This was auto-generated to implement the App Indexing API.
// See https://g.co/AppIndexing/AndroidStudio for more information.
AppIndex.AppIndexApi.end(client, getIndexApiAction());
client.disconnect();
}
}
第二部分;我创建了一个NetworkDetect.java类来检测网络状态,并在我的应用程序中使用if语句,如您在MainActivity.java中所见。不幸的是,我的程序在一个互联网可用的两个条件下运行正常,其次是backpress方法,因为它有语法错误。
但是当互联网连接不可用时,我希望我的应用程序在打开时显示错误,你可以在其他部分看到,而不是显示“不幸的是,AppName已停止工作”并退出
NetworkDetect.java的完整代码:
package pk.shippingexpress.shippingexpress;
import android.app.Service;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
public class NetworkDetect{
Context context;
public NetworkDetect(Context context) {
this.context = context;
}
public boolean isConnected(){
ConnectivityManager connectivity = (ConnectivityManager)
context.getSystemService(Service.CONNECTIVITY_SERVICE);
if (connectivity != null) {
NetworkInfo info = connectivity.getActiveNetworkInfo();
if (info != null) {
if (info.getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
return false;
}
}
更新:我已经尝试了评论中提出的解决方案。第一部分已经解决,但第二部分仍需要详细阐述。如果没有互联网可用的应用程序崩溃而非显示错误,您可能会在MainActivity.java的其他部分中看到。
我在崩溃时在Android Studio中收到的错误如下:
/AndroidRuntime: FATAL EXCEPTION: main
Process: pk.shippingexpress.shippingexpress, PID: 1660
java.lang.RuntimeException: Unable to start activity ComponentInfo{pk.shippingexpress.shippingexpress/pk.shippingexpress.shippingexpress.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
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:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at pk.shippingexpress.shippingexpress.MainActivity.onStart(MainActivity.java:111)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1171)
at android.app.Activity.performStart(Activity.java:5241)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2168)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
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:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:0)
我自己回答了我的问题,如果有人处于同样的情况,可以在这里发帖以获得他人的指导。
你可能会阅读我的MainActivity.java有一些额外的代码行是由android studio自动生成的,这导致了问题(你可能会阅读整个问题)没有大括号问题而且我的代码没有错误我只是删除后自动生成的行,现在我的应用程序正在以所需的方式工作。
@Override
public void onStart() {
super.onStart();
// ATTENTION: This was auto-generated to implement the App Indexing API.
// See https://g.co/AppIndexing/AndroidStudio for more information.
client.connect();
AppIndex.AppIndexApi.start(client, getIndexApiAction());
}
@Override
public void onStop() {
super.onStop();
// ATTENTION: This was auto-generated to implement the App Indexing API.
// See https://g.co/AppIndexing/AndroidStudio for more information.
AppIndex.AppIndexApi.end(client, getIndexApiAction());
client.disconnect();
}
}
谢谢。