首页 > 解决方案 > Android Studio 在 startActivity() 上崩溃

问题描述

我一直在写一个相当大的项目,它相当混乱,但我只是在其中的一小部分遇到了麻烦,所以希望我不会遗漏任何东西。

开始活动.java:

    @Override
protected void onCreate(Bundle savedInstanceState) {
    setContentView(R.layout.activity_starting);
    super.onCreate(savedInstanceState);
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS)
            == PackageManager.PERMISSION_GRANTED) {
    } else
    {
        requestLocationPermission();
    }
    haveAccess();
}

private void haveAccess()
{
    Friends.readContacts(getContentResolver());

    stringArrayList = new ArrayList<Contacts>();
    int i = 0;
    while (Friends.getContacts(i).getName() != null)
    {
        stringArrayList.add(Friends.getContacts(i));
        i++;
    }
    adapter = new ColorArrayAdapter(this, R.layout.adapter_view_layout, stringArrayList);
    ListView listView = (ListView) findViewById(R.id.listView);
    listView.setAdapter((ListAdapter) adapter);

    Bundle extras = getIntent().getExtras();

    if (extras != null) {
        String message = extras.getString("message");
        Toast.makeText(StartingActivity.this, message, Toast.LENGTH_SHORT).show();
    }
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            receiver = Friends.ListofContacts[position].getNumber();
            checkIfOnline(position, receiver);
        }
    });

}
private void checkIfOnline(final int position, final String receiver)
{
    mDatabase.addValueEventListener(new ValueEventListener(){
        @Override
        public final void onDataChange(DataSnapshot snapshot) {
            if (snapshot.child(Friends.ListofContacts[position].getNumber()).hasChild("Activity")) {
                if (snapshot.child(Friends.ListofContacts[position].getNumber()).child("Activity").getValue(boolean.class)) {
                    ModalCall modalCall = new ModalCall();
                    modalCall.setCalledName(Friends.ListofContacts[position].getName());
                    modalCall.setmActionListener(StartingActivity.this);
                    modalCall.show(getSupportFragmentManager(), "modalMenu");
                } else {
                    //Toast.makeText(StartingActivity.this, "Friend is currently offline", Toast.LENGTH_SHORT).show();
                }
            } else {
                //Toast.makeText(StartingActivity.this, "This contact has not yet installed CatChat", Toast.LENGTH_SHORT).show();
            }
        }
        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            //do nothing
        }
    });
}

    @Override
public void onButtonClick(int id) {
    if (id == R.id.call) {

        // generate a token for this call
        String token = GenerateToken.generateProvisionToken("715b8b2142ee4385b37a8c0b4b752a75", "user1" + "@" + "696a11.vidyo.io", "300", "");
        String path = "Call_" + receiver;
        //createCallInDB(caller, receiver, token, path);

        Intent intent = new Intent(getBaseContext(), MainActivity.class);
        // pass two parameters to next activity
        intent.putExtra("token", token);
        intent.putExtra("path", path);
        startActivity(intent); // <-----------------------------Crash
    }
    else if (id == R.id.cancel) {
        // do nothing
    }
}

我正在尝试创建一个新活动并从我当前的活动转到MainActivity()以前工作过,但是我将单个 ListView 更改为带有文本视图和图像视图的 LinearLayout。

新的布局版本:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="100"
tools:context="com.vidyo.vidyoconnector.StartingActivity">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_weight="50"
    android:weightSum="100"
    android:orientation="horizontal">

    <ImageView
        android:id="@+id/image"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_marginStart="10dp"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="10dp" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="50dp"
        android:layout_height="60dp"
        android:layout_weight="80"
        android:layout_marginStart="10dp"
        android:gravity="fill_vertical"
        android:text="TextView1"
        android:layout_gravity="start"
        android:textStyle="bold"
        android:textSize="25dp"/>


</LinearLayout>

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:backgroundTint="@color/ic_launcher_background"
tools:context="com.vidyo.vidyoconnector.StartingActivity">


<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentTop="true"
    android:layout_alignParentStart="true"
    android:id="@+id/listView"
    android:background="@color/ic_launcher_background"/>

我使用自定义列表适配器来设置列表中的值。现在我的问题来了:从简单的 ListView 更改为 LinearLayout 后,它停止工作。一旦我尝试进入新活动,它就会崩溃。我做错什么了吗?

MainActivity.java(被调用的类):

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        mLogger.Log("onCreate");
        super.onCreate(savedInstanceState);
    }

日志消息:

2020-01-24 20:50:40.027 7167-7167/com.vidyo.vidyoconnector
D/AndroidRuntime: Shutting down VM 2020-01-24 20:50:40.028
7167-7167/com.vidyo.vidyoconnector E/AndroidRuntime: FATAL EXCEPTION:
main
    Process: com.vidyo.vidyoconnector, PID: 7167
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a
null object reference
        at com.vidyo.vidyoconnector.MainActivity$3.run(MainActivity.java:503)
        at android.app.Activity.runOnUiThread(Activity.java:6282)
        at com.vidyo.vidyoconnector.MainActivity.changeState(MainActivity.java:499)
        at com.vidyo.vidyoconnector.MainActivity.startConnect(MainActivity.java:610)
        at com.vidyo.vidyoconnector.MainActivity.onStart(MainActivity.java:324)
        at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1391)
        at android.app.Activity.performStart(Activity.java:7157)
        at android.app.ActivityThread.handleStartActivity(ActivityThread.java:2937)
        at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:180)
        at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:165)
        at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:142)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

标签: androidandroid-intent

解决方案


空对象引用上的 TextView.setText(java.lang.CharSequence)' 是因为 findviewbyid 与您的 xml 上的 textView1 不匹配。

确保您的 id 匹配并确保您在声明 textView1 的适配器中使用相同的布局。


推荐阅读