listview를 사용하여 구문 분석 데이터베이스에서 사용자 이름을 인쇄하려고합니다. 하지만 내 코드는 NullPointerException을 보여 주며 해결 방법을 모른다. 도와주세요 !ArrayAdapter 및 listview에서 NullpointerException이 발생했습니다.
자바 :
package com.parse.starter;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import com.parse.FindCallback;
import com.parse.ParseException;
import com.parse.ParseQuery;
import com.parse.ParseUser;
import java.util.ArrayList;
import java.util.List;
public class Show_user_lists extends AppCompatActivity {
ArrayList<String> userNames;
ArrayAdapter arrayAdapter;
ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_users_list);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ActionBar bar = getSupportActionBar();
bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#26A69A")));
bar.setDisplayHomeAsUpEnabled(true);
listView = (ListView) findViewById(R.id.listView);
ParseQuery<ParseUser> query = ParseUser.getQuery();
query.whereNotEqualTo("username", ParseUser.getCurrentUser().getUsername());
query.addAscendingOrder("username");
userNames = new ArrayList<>();
arrayAdapter = new ArrayAdapter(getApplicationContext(), android.R.layout.simple_list_item_activated_1, userNames);
query.findInBackground(new FindCallback<ParseUser>() {
@Override
public void done(List<ParseUser> objects, ParseException e) {
if (e == null) {
if (objects.size() > 0) {
for (ParseUser user : objects) {
userNames.add(user.getUsername());
Log.i("uname", String.valueOf(user.getUsername()));
}
try {
listView.setAdapter(arrayAdapter);
} catch (Exception ex) {
ex.printStackTrace();
}
}
} else {
e.printStackTrace();
}
}
});
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//int id = item.getItemId();
return super.onOptionsItemSelected(item);
}
}
그리고 오류 : 00 :
09-30 02:00:24.649 23273-23273/com.parse.starter E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.parse.starter, PID: 23273
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
at com.parse.starter.Show_user_lists$1.done(Show_user_lists.java:47)
at com.parse.starter.Show_user_lists$1.done(Show_user_lists.java:38)
at com.parse.ParseTaskUtils$2$1.run(ParseTaskUtils.java:116)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
2월 9일에서 30일까지 27.020 23273-23273가/com.parse.starter I/프로세스 : 전송 신호. PID : 23273 SIG : DB에서 사용자 이름에 대한 9
내 로그 캣 :
09-30 03:02:17.514 22462-22462/com.parse.starter I/uname: qWtBPbvjcPwQ1YVxdqvfkEsBE
09-30 03:02:17.515 22462-22462/com.parse.starter I/uname: qwerty
09-30 03:02:17.515 22462-22462/com.parse.starter I/uname: satsan
이 줄에 관하여 : "listView = (ListView) findViewById (R.id.listView);" DB에서 해당 ID에 대한보기를 찾았습니까? – Matt
예 ... 나는 arraylist에서 이름을 시도하고 로그 아웃했습니다. 작동합니다. –
스레딩 문제 인 것처럼 보입니다.이 'FindCallback'이 '백그라운드'스레드에서 '완료'를 실행 중일 수 있습니다. 그러므로 UI 스레딩에서 작성된 'arrayAdapter'값이 표시되지 않습니다. –