2017-09-17 8 views
0

をカスタマイズカント私は2つのクラスがあります。 MainActivityクラスをし、それが私のリストビューをカスタマイズするには、次のコードが含まれていますが、私はいつもですエラーと私は間違っているか分からない。 私はしようとしている応答変数から文字列を取得し、JSONObjectに変換し、私のcustomadapterで使用するArraylistを埋めるが、問題はそれがcourant arraylistにコピーされた私は間違っているか分からない。私はStringRequestから返された文字列を得たが、私は別の変数に文字列をコピーしたりしても、私のリストビュー

public class MainActivity extends AppCompatActivity { 
ArrayList<String> title_list = new ArrayList<String>(); 
ArrayList<String> c_count_data = new ArrayList<String>(); 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    final ListView lv = (ListView) findViewById(R.id.lv00); 
    setContentView(R.layout.activity_main); 

    StringRequest request = new StringRequest(Request.Method.POST, (new MY_URL().MY_URL)+"api/api_count.php", new Response.Listener<String>() { 


     @Override 
     public void onResponse(String response){ 
      response = response.replaceAll("\\s+",""); 
      JSONArray jArray; 
      JSONObject jObject; 

      try { 
       jArray = new JSONArray(response); 
       jObject = jArray.getJSONObject(0); 
       c_count_data.add(0, (String) jObject.get("NAM")); 
       c_count_data.add(1, (String) jObject.get("SAM")); 
       c_count_data.add(2, (String) jObject.get("EUO")); 
       c_count_data.add(3, (String) jObject.get("ASI")); 
       c_count_data.add(4, (String) jObject.get("AFR")); 
       c_count_data.add(5, (String) jObject.get("AUS")); 


      } catch (Exception e) { 
       e.printStackTrace(); 
      } 


     } 



    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      Toast.makeText(ListView00Activity.this, error.toString(), Toast.LENGTH_SHORT).show(); 

     } 
    }); 

    RequestQueue re = Volley.newRequestQueue(this); 
    re.add(request); 


      title_list.add(0, "North America"); 
      title_list.add(1, "South America"); 
      title_list.add(2, "Europe"); 
      title_list.add(3, "Asia"); 
      title_list.add(4, "Africa"); 
      title_list.add(5, "Australia"); 
      lv.setAdapter(new CustomAdapter(MainActivity.this,this,title_list,c_count_data)); 

} 

}

私のアダプタクラスがある:

Context context; 
Activity activity; 
ArrayList<String> n_arr = new ArrayList<String>(); 
ArrayList<String> c_arr = new ArrayList<String>(); 

public CustomAdapter(Context context, Activity activity, ArrayList<String> n_arr, ArrayList<String> c_arr) { 
    this.context = context; 
    this.activity = activity; 
    this.n_arr = n_arr; 
    this.c_arr = c_arr; 
} 

@Override 
public int getCount() { 
    return n_arr.size(); 
} 

@Override 
public Object getItem(int i) { 
    return n_arr.get(i); 
} 

@Override 
public long getItemId(int i) { 
    return i; 
} 

@Override 
public View getView(int i, View view, ViewGroup viewGroup) { 

    LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE); 
    View v = inflater.inflate(R.layout.model, (ViewGroup) activity.findViewById(R.id.parent_viewgroup),false); 
    TextView count = (TextView) v.findViewById(R.id.tit); 
    TextView name = (TextView) v.findViewById(R.id.desc); 
    count.setText(c_arr.get(i)); 
    name.setText(n_arr.get(i)); 




    return v; 








}} 

エラーメッセージは次のとおりです。

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference 
        at com.mypro.theproject_v1.MainActivity.onCreate(MainActivity.java:89) 

がADVAであなたの感謝の助けをありがとうNCE ...

+0

私の答えを確認することができます。 @Ahmed – KeLiuyue

答えて

0

ちょうど例外から判断すると、私はあなたのビューを見つけることができません。つまり final ListView lv = (ListView) findViewById(R.id.lv00);lv.setAdapter(...)が呼び出されたときにlvがnullであることを言うと思います。最初に確認してください。

lv.setAdapter(...)が呼び出され、NPEがヒットしたときにリクエストがキューに残っている可能性が高いため、リクエストとアダプタのコード全体が実行されません。

0

この

変更

final ListView lv = (ListView) findViewById(R.id.lv00); 
setContentView(R.layout.activity_main); 

setContentView(R.layout.activity_main); 
final ListView lv = (ListView) findViewById(R.id.lv00); 
に注意
findViewById方法を試してみては setContentViewメソッドの後に呼び出す必要があります。

関連する問題