2017-12-09 4 views
1

共有アイコンをクリックするとアプリケーションが停止し、logcatにエラーが表示されず、5行しかエラーではないようです。また、5つのフラグメントがありますが、アプリケーションを開いた後にフラグメント4を開くと停止しましたが、フラグメント2、次に3、そして5に移動すると停止しません。私のminSdkVersion 15とtargetSdkVersion 18でも、私のアプリは実行されていません。ほとんどのデバイスで停止しています。警告がありますアプリケーション停止エラーなしで動作し、バージョンを混在させる問題

はGradleの中で示し(モジュール:APP)APPCOMPAT

all com.android.support libraries must use the exact same version found versions 26.1.0, 25.2.0 

には、これは私のGradle

12-09 13:56:43.962 6867-6914/com.balrajarpit.balrajarpit D/FA: Logging event (FE): app_exception(_ae), Bundle[{firebase_event_origin(_o)=crash, firebase_screen_class(_sc)=ActivityPostDetails, firebase_screen_id(_si)=8020478545849927104, timestamp=1512808003957, fatal=1}] 
12-09 13:56:43.979 6867-6914/com.balrajarpit.balrajarpit V/FA: Connecting to remote service 
12-09 13:56:43.985 6867-6914/com.balrajarpit.balrajarpit V/FA: Recording user engagement, ms: 23008 
12-09 13:56:43.991 6867-6914/com.balrajarpit.balrajarpit D/FA: Logging event (FE): user_engagement(_e), Bundle[{firebase_event_origin(_o)=auto, engagement_time_msec(_et)=23008, firebase_screen_class(_sc)=ActivityPostDetails, firebase_screen_id(_si)=8020478545849927104}] 
12-09 13:56:44.012 6867-6914/com.balrajarpit.balrajarpit V/FA: Connection attempt already in progress 
Logcat

import android.app.Dialog; 
import android.content.Intent; 
import android.graphics.Color; 
import android.graphics.PorterDuff; 
import android.graphics.drawable.Drawable; 
import android.os.Bundle; 
import android.os.Handler; 
import android.support.design.widget.Snackbar; 
import android.support.v4.app.ActivityCompat; 
import android.support.v4.app.ActivityOptionsCompat; 
import android.support.v4.view.ViewCompat; 
import android.support.v4.widget.SwipeRefreshLayout; 
import android.support.v7.app.ActionBar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.support.v7.widget.Toolbar; 
import android.text.Html; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.Window; 
import android.view.WindowManager; 
import android.webkit.WebChromeClient; 
import android.webkit.WebView; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.RelativeLayout; 
import android.widget.TextView; 

import com.balysv.materialripple.MaterialRippleLayout; 
import com.google.android.gms.ads.AdRequest; 
import com.google.android.gms.ads.AdView; 
import com.balrajarpit.balrajarpit.adapter.AdapterComments; 
import com.balrajarpit.balrajarpit.connection.API; 
import com.balrajarpit.balrajarpit.connection.RestAdapter; 
import com.balrajarpit.balrajarpit.connection.callbacks.CallbackDetailsPost; 
import com.balrajarpit.balrajarpit.data.AppConfig; 
import com.balrajarpit.balrajarpit.data.Constant; 
import com.balrajarpit.balrajarpit.data.SharedPref; 
import com.balrajarpit.balrajarpit.model.Comment; 
import com.balrajarpit.balrajarpit.model.Post; 
import com.balrajarpit.balrajarpit.realm.RealmController; 
import com.balrajarpit.balrajarpit.utils.NetworkCheck; 
import com.balrajarpit.balrajarpit.utils.Tools; 

import java.util.List; 

import retrofit2.Call; 
import retrofit2.Callback; 
import retrofit2.Response; 

public class ActivityPostDetails extends AppCompatActivity { 

    public static final String EXTRA_OBJC = "key.EXTRA_OBJC"; 
    public static final String EXTRA_NOTIF = "key.EXTRA_NOTIF"; 

