2017-09-17 37 views
0

我有两个类: MainActivity类别,它包含以下代码定制我的列表视图,但我始终有一个错误,我不知道错在哪里。 我想要做的是从响应变量中获取一个字符串,然后将其转换为JSONObject并填写Arraylist以将其与我的customadapter一起使用,但问题是它coudnt复制到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

单从外来看,我会说,lv为空时lv.setAdapter(...)被调用,即 final ListView lv = (ListView) findViewById(R.id.lv00);没有找到你的看法。请先检查一下。

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方法调用。

相关问题