Я пишу довольно большой проект, и он довольно грязный, но у меня просто проблемы с небольшой его частью, поэтому, надеюсь, я ничего не упущу.
StartingActivity. 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
}
}
Я пытаюсь создать новое действие и go из моего текущего занятия в MainActivity()
, и это ранее работало, но я изменил один ListView на LinearLayout с textview и представление изображения.
Новая версия макета:
<?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"/>
I используйте настраиваемый адаптер списка для установки значений в списке. Теперь возникает моя проблема: после перехода от простого 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)