    // give preparation animation activity transition 
    public static void navigate(AppCompatActivity activity, View transitionView, Post obj) { 
     Intent intent = new Intent(activity, ActivityPostDetails.class); 
     intent.putExtra(EXTRA_OBJC, obj); 
     ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, transitionView, EXTRA_OBJC); 
     ActivityCompat.startActivity(activity, intent, options.toBundle()); 
    } 

    private Toolbar toolbar; 
    private ActionBar actionBar; 
    private View parent_view; 
    private MenuItem read_later_menu; 
    private SwipeRefreshLayout swipe_refresh; 

    // extra obj 
    private Post post; 
    private boolean from_notif; 

    private SharedPref sharedPref; 
    private boolean flag_read_later; 
    private Call<CallbackDetailsPost> callbackCall = null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_post_details); 
     parent_view = findViewById(android.R.id.content); 
     swipe_refresh = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_layout); 
     sharedPref = new SharedPref(this); 

     // animation transition 
     ViewCompat.setTransitionName(findViewById(R.id.image), EXTRA_OBJC); 

     // get extra object 
     post = (Post) getIntent().getSerializableExtra(EXTRA_OBJC); 
     from_notif = getIntent().getBooleanExtra(EXTRA_NOTIF, false); 
     initToolbar(); 

     displayPostData(true); 
     prepareAds(); 

     if (post.isDraft()) requestAction(); 

     // on swipe 
     swipe_refresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
      @Override 
      public void onRefresh() { 
       requestAction(); 
      } 
     }); 

     // get enabled controllers 
     Tools.requestInfoApi(this); 

     // analytics tracking 
     ThisApplication.getInstance().trackScreenView("View post : "+post.title_plain); 

    } 

    private void initToolbar() { 
     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     actionBar = getSupportActionBar(); 
     actionBar.setDisplayHomeAsUpEnabled(true); 
     actionBar.setHomeButtonEnabled(true); 
     actionBar.setTitle(""); 
    } 

    private void requestDetailsPostApi() { 
     API api = RestAdapter.createAPI(); 
     callbackCall = api.getPostDetialsById(post.id); 
     callbackCall.enqueue(new Callback<CallbackDetailsPost>() { 
      @Override 
      public void onResponse(Call<CallbackDetailsPost> call, Response<CallbackDetailsPost> response) { 
       CallbackDetailsPost resp = response.body(); 
       if (resp != null && resp.status.equals("ok")) { 
        post = resp.post; 
        displayPostData(false); 
        swipeProgress(false); 
       } else { 
        onFailRequest(); 
       } 
      } 

      @Override 
      public void onFailure(Call<CallbackDetailsPost> call, Throwable t) { 
       if (!call.isCanceled()) onFailRequest(); 
      } 

     }); 
    } 

    private void requestAction() { 
     showFailedView(false, ""); 
     swipeProgress(true); 
     new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       requestDetailsPostApi(); 
      } 
     }, Constant.DELAY_TIME_MEDIUM); 
    } 

    private void onFailRequest() { 
     swipeProgress(false); 
     if (NetworkCheck.isConnect(this)) { 
      showFailedView(true, getString(R.string.failed_text)); 
     } else { 
      showFailedView(true, getString(R.string.no_internet_text)); 
     } 
    } 

    private void displayPostData(boolean is_draft) { 
     ((TextView) findViewById(R.id.title)).setText(Html.fromHtml(post.title)); 

     WebView webview = (WebView) findViewById(R.id.content); 
     String html_data = "<style>img{max-width:100%;height:auto;} iframe{width:100%;}</style> "; 
     html_data += post.content; 
     webview.getSettings().setJavaScriptEnabled(true); 
     webview.getSettings(); 
     webview.getSettings().setBuiltInZoomControls(true); 
     webview.setBackgroundColor(Color.TRANSPARENT); 
     webview.setWebChromeClient(new WebChromeClient()); 
     webview.loadData(html_data, "text/html; charset=UTF-8", null); 
     // disable scroll on touch 
     webview.setOnTouchListener(new View.OnTouchListener() { 
      public boolean onTouch(View v, MotionEvent event) { 
       return (event.getAction() == MotionEvent.ACTION_MOVE); 
      } 
     }); 

     ((TextView) findViewById(R.id.date)).setText(Tools.getFormatedDate(post.date)); 
     ((TextView) findViewById(R.id.comment)).setText(post.comment_count + ""); 
     ((TextView) findViewById(R.id.tv_comment)).setText(getString(R.string.show_tv_comments) + " (" + post.comment_count + ")"); 
     ((TextView) findViewById(R.id.category)).setText(Html.fromHtml(Tools.getCategoryTxt(post.categories))); 
     Tools.displayImageThumbnail(this, post, ((ImageView) findViewById(R.id.image))); 

     if(is_draft){ 
      return; 
     } 
     // when show comments click 
     ((MaterialRippleLayout) findViewById(R.id.bt_show_comment)).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       if (post.comments.size() <= 0) { 
        Snackbar.make(parent_view, R.string.post_have_no_comment, Snackbar.LENGTH_SHORT).show(); 
        return; 
       } 
       dialogShowComments(post.comments); 
      } 
     }); 

     // when post comments click 
     ((MaterialRippleLayout) findViewById(R.id.bt_send_comment)).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       if (!AppConfig.MUST_REGISTER_TO_COMMENT) { 
        Intent i = new Intent(ActivityPostDetails.this, ActivityWebView.class); 
        if (sharedPref.isRespondEnabled()) { 
         i = new Intent(ActivityPostDetails.this, ActivitySendComment.class); 
        } 
        i.putExtra(EXTRA_OBJC, post); 
        startActivity(i); 
       } else { 
        Tools.dialogCommentNeedLogin(ActivityPostDetails.this, post.url); 
       } 
      } 
     }); 
     Snackbar.make(parent_view, R.string.post_detail_displayed_msg, Snackbar.LENGTH_SHORT).show(); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int item_id = item.getItemId(); 
     if (item_id == android.R.id.home) { 
      onBackPressed(); 
     } else if (item_id == R.id.action_share) { 
      Tools.methodShare(ActivityPostDetails.this, post); 
     } else if (item_id == R.id.action_later) { 
      if (post.isDraft()) { 
       Snackbar.make(parent_view, R.string.cannot_add_to_read_later, Snackbar.LENGTH_SHORT).show(); 
       return true; 
      } 
      String str; 
      if (flag_read_later) { 
       RealmController.with(this).deletePost(post.id); 
       str = getString(R.string.remove_from_msg); 
      } else { 
       RealmController.with(this).savePost(post); 
       str = getString(R.string.added_to_msg); 
      } 
      Snackbar.make(parent_view, "Post " + str + " Read Later", Snackbar.LENGTH_SHORT).show(); 
      refreshReadLaterMenu(); 
     } else if (item_id == R.id.action_browser) { 
      Tools.directLinkToBrowser(this, post.url); 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(final Menu menu) { 
     getMenuInflater().inflate(R.menu.menu_activity_post_details, menu); 
     read_later_menu = menu.findItem(R.id.action_later); 
     refreshReadLaterMenu(); 
     return true; 
    } 

    private void dialogShowComments(List<Comment> items) { 

     final Dialog dialog = new Dialog(ActivityPostDetails.this); 
     dialog.setCancelable(true); 
     dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); // before 
     dialog.setContentView(R.layout.dialog_comments); 

     WindowManager.LayoutParams lp = new WindowManager.LayoutParams(); 
     lp.copyFrom(dialog.getWindow().getAttributes()); 
     lp.width = WindowManager.LayoutParams.MATCH_PARENT; 
     lp.height = WindowManager.LayoutParams.WRAP_CONTENT; 

     RecyclerView recyclerView = (RecyclerView) dialog.findViewById(R.id.recyclerView); 
     recyclerView.setLayoutManager(new LinearLayoutManager(this)); 
     recyclerView.setHasFixedSize(true); 
     AdapterComments mAdapter = new AdapterComments(this, items); 
     recyclerView.setAdapter(mAdapter); 

     ((ImageView) dialog.findViewById(R.id.img_close)).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       dialog.dismiss(); 
      } 
     }); 

     dialog.show(); 
     dialog.getWindow().setAttributes(lp); 
    } 

    private void refreshReadLaterMenu() { 
     flag_read_later = RealmController.with(this).getPost(post.id) != null; 
     Drawable drawable = read_later_menu.getIcon(); 
     if (flag_read_later) { 
      drawable.setColorFilter(Color.BLACK, PorterDuff.Mode.SRC_ATOP); 
     } else { 
      drawable.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_ATOP); 
     } 
    } 

    private void prepareAds() { 
     if (AppConfig.ENABLE_ADSENSE && NetworkCheck.isConnect(getApplicationContext())) { 
      AdView mAdView = (AdView) findViewById(R.id.ad_view); 
      AdRequest adRequest = new AdRequest.Builder().addTestDevice(AdRequest.DEVICE_ID_EMULATOR).build(); 
      // Start loading the ad in the background. 
      mAdView.loadAd(adRequest); 
     } else { 
      ((RelativeLayout) findViewById(R.id.banner_layout)).setVisibility(View.GONE); 
     } 
    } 

    private void showFailedView(boolean show, String message) { 
     View lyt_failed = (View) findViewById(R.id.lyt_failed); 
     View lyt_main_content = (View) findViewById(R.id.lyt_main_content); 

     ((TextView) findViewById(R.id.failed_message)).setText(message); 
     if (show) { 
      lyt_main_content.setVisibility(View.GONE); 
      lyt_failed.setVisibility(View.VISIBLE); 
     } else { 
      lyt_main_content.setVisibility(View.VISIBLE); 
      lyt_failed.setVisibility(View.GONE); 
     } 
     ((Button) findViewById(R.id.failed_retry)).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       requestAction(); 
      } 
     }); 
    } 

    private void swipeProgress(final boolean show) { 
     if (!show) { 
      swipe_refresh.setRefreshing(show); 
      return; 
     } 
     swipe_refresh.post(new Runnable() { 
      @Override 
      public void run() { 
       swipe_refresh.setRefreshing(show); 
      } 
     }); 
    } 

    @Override 
    public void onBackPressed() { 
     if(from_notif) { 
      startActivity(new Intent(getApplicationContext(), ActivityMain.class)); 
      finish(); 
     } else { 
      super.onBackPressed(); 
     } 
    } 
} 

