activity 我正在尝试 运行 使我的应用程序崩溃但没有错误? (Android 工作室)
The activity I'm trying to run crashes my app but with no errors? (Android Studio)
这是我要首先启动的 activity 的代码:
package com.example.adamf.authtest;
import android.content.Intent;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Html;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import org.w3c.dom.Text;
public class SplashActivity extends AppCompatActivity {
private ViewPager mSlidePager;
private LinearLayout mDotLayout;
private Button mNextBtn;
private Button mBackBtn;
private TextView[] mDots;
private SliderAdapter sliderAdapter;
private int mCurrentPage;
private int Check = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setTheme(R.style.NoActionBarCustom);
setContentView(R.layout.activity_splash);
mSlidePager = (ViewPager) findViewById(R.id.slideViewPager);
mDotLayout = (LinearLayout) findViewById(R.id.dotsLayout);
mNextBtn = (Button) findViewById(R.id.nextBtn);
mBackBtn = (Button) findViewById(R.id.prevBtn);
sliderAdapter = new SliderAdapter(this);
mSlidePager.setAdapter(sliderAdapter);
addDotsIndicator(0);
mSlidePager.addOnPageChangeListener(viewListener);
//OnClickListeners
mNextBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mSlidePager.setCurrentItem(mCurrentPage + 1);
Check = Check + 1;
if(Check == 3)
{
Intent intent = (new Intent(SplashActivity.this, LoginActivity.class));
startActivity(intent);
}
}
});
mBackBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Check = Check -1;
mSlidePager.setCurrentItem(mCurrentPage - 1);
}
});
}
public void addDotsIndicator(int position){
mDots = new TextView[3];
mDotLayout.removeAllViews();
for(int i = 0; i < mDots.length; i++)
{
mDots[i] = new TextView(this);
mDots[i].setText(Html.fromHtml("•"));
mDots[i].setTextSize(35);
mDots[i].setTextColor(getResources().getColor(R.color.colorTransparentWhite));
mDotLayout.addView(mDots[i]);
}
if(mDots.length > 0)
{
mDots[position].setTextColor(getResources().getColor(R.color.colorWhite));
}
}
ViewPager.OnPageChangeListener viewListener = new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int i) {
addDotsIndicator(i);
mCurrentPage = i;
if(i == 0){
mNextBtn.setEnabled(true);
mBackBtn.setEnabled(false);
mBackBtn.setVisibility(View.INVISIBLE);
mNextBtn.setText("NEXT");
mBackBtn.setText("");
}
else if (i == mDots.length -1)
{
mNextBtn.setEnabled(true);
mBackBtn.setEnabled(true);
mBackBtn.setVisibility(View.VISIBLE);
mNextBtn.setText("FINISH");
mBackBtn.setText("BACK");
}
else
{
mNextBtn.setEnabled(true);
mBackBtn.setEnabled(true);
mBackBtn.setVisibility(View.INVISIBLE);
mNextBtn.setText("NEXT");
mBackBtn.setText("BACK");
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
};
}
我的 AndroidManifest.XML 文件如下所示:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.adamf.authtest">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_appiconhhh_round"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_appiconhhh"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".SplashActivity"
android:theme="@style/NoActionBarCustom" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".LoginActivity" android:exported="true"/>
<activity android:name=".ClientInfo" android:exported="true"/>
<activity android:name=".ClientEditInfo" android:exported="true"/>
<activity android:name=".CalendarActivity" android:exported="true"/>
</application>
slide_layout.xml 看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/slide_image"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_marginTop="50dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
app:srcCompat="@drawable/calen_icon" />
<TextView
android:id="@+id/slide_heading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_below="@+id/slide_image"
android:layout_centerHorizontal="true"
android:text="HEADING"
android:textSize="30dp"/>
<TextView
android:id="@+id/slide_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/slide_heading"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:paddingLeft="40dp"
android:paddingRight="40dp"
android:text="bunch of efhdfkfhdf this h eherkjeh this is whereh te
description will go"
android:textAlignment="center"
android:textSize="20dp" />
</RelativeLayout>
activity_splash.xml 看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/slide_image"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_marginTop="50dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
app:srcCompat="@drawable/calen_icon" />
<TextView
android:id="@+id/slide_heading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_below="@+id/slide_image"
android:layout_centerHorizontal="true"
android:text="HEADING"
android:textSize="30dp"/>
<TextView
android:id="@+id/slide_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/slide_heading"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:paddingLeft="40dp"
android:paddingRight="40dp"
android:text="bunch of efhdfkfhdf this h eherkjeh this is whereh te
description will go"
android:textAlignment="center"
android:textSize="20dp" />
</RelativeLayout>
我试图让我的应用程序从这个初始屏幕开始,然后进入我的登录页面,但是一旦调用 activity,应用程序就会崩溃,我不知道为什么。我在控制台中也没有收到任何错误,并且我已经从我的另一个应用程序中复制了这段代码,它运行得非常好。我试过让我的 loginactivity 重定向到初始屏幕以及让初始屏幕首先启动,但一旦它调用应用程序崩溃。
我的问题是,有人能发现这段代码有什么问题吗?可能是为什么它不会 运行 的问题?
我试过使用模拟器和我的phone,但同样的事情发生了,所以它一定是代码相关的...
谢谢
编辑:
Logcat 错误:
04-30 13:45:35.957 26651-26651/? E/Zygote: isWhitelistProcess - Process is
Whitelisted
04-30 13:45:35.961 26651-26651/? W/SELinux: SELinux selinux_android_compute_policy_index : Policy Index[2], Con:u:r:zygote:s0 RAM:SEPF_SM-G955F_8.0.0_0002, [-1 -1 -1 -1 0 1]
04-30 13:45:35.961 26651-26651/? I/SELinux: SELinux: seapp_context_lookup: seinfo=untrusted, level=s0:c512,c768, pkgname=com.example.adamf.authtest
04-30 13:45:35.965 26651-26651/? I/zygote64: Late-enabling -Xcheck:jni
04-30 13:45:36.028 26651-26651/? D/ActivityThread: Added TimaKeyStore provider
04-30 13:45:36.242 26651-26676/com.example.adamf.authtest I/vndksupport: sphal namespace is not configured for this process. Loading /vendor/lib64/egl/libGLES_mali.so from the current namespace instead.
04-30 13:45:36.263 26651-26676/com.example.adamf.authtest D/libEGL: loaded /vendor/lib64/egl/libGLES_mali.so
04-30 13:45:36.310 26651-26651/com.example.adamf.authtest D/FirebaseApp: com.google.firebase.crash.FirebaseCrash is not linked. Skipping initialization.
04-30 13:45:36.354 26651-26651/com.example.adamf.authtest V/FA: Registered activity lifecycle callback
04-30 13:45:36.355 26651-26651/com.example.adamf.authtest I/FirebaseInitProvider: FirebaseApp initialization successful
04-30 13:45:36.358 26651-26651/com.example.adamf.authtest I/InstantRun: starting instant run server: is main process
04-30 13:45:36.381 26651-26681/com.example.adamf.authtest V/FA: Cancelling job. JobID: -1634935714
04-30 13:45:36.397 26651-26681/com.example.adamf.authtest V/FA: Collection enabled
04-30 13:45:36.397 26651-26681/com.example.adamf.authtest V/FA: App package, google app id: com.example.adamf.authtest, 1:710221974396:android:d5035470e16ba2b6
04-30 13:45:36.399 26651-26681/com.example.adamf.authtest I/FA: App measurement is starting up, version: 12211
04-30 13:45:36.399 26651-26681/com.example.adamf.authtest I/FA: To enable debug logging run: adb shell setprop log.tag.FA VERBOSE
04-30 13:45:36.399 26651-26681/com.example.adamf.authtest I/FA: To enable faster debug mode event logging run:
adb shell setprop debug.firebase.analytics.app com.example.adamf.authtest
04-30 13:45:36.399 26651-26681/com.example.adamf.authtest D/FA: Debug-level message logging enabled
04-30 13:45:36.427 26651-26681/com.example.adamf.authtest V/FA: Connecting to remote service
04-30 13:45:36.439 26651-26681/com.example.adamf.authtest V/FA: Connection attempt already in progress
04-30 13:45:36.439 26651-26651/com.example.adamf.authtest V/FA: onActivityCreated
04-30 13:45:36.536 26651-26657/com.example.adamf.authtest I/zygote64: Do partial code cache collection, code=17KB, data=13KB
04-30 13:45:36.536 26651-26657/com.example.adamf.authtest I/zygote64: After code cache collection, code=17KB, data=13KB
04-30 13:45:36.536 26651-26657/com.example.adamf.authtest I/zygote64: Increasing code cache capacity to 128KB
04-30 13:45:36.546 26651-26657/com.example.adamf.authtest I/zygote64: Do partial code cache collection, code=23KB, data=15KB
04-30 13:45:36.546 26651-26657/com.example.adamf.authtest I/zygote64: After code cache collection, code=23KB, data=15KB
04-30 13:45:36.546 26651-26657/com.example.adamf.authtest I/zygote64: Increasing code cache capacity to 256KB
04-30 13:45:36.546 26651-26657/com.example.adamf.authtest I/zygote64: Method exceeds compiler instruction limit: 25337 in void org.ccil.cowan.tagsoup.HTMLSchema.<init>()
04-30 13:45:36.565 26651-26681/com.example.adamf.authtest V/FA: Connection attempt already in progress
04-30 13:45:36.567 26651-26681/com.example.adamf.authtest V/FA: Activity resumed, time: 49673345
04-30 13:45:36.570 26651-26681/com.example.adamf.authtest I/FA: Tag Manager is not found and thus will not be used
04-30 13:45:36.572 26651-26681/com.example.adamf.authtest D/FA: Logging event (FE): screen_view(_vs), Bundle[{firebase_event_origin(_o)=auto, firebase_screen_class(_sc)=SplashActivity, firebase_screen_id(_si)=-9142861890006532973}]
04-30 13:45:36.581 26651-26684/com.example.adamf.authtest D/OpenGLRenderer: HWUI GL Pipeline
04-30 13:45:36.587 26651-26651/com.example.adamf.authtest D/ViewRootImpl@2db840c[SplashActivity]: setView = DecorView@b0d545b[SplashActivity] TM=true MM=false
04-30 13:45:36.591 26651-26681/com.example.adamf.authtest V/FA: Connection attempt already in progress
04-30 13:45:36.608 26651-26651/com.example.adamf.authtest D/ViewRootImpl@2db840c[SplashActivity]: dispatchAttachedToWindow
04-30 13:45:36.627 26651-26651/com.example.adamf.authtest D/AndroidRuntime: Shutting down VM
04-30 13:45:36.632 26651-26651/com.example.adamf.authtest E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.adamf.authtest, PID: 26651
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageResource(int)' on a null object reference
at com.example.adamf.authtest.SliderAdapter.instantiateItem(SliderAdapter.java:64)
at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:1004)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1152)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1086)
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1616)
at android.view.View.measure(View.java:23279)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461)
at android.view.View.measure(View.java:23279)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6928)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:141)
at android.view.View.measure(View.java:23279)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6928)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:806)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:685)
at android.view.View.measure(View.java:23279)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6928)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at android.view.View.measure(View.java:23279)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6928)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:806)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:685)
at android.view.View.measure(View.java:23279)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6928)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at com.android.internal.policy.DecorView.onMeasure(DecorView.java:898)
at android.view.View.measure(View.java:23279)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2832)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1869)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2124)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1738)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7745)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
at android.view.Choreographer.doCallbacks(Choreographer.java:723)
at android.view.Choreographer.doFrame(Choreographer.java:658)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6938)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
滑块适配器:
package com.example.adamf.authtest;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v4.view.PagerAdapter;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class SliderAdapter extends PagerAdapter {
Context context;
LayoutInflater layoutinflater;
public SliderAdapter(Context context) {
this.context = context;
}
//Arrays
public int[] slide_images = {
R.drawable.calen_icon,
R.drawable.plan_icon,
R.drawable.team_icon
};
public String[] slide_headings = {
"CALENDAR",
"PATIENTS",
"FAMILY"
};
public String[] slide_desc = {
"View your schedule for the entire month! Clicking on a date will bring up all your jobs for that day!",
"Take a look at all the information about your patients that you will need to know, including their address, phone number and even past medications",
"Write about how your patient is sleeping, eating and keeping active. Their family members can check up on them through a separate app!"
};
@Override
public int getCount() {
return slide_headings.length;
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
return view == (RelativeLayout) o;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
layoutinflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
View view = layoutinflater.inflate(R.layout.activity_splash, container, false);
ImageView slideImageView = (ImageView) view.findViewById(R.id.slide_image);
TextView slideHeading = (TextView) view.findViewById(R.id.slide_heading);
TextView slideDescription = (TextView) view.findViewById(R.id.slide_description);
slideImageView.setImageResource(slide_images[position]);
slideHeading.setText(slide_headings[position]);
slideDescription.setText(slide_desc[position]);
container.addView(view);
return view;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((RelativeLayout)object);
}
}
在您的 SliderAdapter
中,在 instantiateItem
方法中:
View view = layoutinflater.inflate(R.layout.activity_splash, container, false);
应该是:
View view = layoutinflater.inflate(R.layout.slide_layout, container, false);
这是我要首先启动的 activity 的代码:
package com.example.adamf.authtest;
import android.content.Intent;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Html;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import org.w3c.dom.Text;
public class SplashActivity extends AppCompatActivity {
private ViewPager mSlidePager;
private LinearLayout mDotLayout;
private Button mNextBtn;
private Button mBackBtn;
private TextView[] mDots;
private SliderAdapter sliderAdapter;
private int mCurrentPage;
private int Check = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setTheme(R.style.NoActionBarCustom);
setContentView(R.layout.activity_splash);
mSlidePager = (ViewPager) findViewById(R.id.slideViewPager);
mDotLayout = (LinearLayout) findViewById(R.id.dotsLayout);
mNextBtn = (Button) findViewById(R.id.nextBtn);
mBackBtn = (Button) findViewById(R.id.prevBtn);
sliderAdapter = new SliderAdapter(this);
mSlidePager.setAdapter(sliderAdapter);
addDotsIndicator(0);
mSlidePager.addOnPageChangeListener(viewListener);
//OnClickListeners
mNextBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mSlidePager.setCurrentItem(mCurrentPage + 1);
Check = Check + 1;
if(Check == 3)
{
Intent intent = (new Intent(SplashActivity.this, LoginActivity.class));
startActivity(intent);
}
}
});
mBackBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Check = Check -1;
mSlidePager.setCurrentItem(mCurrentPage - 1);
}
});
}
public void addDotsIndicator(int position){
mDots = new TextView[3];
mDotLayout.removeAllViews();
for(int i = 0; i < mDots.length; i++)
{
mDots[i] = new TextView(this);
mDots[i].setText(Html.fromHtml("•"));
mDots[i].setTextSize(35);
mDots[i].setTextColor(getResources().getColor(R.color.colorTransparentWhite));
mDotLayout.addView(mDots[i]);
}
if(mDots.length > 0)
{
mDots[position].setTextColor(getResources().getColor(R.color.colorWhite));
}
}
ViewPager.OnPageChangeListener viewListener = new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int i) {
addDotsIndicator(i);
mCurrentPage = i;
if(i == 0){
mNextBtn.setEnabled(true);
mBackBtn.setEnabled(false);
mBackBtn.setVisibility(View.INVISIBLE);
mNextBtn.setText("NEXT");
mBackBtn.setText("");
}
else if (i == mDots.length -1)
{
mNextBtn.setEnabled(true);
mBackBtn.setEnabled(true);
mBackBtn.setVisibility(View.VISIBLE);
mNextBtn.setText("FINISH");
mBackBtn.setText("BACK");
}
else
{
mNextBtn.setEnabled(true);
mBackBtn.setEnabled(true);
mBackBtn.setVisibility(View.INVISIBLE);
mNextBtn.setText("NEXT");
mBackBtn.setText("BACK");
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
};
}
我的 AndroidManifest.XML 文件如下所示:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.adamf.authtest">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_appiconhhh_round"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_appiconhhh"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".SplashActivity"
android:theme="@style/NoActionBarCustom" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".LoginActivity" android:exported="true"/>
<activity android:name=".ClientInfo" android:exported="true"/>
<activity android:name=".ClientEditInfo" android:exported="true"/>
<activity android:name=".CalendarActivity" android:exported="true"/>
</application>
slide_layout.xml 看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/slide_image"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_marginTop="50dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
app:srcCompat="@drawable/calen_icon" />
<TextView
android:id="@+id/slide_heading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_below="@+id/slide_image"
android:layout_centerHorizontal="true"
android:text="HEADING"
android:textSize="30dp"/>
<TextView
android:id="@+id/slide_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/slide_heading"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:paddingLeft="40dp"
android:paddingRight="40dp"
android:text="bunch of efhdfkfhdf this h eherkjeh this is whereh te
description will go"
android:textAlignment="center"
android:textSize="20dp" />
</RelativeLayout>
activity_splash.xml 看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/slide_image"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_marginTop="50dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
app:srcCompat="@drawable/calen_icon" />
<TextView
android:id="@+id/slide_heading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_below="@+id/slide_image"
android:layout_centerHorizontal="true"
android:text="HEADING"
android:textSize="30dp"/>
<TextView
android:id="@+id/slide_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/slide_heading"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:paddingLeft="40dp"
android:paddingRight="40dp"
android:text="bunch of efhdfkfhdf this h eherkjeh this is whereh te
description will go"
android:textAlignment="center"
android:textSize="20dp" />
</RelativeLayout>
我试图让我的应用程序从这个初始屏幕开始,然后进入我的登录页面,但是一旦调用 activity,应用程序就会崩溃,我不知道为什么。我在控制台中也没有收到任何错误,并且我已经从我的另一个应用程序中复制了这段代码,它运行得非常好。我试过让我的 loginactivity 重定向到初始屏幕以及让初始屏幕首先启动,但一旦它调用应用程序崩溃。
我的问题是,有人能发现这段代码有什么问题吗?可能是为什么它不会 运行 的问题?
我试过使用模拟器和我的phone,但同样的事情发生了,所以它一定是代码相关的...
谢谢
编辑:
Logcat 错误:
04-30 13:45:35.957 26651-26651/? E/Zygote: isWhitelistProcess - Process is
Whitelisted
04-30 13:45:35.961 26651-26651/? W/SELinux: SELinux selinux_android_compute_policy_index : Policy Index[2], Con:u:r:zygote:s0 RAM:SEPF_SM-G955F_8.0.0_0002, [-1 -1 -1 -1 0 1]
04-30 13:45:35.961 26651-26651/? I/SELinux: SELinux: seapp_context_lookup: seinfo=untrusted, level=s0:c512,c768, pkgname=com.example.adamf.authtest
04-30 13:45:35.965 26651-26651/? I/zygote64: Late-enabling -Xcheck:jni
04-30 13:45:36.028 26651-26651/? D/ActivityThread: Added TimaKeyStore provider
04-30 13:45:36.242 26651-26676/com.example.adamf.authtest I/vndksupport: sphal namespace is not configured for this process. Loading /vendor/lib64/egl/libGLES_mali.so from the current namespace instead.
04-30 13:45:36.263 26651-26676/com.example.adamf.authtest D/libEGL: loaded /vendor/lib64/egl/libGLES_mali.so
04-30 13:45:36.310 26651-26651/com.example.adamf.authtest D/FirebaseApp: com.google.firebase.crash.FirebaseCrash is not linked. Skipping initialization.
04-30 13:45:36.354 26651-26651/com.example.adamf.authtest V/FA: Registered activity lifecycle callback
04-30 13:45:36.355 26651-26651/com.example.adamf.authtest I/FirebaseInitProvider: FirebaseApp initialization successful
04-30 13:45:36.358 26651-26651/com.example.adamf.authtest I/InstantRun: starting instant run server: is main process
04-30 13:45:36.381 26651-26681/com.example.adamf.authtest V/FA: Cancelling job. JobID: -1634935714
04-30 13:45:36.397 26651-26681/com.example.adamf.authtest V/FA: Collection enabled
04-30 13:45:36.397 26651-26681/com.example.adamf.authtest V/FA: App package, google app id: com.example.adamf.authtest, 1:710221974396:android:d5035470e16ba2b6
04-30 13:45:36.399 26651-26681/com.example.adamf.authtest I/FA: App measurement is starting up, version: 12211
04-30 13:45:36.399 26651-26681/com.example.adamf.authtest I/FA: To enable debug logging run: adb shell setprop log.tag.FA VERBOSE
04-30 13:45:36.399 26651-26681/com.example.adamf.authtest I/FA: To enable faster debug mode event logging run:
adb shell setprop debug.firebase.analytics.app com.example.adamf.authtest
04-30 13:45:36.399 26651-26681/com.example.adamf.authtest D/FA: Debug-level message logging enabled
04-30 13:45:36.427 26651-26681/com.example.adamf.authtest V/FA: Connecting to remote service
04-30 13:45:36.439 26651-26681/com.example.adamf.authtest V/FA: Connection attempt already in progress
04-30 13:45:36.439 26651-26651/com.example.adamf.authtest V/FA: onActivityCreated
04-30 13:45:36.536 26651-26657/com.example.adamf.authtest I/zygote64: Do partial code cache collection, code=17KB, data=13KB
04-30 13:45:36.536 26651-26657/com.example.adamf.authtest I/zygote64: After code cache collection, code=17KB, data=13KB
04-30 13:45:36.536 26651-26657/com.example.adamf.authtest I/zygote64: Increasing code cache capacity to 128KB
04-30 13:45:36.546 26651-26657/com.example.adamf.authtest I/zygote64: Do partial code cache collection, code=23KB, data=15KB
04-30 13:45:36.546 26651-26657/com.example.adamf.authtest I/zygote64: After code cache collection, code=23KB, data=15KB
04-30 13:45:36.546 26651-26657/com.example.adamf.authtest I/zygote64: Increasing code cache capacity to 256KB
04-30 13:45:36.546 26651-26657/com.example.adamf.authtest I/zygote64: Method exceeds compiler instruction limit: 25337 in void org.ccil.cowan.tagsoup.HTMLSchema.<init>()
04-30 13:45:36.565 26651-26681/com.example.adamf.authtest V/FA: Connection attempt already in progress
04-30 13:45:36.567 26651-26681/com.example.adamf.authtest V/FA: Activity resumed, time: 49673345
04-30 13:45:36.570 26651-26681/com.example.adamf.authtest I/FA: Tag Manager is not found and thus will not be used
04-30 13:45:36.572 26651-26681/com.example.adamf.authtest D/FA: Logging event (FE): screen_view(_vs), Bundle[{firebase_event_origin(_o)=auto, firebase_screen_class(_sc)=SplashActivity, firebase_screen_id(_si)=-9142861890006532973}]
04-30 13:45:36.581 26651-26684/com.example.adamf.authtest D/OpenGLRenderer: HWUI GL Pipeline
04-30 13:45:36.587 26651-26651/com.example.adamf.authtest D/ViewRootImpl@2db840c[SplashActivity]: setView = DecorView@b0d545b[SplashActivity] TM=true MM=false
04-30 13:45:36.591 26651-26681/com.example.adamf.authtest V/FA: Connection attempt already in progress
04-30 13:45:36.608 26651-26651/com.example.adamf.authtest D/ViewRootImpl@2db840c[SplashActivity]: dispatchAttachedToWindow
04-30 13:45:36.627 26651-26651/com.example.adamf.authtest D/AndroidRuntime: Shutting down VM
04-30 13:45:36.632 26651-26651/com.example.adamf.authtest E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.adamf.authtest, PID: 26651
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageResource(int)' on a null object reference
at com.example.adamf.authtest.SliderAdapter.instantiateItem(SliderAdapter.java:64)
at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:1004)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1152)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1086)
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1616)
at android.view.View.measure(View.java:23279)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461)
at android.view.View.measure(View.java:23279)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6928)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:141)
at android.view.View.measure(View.java:23279)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6928)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:806)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:685)
at android.view.View.measure(View.java:23279)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6928)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at android.view.View.measure(View.java:23279)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6928)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:806)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:685)
at android.view.View.measure(View.java:23279)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6928)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at com.android.internal.policy.DecorView.onMeasure(DecorView.java:898)
at android.view.View.measure(View.java:23279)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2832)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1869)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2124)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1738)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7745)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
at android.view.Choreographer.doCallbacks(Choreographer.java:723)
at android.view.Choreographer.doFrame(Choreographer.java:658)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6938)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
滑块适配器:
package com.example.adamf.authtest;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v4.view.PagerAdapter;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class SliderAdapter extends PagerAdapter {
Context context;
LayoutInflater layoutinflater;
public SliderAdapter(Context context) {
this.context = context;
}
//Arrays
public int[] slide_images = {
R.drawable.calen_icon,
R.drawable.plan_icon,
R.drawable.team_icon
};
public String[] slide_headings = {
"CALENDAR",
"PATIENTS",
"FAMILY"
};
public String[] slide_desc = {
"View your schedule for the entire month! Clicking on a date will bring up all your jobs for that day!",
"Take a look at all the information about your patients that you will need to know, including their address, phone number and even past medications",
"Write about how your patient is sleeping, eating and keeping active. Their family members can check up on them through a separate app!"
};
@Override
public int getCount() {
return slide_headings.length;
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
return view == (RelativeLayout) o;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
layoutinflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
View view = layoutinflater.inflate(R.layout.activity_splash, container, false);
ImageView slideImageView = (ImageView) view.findViewById(R.id.slide_image);
TextView slideHeading = (TextView) view.findViewById(R.id.slide_heading);
TextView slideDescription = (TextView) view.findViewById(R.id.slide_description);
slideImageView.setImageResource(slide_images[position]);
slideHeading.setText(slide_headings[position]);
slideDescription.setText(slide_desc[position]);
container.addView(view);
return view;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((RelativeLayout)object);
}
}
在您的 SliderAdapter
中,在 instantiateItem
方法中:
View view = layoutinflater.inflate(R.layout.activity_splash, container, false);
应该是:
View view = layoutinflater.inflate(R.layout.slide_layout, container, false);