Innerクラスで作成されたリスト 'usrs'を別のリスト 'team_memebers'にコピーしようとしています。コピーした後、FORループで「team_memebers」を反復しようとしましたが、「nullオブジェクト参照」エラーが発生します。 'users'リストには、デバッグ印刷でテストされた、返されたオブジェクトが含まれています。
public class ListNodeActivity extends AppCompatActivity
{
private ParseObject parse_task=null;
private List<String> team_memebers=null;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_node);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
query.findInBackground(new FindCallback<ParseObject>() {
public void done(List<ParseObject> usrs, ParseException e) {
if (e == null) {
team_memebers = new ArrayList<String>(usrs.size());
for (ParseObject prso:usrs) {
team_memebers.add(new String(prso.getString("Username")));
}
} else {//handle the error
}
}
});
for (String str:team_memebers)
{
empolyeeSpinnerAdapter.add(str);
}
}
スタックトレース
FATAL EXCEPTION: main
Process: il.ac.shenkar.david.todolistex2, PID: 14490
Java.lang.RuntimeException: Unable to start activity ComponentInfo{il.ac.shenkar.david.todolistex2/il.ac.shenkar.david.todolistex2.ListNodeActivity}: Java.lang.NullPointerException: Attempt to invoke interface method 'Java.util.Iterator Java.util.List.iterator()' on a null object reference
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2416)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2476)
at Android.app.ActivityThread.-wrap11(ActivityThread.Java)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1344)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:148)
at Android.app.ActivityThread.main(ActivityThread.Java:5417)
at Java.lang.reflect.Method.invoke(Native Method)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:726)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:616)
Caused by: Java.lang.NullPointerException: Attempt to invoke interface method 'Java.util.Iterator Java.util.List.iterator()' on a null object reference
at il.ac.shenkar.david.todolistex2.ListNodeActivity.onCreate(ListNodeActivity.Java:116)
at Android.app.Activity.performCreate(Activity.Java:6251)
at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1107)
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2369)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2476)
at Android.app.ActivityThread.-wrap11(ActivityThread.Java)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1344)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:148)
at Android.app.ActivityThread.main(ActivityThread.Java:5417)
at Java.lang.reflect.Method.invoke(Native Method)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:726)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:616)
あなたの問題は、リストをコピーした後に反復していないことです。 query.findInBackground()
は非同期コールバックであるため、すぐには実行されません。反復ループはそのコールバックの下に[〜#〜]配置された[〜#〜]であるため、コールバックの実行後に実行されるという意味ではありません。次のように、ループをコールバック内に配置するだけです。
query.findInBackground(new FindCallback<ParseObject>() {
public void done(List<ParseObject> usrs, ParseException e) {
if (e == null) {
team_memebers = new ArrayList<String>(usrs.size());
for (ParseObject prso:usrs) {
team_memebers.add(new String(prso.getString("Username")));
}
for (String str:team_memebers)
{
empolyeeSpinnerAdapter.add(str);
}
} else {//handle the error
}
}
});