apply plugin: 'com.android.application' 
apply plugin: 'realm-android' 

android { 
    compileSdkVersion 26 
    buildToolsVersion "26.0.2" 
    defaultConfig { 
     applicationId "com.balrajarpit.balrajarpit" 
     minSdkVersion 15 
     targetSdkVersion 18 
     versionCode 2 
     versionName "1.1" 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
     vectorDrawables.useSupportLibrary = true 
     multiDexEnabled = true 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
     dexOptions { 
      javaMaxHeapSize "4g" 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 
     exclude group: 'com.android.support', module: 'support-annotations' 
    }) 

    compile 'com.android.support:appcompat-v7:26.+' 
    compile 'com.android.support:design:26.+' 
    compile 'com.android.support.constraint:constraint-layout:1.0.2' 
    compile 'com.android.support:recyclerview-v7:26.+' 
    compile 'com.github.bumptech.glide:glide:3.7.0' 
    compile 'com.android.support:cardview-v7:26.+' 
    compile 'com.android.support:support-vector-drawable:26.+' 
    compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5' 
    compile 'com.android.support:support-v4:26.+' 
    compile 'com.squareup.picasso:picasso:2.5.2' 
    compile 'com.mcxiaoke.volley:library:1.0.19' 
    compile 'com.google.code.gson:gson:2.2.4' 
    compile 'com.google.android.gms:play-services:11.+' 

    compile('com.squareup.retrofit2:retrofit:2.0.0-beta4') { 
     exclude module: 'okhttp' 
    } 
    compile 'com.squareup.okhttp3:okhttp:3.2.0' 
    compile 'com.squareup.okhttp3:logging-interceptor:3.0.1' 
    compile 'com.squareup.retrofit2:converter-gson:2.1.0' 
    compile 'com.squareup.picasso:picasso:2.5.2' 

    // ripple effect library 
    compile 'com.balysv:material-ripple:1.0.2' 
    testCompile 'junit:junit:4.12' 
} 
apply plugin: 'com.google.gms.google-services' 

