2017-05-16 2 views
0

J'ai développé l'application avec menu de navigation coulissant. il ne contient aucune erreur dans le projet. J'ai réussi à construire apk signé, mais après l'avoir installé sur le téléphone, il montre "malheureusement Appname s'est arrêté" avant même l'ouverture de l'application.L'application développée avec le menu de navigation, il montre "malheureusement le nom de l'application a arrêté" même avant l'ouverture de l'application

Manifest:

<?xml version="1.1" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.wAashiqeRasool.HamareNabi" > 

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="android.permission.READ_PROFILE" /> 
<uses-permission android:name="android.permission.READ_CONTACTS" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> 
android:hardwareAccelerated="true" 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="com.wAashiqeRasool.HamareNabi.MainActivity" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme.NoActionBar" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

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

</manifest> 

MainActivity:

package com.wAashiqeRasool.HamareNabi; 

import android.app.ProgressDialog; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.net.Uri; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.view.KeyEvent; 
import android.view.View; 
import android.support.design.widget.NavigationView; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.webkit.WebSettings; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 

public class MainActivity extends AppCompatActivity 
    implements NavigationView.OnNavigationItemSelectedListener { 

//initializing WebView 
private WebView mwebView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    FloatingActionButton fab = (FloatingActionButton) 
    findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Replace with your own action", 
Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
      this, drawer, toolbar, R.string.navigation_drawer_open, 
R.string.navigation_drawer_close); 
    drawer.setDrawerListener(toggle); 
    toggle.syncState(); 

    NavigationView navigationView = (NavigationView) 
findViewById(R.id.nav_view); 
    navigationView.setNavigationItemSelectedListener(this); 

    //WebView 
    mwebView = (WebView) findViewById(R.id.myWebView); 
    WebSettings webSettings = mwebView.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 
    //improve webView performance 

mwebView.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH); 

mwebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); 
    mwebView.getSettings().setAppCacheEnabled(true); 
    mwebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); 
    webSettings.setDomStorageEnabled(true); 

webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS); 
    webSettings.setUseWideViewPort(true); 
    webSettings.setSavePassword(true); 
    webSettings.setSaveFormData(true); 
    webSettings.setEnableSmoothTransition(true); 


    mwebView.loadUrl("www.hamarenabi.in?m=1"); 
    //force links open in webview only 
    mwebView.setWebViewClient(new MyWebviewClient()); 

} 

@Override 
public void onBackPressed() { 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } else { 
     super.onBackPressed(); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

@SuppressWarnings("StatementWithEmptyBody") 
@Override 
public boolean onNavigationItemSelected(MenuItem item) { 
    // Handle navigation view item clicks here. 
    int id = item.getItemId(); 

    if (id == R.id.nav_us) { 
     // Handle the camera action 
     mwebView.loadUrl("http://www.hamarenabi.in/search/label/Asma-E- 
Husna?m=1"); 
    } else if (id == R.id.nav_world) { 
     mwebView.loadUrl("http://www.hamarenabi.in/p/nikah-in-islam- 
assalamu-alaikum-wa.html?m=1"); 
    } else if (id == R.id.nav_tech) { 
     mwebView.loadUrl("http://www.hamarenabi.in/search/label/aqaid-e- 
ahle%20sunnat?m=1"); 
    } else if (id == R.id.nav_sports) { 
     mwebView.loadUrl("http://www.hamarenabi.in/p/ramzan.html?m=1"); 
    } else if (id == R.id.nav_share) { 
     mwebView.loadUrl("http://www.hamarenabi.in/p/contact.html?m=1"); 
    } else if (id == R.id.nav_send) { 
     mwebView.loadUrl("http://www.hamarenabi.in/p/contact-us.html?m=1"); 
    } 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawer.closeDrawer(GravityCompat.START); 
    return true; 
} 

private class MyWebviewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (Uri.parse(url).getHost().equals("www.hamarenabi.in?m=1")) { 
      //open url contents in webview 
      return false; 
     } else { 
      //here open external links in external browser or app 
      Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
      startActivity(intent); 
      return true; 
     } 

    } 
    //ProgressDialogue 
    ProgressDialog pd = null; 

    @Override 
    public void onPageStarted(WebView view, String url, Bitmap favicon) { 
     pd=new ProgressDialog(MainActivity.this); 
     pd.setTitle("Please Wait.."); 
     pd.setMessage("Website is Loading.."); 
     pd.show(); 
     super.onPageStarted(view, url, favicon); 
    } 

    @Override 
    public void onPageFinished(WebView view, String url) { 
     pd.dismiss(); 
     super.onPageFinished(view, url); 
    } 
} 
//goto previous page when pressing back button 

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (event.getAction() == KeyEvent.ACTION_DOWN) { 
     switch (keyCode) { 
      case KeyEvent.KEYCODE_BACK: 
       if (mwebView.canGoBack()) { 
        mwebView.goBack(); 
       } else { 
        finish(); 
       } 
       return true; 
     } 
    } 
    return super.onKeyDown(keyCode, event); 
} 
} 

build.gradle (App modulaire):

apply plugin: 'com.android.application' 

android { 
compileSdkVersion 23 
buildToolsVersion '25.0.0' 

defaultConfig { 
    applicationId "com.wAashiqeRasool.HamareNabi" 
    minSdkVersion 21 
    targetSdkVersion 23 
    versionCode 1 
    versionName "1.1" 
} 
buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 
'proguard-rules.pro' 
    } 
} 
} 

dependencies { 
compile fileTree(dir: 'libs', include: ['*.jar']) 
testCompile 'junit:junit:4.12' 
compile 'com.android.support:appcompat-v7:23.0.0' 
compile 'com.android.support:design:23.0.0' 
} 
+0

veuillez signaler l'erreur logcat –

+0

Qu'est-ce qui vous a fait penser que vous ne devriez pas publier le journal des erreurs? – Denny

+0

Erreurs Logcat: https://drive.google.com/file/d/0B6a1Wje6UpUXUUs1TVVYT2xWZGs/view?usp=sharing S'il vous plaît aidez-moi monsieur. Je vais perdre mes efforts. –

Répondre

0

Le crash est parce que la variable 'pd' est nul dans votre OnPageFinished() appel. Ajoutez une vérification null comme indiqué ci-dessous et vous ne verrez aucun crash dans onPageFinished().

@Override 
    public void onPageFinished(WebView view, String url) { 
     if(pd != null) 
      pd.dismiss(); 
     super.onPageFinished(view, url); 
    } 
+0

Où dois-je ajouter ce code que vous avez donné? –

+0

Votre code a déjà la méthode onPageFinished(). Juste le modifier à ce que j'ai montré. –

+0

Vous êtes le génie monsieur. Merci beaucoup pour votre aide. Mais un problème est que tous les liens s'ouvrent dans un navigateur externe au lieu d'ouvrir dans l'application. –