gpt4 book ai didi

java - 搬运装置旋转

转载 作者:行者123 更新时间:2023-12-02 00:16:25 26 4
gpt4 key购买 nike

我试图让我的应用程序处理设备旋转,但当我在 mainActivity 的 onCreate 方法上添加以下代码时,它总是崩溃。这是我收到的错误。我该如何解决这个问题? :

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ArrayAdapter.clear()' on a null object reference

2019-09-25 06:58:16.743 10444-10444/com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.myapplication, PID: 10444
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ArrayAdapter.clear()' on a null object reference
at com.example.myapplication.MainActivity$1.onChanged(MainActivity.java:48)
at com.example.myapplication.MainActivity$1.onChanged(MainActivity.java:44)
at androidx.lifecycle.LiveData.considerNotify(LiveData.java:113)
at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:131)
at androidx.lifecycle.LiveData.setValue(LiveData.java:289)
at androidx.lifecycle.LiveData$1.run(LiveData.java:91)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
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:930)

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
contactListView = (ListView) findViewById(R.id.contactsListView);
adapter = new ArrayAdapter<Contact>(this,android.R.layout.simple_list_item_1, contacts);
contactListView.setAdapter(adapter);
contactListView.setOnItemClickListener(this);
setContentView(R.layout.activity_main);
}

最佳答案

您最好将 LiveData 放置在 ViewModel 中,并在 Activity 中观察它,可能是在 onCreate() 方法中。让我向您展示如何在 ViewModel 中正确使用 LiveData,

你的ViewModel

public class YourViewModel extends ViewModel {

// Create a LiveData with a List of Contact
private MutableLiveData<List<Contact>> contactList = new MutableLiveData<>();

// encapsulated with immutable live data
public LiveData<List<Contact>> getContactList() {
return contactList;
}

// call this method with a list of new contacts whenever you need to refresh your list
public void updateContactList(List<Contact> list) {
contactList.setValue(list);
}

// Rest of the ViewModel...
}

您的 Activity

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
contactListView = (ListView) findViewById(R.id.contactsListView);

yourViewModel = ViewModelProviders.of(this).get(YourViewModel.class);

if(contacts==null) contacts = new ArrayList<>();

adapter = new ArrayAdapter<Contact>(this,android.R.layout.simple_list_item_1, contacts);
contactListView.setAdapter(adapter);
contactListView.setOnItemClickListener(this);

yourViewModel.getContactList().observe(this, contactObserver);
}


Observer<List<Contact>> contactObserver = new Observer<List<Contact>>() {
@Override
public void onChanged(@Nullable List<Contact> newContacts) {
if(adapter != null && newContacts != null) {
adapter.clear();
adapter.addAll(newContacts);
}
}
};

通过上述方式,您可以确保 liveData 与 Activity 生命周期相关联,并且它在 onChanged() 方法中获得非 null adapter 。希望我的回答能够帮助您解决您的问题。

关于java - 搬运装置旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58087402/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com