活動であります

+0

最近インポートしたライブラリの1つに、サポート25があります。最後に追加されたライブラリは何ですか? – Xenolion

+0

'com.android.support:appcompat-v7:26.+' –

+0

私たちはこのエラーチェックを削除することはできません。あなたの前の25のエラーラインは、改造されて、 26は代わりに25を置く。これはあなたを返すでしょうが! – Xenolion

答えて

0

この場合に問題があるかどうかはわかりませんが、異なるバージョンのサポートライブラリを使用するとランタイムクラッシュが発生する可能性があります。コマンドが機能しない場合、あなたは多分設定する必要が

gradlew -q dependencies app:dependencies --configuration compile 

:あなたは、端末(アンドロイドスタジオ)で次のコマンドを実行して(多分別のライブラリによって内部で使用)別のバージョンを使用するものを見つけることができます最初にグラデルラッパー。

task wrapper(type: Wrapper) { 
    gradleVersion = '4.1' 
} 

をし、端末からのコマンドに

gradle wrapper 

を実行します。これを行うには、プロジェクトのbuild.gradleファイルに以下を追加します。それでも動作しない場合、gradleはあなたのPATHにないかもしれません。追加したい場合は、Android Studioのインストールフォルダで見つけることができます。

どのバージョンが異なるバージョンを使用しているかわかったら、正しいバージョンで自分自身を依存関係として追加し、他のバージョンを上書きして同期してください。

私はこの問題を抱えていたときにこのように働いてくれました。

+0

レルムと最新バージョンのすべてのライブラリのコマンドと更新バージョンを実行しましたが、引き続き同じ問題が発生しています。 –

+0

最終的に解決されました。画像の読み込みに問題がありました。画像のサイズのせいで、時々フラグメントがクラッシュしていました。 –

関連する問題