-1
listviewを使用してParseデータベースからユーザー名を出力しようとしています。しかし、私のコードはNullPointerExceptionを表示しており、解決方法はわかりません。助けてください !ArrayAdapterとlistviewのNullpointerException
のJava:送信信号:I /プロセスcom.parse.starter 27.020 23273から23273 /:
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);
}
}
とエラー:
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)
9月30日02:00。 PID:23273 SIG:デシベルでのユーザー名の9
マイLogcat:
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'は 'バックグラウンド'スレッドで 'done'を実行している可能性があります。したがって、(UIスレッドで書かれた) 'arrayAdapter'値は表示されません。 –