我的Android应用程序网络检测方法有语义错误和后退方法显示语法,而它之前很好吗?

时间:2017-01-07 15:57:41

标签: android android-studio

我已经使用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) 

1 个答案:

答案 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();
    }
}

谢谢。