-1

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 
+0

이 줄에 관하여 : "listView = (ListView) findViewById (R.id.listView);" DB에서 해당 ID에 대한보기를 찾았습니까? – Matt

+0

예 ... 나는 arraylist에서 이름을 시도하고 로그 아웃했습니다. 작동합니다. –

+0

스레딩 문제 인 것처럼 보입니다.이 'FindCallback '이 '백그라운드'스레드에서 '완료'를 실행 중일 수 있습니다. 그러므로 UI ​​스레딩에서 작성된 'arrayAdapter'값이 표시되지 않습니다. –

답변

0

그것은 아마도으로 문제를 해결할 수

arrayAdapter = new ArrayAdapter(getApplicationContext(), android.R.layout.simple_list_item_activated_1, userNames); 

arrayAdapter = new ArrayAdapter(Show_user_lists.this, android.R.layout.simple_list_item_activated_1, userNames); 

으로 교체 .

+0

여전히이 Nullpointer 예외가 발생합니다. –

관련 문제