Whenever I try to open one of the activities (with the name quizActivity
) in the app, the app crashes and gives the following error:
Unknown bits set in runtime_flags: 0x28000
2020-08-17 21:41:20.561 12713-12713/inspire2connect.inspire2connect E/LoadedApk: Unable to instantiate appComponentFactory
java.lang.ClassNotFoundException: Didn't find class "inspire2connect.inspire2connect.whateverString" on path: DexPathList[[zip file "/data/app/inspire2connect.inspire2connect-tnn4gqGg6Qg8JLYvyTp51A==/base.apk"],nativeLibraryDirectories=[/data/app/inspire2connect.inspire2connect-tnn4gqGg6Qg8JLYvyTp51A==/lib/arm64, /system/lib64, /system/product/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at android.app.LoadedApk.createAppFactory(LoadedApk.java:272)
at android.app.LoadedApk.createOrUpdateClassLoaderLocked(LoadedApk.java:881)
at android.app.LoadedApk.getClassLoader(LoadedApk.java:976)
at android.app.LoadedApk.getResources(LoadedApk.java:1227)
at android.app.ContextImpl.createAppContext(ContextImpl.java:2562)
at android.app.ContextImpl.createAppContext(ContextImpl.java:2554)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6698)
at android.app.ActivityThread.access$1700(ActivityThread.java:240)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2068)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:238)
at android.app.ActivityThread.main(ActivityThread.java:7798)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:995)
2020-08-17 21:41:20.880 12713-12777/inspire2connect.inspire2connect E/Perf: Fail to get file list inspire2connect.inspire2connect
2020-08-17 21:41:20.880 12713-12777/inspire2connect.inspire2connect E/Perf: getFolderSize() : Exception_1 = java.lang.NullPointerException: Attempt to get length of null array
Here is the link for the entire project: github.com/StealthViper/WashKaro
I have been trying to see what the error is but can't seem to correct it. Most of the answers suggest something wrong with the manifest file but didn't work when I made those changes in my manifest file. Here is the manifest file:
<?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="inspire2connect.inspire2connect">
<uses-feature android:name="android.hardware.location.gps" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:appComponentFactory="whateverString"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:usesCleartextTraffic="true"
android:theme="@style/AppTheme"
tools:replace="android:appComponentFactory">
<activity android:name=".satyaChat.ChatActivity"></activity>
<activity android:name=".home.homeActivity" /> <!-- <activity android:name=".male_female_2" /> -->
<activity android:name=".home.WelcomeActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".survey.maleFemaleActivity" />
<activity android:name=".news.text2speech2_2Activity" />
<activity android:name=".about.aboutActivity" />
<activity android:name=".news.onAIrActivity" />
<activity android:name=".mythGuidelineUpdates.UpdateActivity" />
<activity android:name=".tweets.tweetActivity" />
<activity android:name="inspire2connect.inspire2connect.quiz.quizActivity" />
<activity android:name="inspire2connect.inspire2connect.quiz.scoreActivity" />
<activity android:name=".utils.urlActivity" />
<service
android:name=".utils.MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<activity android:name=".mythGuidelineUpdates.guidelineViewActivity" />
<activity android:name=".home.InfographicsActivity" />
<meta-data
android:name="firebase_messaging_auto_init_enabled"
android:value="false" />
<meta-data
android:name="firebase_analytics_collection_enabled"
android:value="true" />
<meta-data
android:name="com.google.firebase.messaging.default_notification_color"
android:resource="@color/colorAccent" />
</application>
</manifest>
I am also attaching my build.gradle file, as the error may be from there as indicated in some answers:
apply plugin: 'com.android.application'
apply plugin: 'com.google.firebase.crashlytics'
apply plugin: 'com.google.gms.google-services'
android {
compileSdkVersion 29
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
defaultConfig {
applicationId "inspire2connect.inspire2connect"
minSdkVersion 21
targetSdkVersion 29
versionCode 24
versionName "4.1"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
debuggable false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
def room_version = "2.2.5"
implementation fileTree(dir: 'libs', include: ['*.jar'])
// Android & UI
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
// implementation 'org.jetbrains:annotations-java5:15.0'
implementation 'com.google.code.gson:gson:2.8.6'
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.google.android.material:material:1.1.0'
implementation 'com.google.android.play:core:1.7.3'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
implementation 'androidx.mediarouter:mediarouter:1.1.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation "androidx.viewpager:viewpager:1.0.0"
implementation 'android.arch.work:work-runtime:1.0.1'
implementation 'androidx.preference:preference:1.1.1'
androidTestImplementation 'androidx.test:runner:1.2.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.legacy:legacy-support-v13:1.0.0'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0'
implementation 'com.google.guava:guava:27.0.1-android'
implementation 'com.android.volley:volley:1.1.1'
// Firebase
implementation 'com.google.firebase:firebase-database:19.3.0'
implementation 'com.firebaseui:firebase-ui-auth:6.2.0'
implementation 'com.google.firebase:firebase-auth:19.3.1'
implementation 'com.google.firebase:firebase-storage:19.1.1'
implementation 'com.google.firebase:firebase-inappmessaging-display:19.0.7'
implementation 'com.google.firebase:firebase-analytics:17.4.3'
implementation 'com.google.firebase:firebase-messaging:20.2.0'
implementation 'com.google.firebase:firebase-core:17.4.3'
implementation 'com.google.firebase:firebase-iid:20.2.0'
implementation 'com.google.firebase:firebase-crashlytics:17.0.1'
// Room
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
testImplementation "androidx.room:room-testing:$room_version"
// Third Party
implementation 'com.squareup.picasso:picasso:2.71828'
implementation 'com.github.lecho:hellocharts-library:1.5.8@aar'
implementation 'com.llollox:androidtoggleswitch:2.0.1'
implementation 'com.sefford:circular-progress-drawable:1.31@aar'
implementation 'androidx.gridlayout:gridlayout:1.0.0'
implementation 'com.jakewharton:butterknife:10.2.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.1'
implementation 'in.srain.cube:grid-view-with-header-footer:1.0.12'
}
Here is the code for the quizActivity class:
public class quizActivity extends BaseActivity implements View.OnClickListener{
private static final int MY_REQUEST_CODE = 2399;
TextView question, option1_text, option2_text, option3_text, option4_text,qCount,timer;
ConstraintLayout[] options = new ConstraintLayout[4];
public static final String TAG = "QuizActivity";
public static final String seen_questions_tag = "QuestionsShown";
public ArrayList<questionObject> result;
public ArrayList<questionObject> selected_questions;
public ArrayList<questionObject> seen_questions;
DatabaseReference databaseReference;
private Dialog loadingDialog;
private CountDownTimer countDown;
private int quesNum;
private int score;
private boolean setDate;
public void update_handle() {
final AppUpdateManager appUpdateManager = AppUpdateManagerFactory.create(this);
Task<AppUpdateInfo> appUpdateInfoTask = appUpdateManager.getAppUpdateInfo();
appUpdateInfoTask.addOnSuccessListener(new OnSuccessListener<AppUpdateInfo> () {
@Override
public void onSuccess(AppUpdateInfo appUpdateInfo) {
if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)) {
try {
appUpdateManager.startUpdateFlowForResult(
appUpdateInfo, AppUpdateType.IMMEDIATE, quizActivity.this, MY_REQUEST_CODE);
} catch (IntentSender.SendIntentException e) {
e.printStackTrace();
}
} else if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)) {
try {
appUpdateManager.startUpdateFlowForResult(
appUpdateInfo, AppUpdateType.FLEXIBLE, quizActivity.this, MY_REQUEST_CODE);
} catch (IntentSender.SendIntentException e) {
e.printStackTrace();
}
}
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == MY_REQUEST_CODE) {
if (resultCode != RESULT_OK) {
Loge("UPDATE_STATUS", "Update flow failed! Result code: " + resultCode);
}
}
}
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext( LocaleHelper.onAttach(newBase));
}
private void setUpdates() {
quizReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
result = new ArrayList<>();
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
questionObject obj = new questionObject (snapshot.child("question_"+ getCurLang()).getValue().toString(),snapshot.child("option1_"+ getCurLang ()).getValue().toString(),snapshot.child("option2_"+ getCurLang ()).getValue().toString(),snapshot.child("option3_"+ getCurLang ()).getValue().toString(),snapshot.child("option4_"+ getCurLang ()).getValue().toString(),Integer.valueOf ( snapshot.child ( "answer" ).getValue ().toString () ),snapshot.child("explanation_"+ getCurLang ()).getValue().toString(),snapshot.child("correct_attempts").getValue().toString (),snapshot.child("total_attempts").getValue().toString(), snapshot.getKey (),snapshot.child ( "key" ).getValue(Integer.class) );
result.add(new questionObject (obj.question,
obj.option1,obj.option2,obj.option3,obj.option4, obj.answer,obj.explanation,obj.correct_attempts,obj.total_attempts, obj.id,obj.key));
}
selectQuestionSet(result);
loadingDialog.dismiss();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
private void setQuestion(){
timer.setText ( String.valueOf ( 30 ) );
question.setText ( selected_questions.get(0).getQuestion () );
option1_text.setText ( selected_questions.get(0).getOption1 () );
option2_text.setText ( selected_questions.get(0).getOption2 () );
option3_text.setText ( selected_questions.get(0).getOption3 () );
option4_text.setText ( selected_questions.get(0).getOption4 () );
qCount.setText(String.valueOf(1) + "/" + String.valueOf(selected_questions.size()));
startTimer();
quesNum = 0 ;
}
private void startTimer()
{
countDown = new CountDownTimer (32000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
if(millisUntilFinished < 30000)
timer.setText(String.valueOf(millisUntilFinished / 1000));
}
@Override
public void onFinish() {
changeQuestion();
}
};
countDown.start();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStatusBarGradiant ( this );
setContentView( R.layout.quiz_activity);
question = findViewById ( R.id.question_text );
qCount = findViewById ( R.id.quest_num );
timer = findViewById(R.id.countdown);
option1_text = findViewById ( R.id.option_1_text );
option2_text = findViewById ( R.id.option_2_text );
option3_text = findViewById ( R.id.option_3_text );
option4_text = findViewById ( R.id.option_4_text );
options[0] = findViewById ( R.id.option_1_tile );
options[0].setOnClickListener ( this );
options[1] = findViewById ( R.id.option_2_tile );
options[1].setOnClickListener ( this );
options[2] = findViewById ( R.id.option_3_tile );
options[2].setOnClickListener ( this );
options[3] = findViewById ( R.id.option_4_tile );
options[3].setOnClickListener ( this );
loadingDialog = new Dialog(quizActivity.this);
loadingDialog.setContentView(R.layout.loading_progressbar);
loadingDialog.setCancelable(false);
loadingDialog.getWindow().setBackgroundDrawableResource(R.drawable.progress_background);
loadingDialog.getWindow().setLayout( ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
loadingDialog.show();
setDate = false;
getSupportActionBar().setBackgroundDrawable(new ColorDrawable( Color.TRANSPARENT));
Intent i = getIntent();
String type = i.getStringExtra(TYPE);
String date = i.getStringExtra(DATE);
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext ());
SharedPreferences.Editor editor = sharedPrefs.edit();
Gson gson = new Gson();
String json = gson.toJson(seen_questions);
editor.putString(seen_questions_tag, json);
editor.commit();
switch (date) {
case DATE_YES:
setDate = true;
break;
default:
setDate = false;
break;
}
switch (type) {
case UPDATES:
databaseReference = governmentReference;
getSupportActionBar().setTitle(R.string.govt_updates_act);
break;
case GUIDELINES:
databaseReference = guidelinesReference;
getSupportActionBar().setTitle(R.string.guidelines_act);
break;
case MYTH:
databaseReference = mythReference;
getSupportActionBar().setTitle(R.string.myth_act);
break;
case FAQ:
databaseReference = faqsReference;
getSupportActionBar().setTitle(R.string.faqs_tile);
break;
case SUCCESS_STORIES:
databaseReference = successStoriesReference;
getSupportActionBar().setTitle(R.string.success_stories_tile);
break;
case TWEETS:
databaseReference = tweetsReference;
getSupportActionBar().setTitle( R.string.social_media_title);
break;
case QUIZ:
databaseReference = quizReference;
getSupportActionBar ().setTitle (getString( R.string.quiz_title));
getSupportActionBar().setBackgroundDrawable(new ColorDrawable ( Color.TRANSPARENT));
break;
default:
Logv(TAG, "Invalid Intent");
break;
}
// result = new ArrayList<>();
// result.add(new questionObject ("No Question Available", "No Option Available","No Option Available","No Option Available","No Option Available",0,"No Data Available","No Data Available","No Data Available", "No Data Available",0));
setUpdates();
score = 0;
}
@Override
public void onClick(View view) {
int selectedOption = 0 ;
switch (view.getId()){
case R.id.option_1_tile :
selectedOption = 1;
break;
case R.id.option_2_tile :
selectedOption = 2;
break;
case R.id.option_3_tile :
selectedOption = 3;
break;
case R.id.option_4_tile :
selectedOption = 4;
break;
default:
}
countDown.cancel ();
checkAnswer(selectedOption, view);
}
private void checkAnswer(int selectedOption, View view)
{
if(selectedOption == selected_questions.get(quesNum).getAnswer())
{
//Right Answer
(view).setBackgroundTintList(ColorStateList.valueOf(Color.GREEN));
quizReference.child ( selected_questions.get ( quesNum ).getId () ).child("correct_attempts").setValue( String.valueOf (Integer.valueOf (selected_questions.get ( quesNum ).getCorrect_attempts ())+1 ));
quizReference.child ( selected_questions.get ( quesNum ).getId () ).child("total_attempts").setValue( String.valueOf (Integer.valueOf (selected_questions.get ( quesNum ).getTotal_attempts ())+1 ));
score++;
}
else
{
//Wrong Answer
(view).setBackgroundTintList(ColorStateList.valueOf( Color.RED));
quizReference.child ( selected_questions.get ( quesNum ).getId() ).child("total_attempts").setValue( String.valueOf (Integer.valueOf (selected_questions.get ( quesNum ).getTotal_attempts ())+1 ));
switch (selected_questions.get(quesNum).getAnswer ())
{
case 1:
options[0].setBackgroundTintList( ColorStateList.valueOf(Color.GREEN));
break;
case 2:
options[1].setBackgroundTintList(ColorStateList.valueOf(Color.GREEN));
break;
case 3:
options[2].setBackgroundTintList(ColorStateList.valueOf(Color.GREEN));
break;
case 4:
options[3].setBackgroundTintList(ColorStateList.valueOf(Color.GREEN));
break;
}
}
Handler handler = new Handler();
handler.postDelayed( () -> changeQuestion(), 2000);
}
private void changeQuestion()
{
if( quesNum < selected_questions.size() - 1)
{
quesNum++;
playAnim(question,0,0);
playAnim(option1_text,0,1);
playAnim(option2_text,0,2);
playAnim(option3_text,0,3);
playAnim(option4_text,0,4);
qCount.setText(String.valueOf(quesNum+1) + "/" + String.valueOf(selected_questions.size()));
timer.setText(String.valueOf(30));
startTimer();
}
else
{
// Go to Score Activity
Intent intent = new Intent(quizActivity.this,scoreActivity.class);
intent.putExtra("SCORE", String.valueOf(score) + "/" + String.valueOf(selected_questions.size()));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}
}
private void playAnim(final View view, final int value, final int viewNum)
{
view.animate().alpha(value).scaleX(value).scaleY(value).setDuration(500)
.setStartDelay(100).setInterpolator(new DecelerateInterpolator ())
.setListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
if(value == 0)
{
switch (viewNum)
{
case 0:
((TextView)view).setText(selected_questions.get(quesNum).getQuestion());
break;
case 1:
((TextView)view).setText(selected_questions.get(quesNum).getOption1 ());
break;
case 2:
((TextView)view).setText(selected_questions.get(quesNum).getOption2 ());
break;
case 3:
((TextView)view).setText(selected_questions.get(quesNum).getOption3 ());
break;
case 4:
((TextView)view).setText(selected_questions.get(quesNum).getOption4 ());
break;
}
if(viewNum != 0)
(view).setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#E99C03")));
playAnim(view,1,viewNum);
}
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
}
@Override
public void onBackPressed() {
super.onBackPressed();
countDown.cancel();
}
public void selectQuestionSet(ArrayList<questionObject> result){
try {
selected_questions.clear();
} catch (Exception e) {
e.printStackTrace ();
}
Collections.sort(result);
for (questionObject object: result) {
if(selected_questions.size () < 5 && checkUsage(object.key) && checkLimit()){
//display the question
//append key to stored list
selected_questions.add (object);
seen_questions.add(object);
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext ());
SharedPreferences.Editor editor = sharedPrefs.edit();
Gson gson = new Gson();
String json = gson.toJson(seen_questions);
editor.putString(seen_questions_tag, json);
editor.commit();
}
else if(selected_questions.size() < 5 && !checkLimit()) {
seen_questions.clear();
selectQuestionSet(result);
}
if(selected_questions.size () == 5){
break;
}
}
setQuestion ();
}
public boolean checkUsage(int key){
//Check whether key already used or not here
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext ());
Gson gson = new Gson();
String json = sharedPrefs.getString(seen_questions_tag, "");
Type type = new TypeToken<List<questionObject>> () {}.getType();
List<questionObject> arrayList = gson.fromJson(json, type);
for (questionObject object : arrayList){
if (object.key == key){
return false;
}
}
return true;
}
public boolean checkLimit(){
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext ());
Gson gson = new Gson();
String json = sharedPrefs.getString(seen_questions_tag, "");
Type type = new TypeToken<List<questionObject>> () {}.getType();
List<questionObject> arrayList = gson.fromJson(json, type);
if(arrayList.size() > 95){
return false;
}
return true;
}
}
from Tried everything still getting error: Unable to instantiate appComponentFactory java.lang.ClassNotFoundException
No comments:
Post a Comment