2017-08-15 21 views
0

我正面临着来自服务器的JSON数据中的问题保存在ArrayList在自定义适配器中调用ArrayList时返回null。自定义适配器用于在android中的微调器中列出数据。当arraylist在自定义适配器中调用时,保存在arraylist中的数据返回null?

public class PhotoCommnFragment extends android.support.v4.app.Fragment { 
    EditText rechargeMobileNumber,rechargeAmount; 
    Spinner selectMenu; 
    int flags[] = {R.drawable.airteltv, R.drawable.aircel, R.drawable.dishtv, R.drawable.sundirect, R.drawable.tatasky, R.drawable.videocon}; 
    List<SpinnerMenu> selectedNetwork = new ArrayList<>(); 
    public PhotoCommnFragment() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_tab_mobile, container, false); 
     mobileRecahrgeHistory(); 
     rechargeMobileNumber = (EditText)rootView.findViewById(R.id.recharge_mobile_number); 
     rechargeAmount = (EditText)rootView.findViewById(R.id.recharge_amount); 
     selectMenu = (Spinner)rootView.findViewById(R.id.selectNetwork); 
     settingSpinnerDropDown(); 
     return rootView; 
    } 

    public void mobileRecahrgeHistory(){ 
     Ion.with(this) 
       .load("http://192.168.1.105/TotalRecharge/?api=ol&uid=1") 
       .asJsonObject().withResponse() 
       .setCallback(new FutureCallback<Response<JsonObject>>() { 
        @Override 
        public void onCompleted(Exception e, Response<JsonObject> result) { 
         JSONObject json = null; 

         try { 
          json = new JSONObject(result.getResult().toString()); 
         } catch (JSONException e1) { 
          e1.printStackTrace(); 
         } 
         // Create the root JSONObject from the JSON string. 
         JSONObject jsonRootObject = null; 
         jsonRootObject = json.optJSONObject("DS"); 

         //Get the instance of JSONArray that contains JSONObjects 
         JSONArray jsonArray = jsonRootObject.optJSONArray("LST"); 

         //Iterate the jsonArray and print the info of JSONObjects 
         for(int i=0; i < jsonArray.length(); i++){ 
          JSONObject jsonObject = null; 
          try { 
           jsonObject = jsonArray.getJSONObject(i); 
          } catch (JSONException e1) { 
           e1.printStackTrace(); 
          } 
          String iph = null; 

          String oid = jsonObject.optString("OID").toString(); 
          String ocd = jsonObject.optString("OCD").toString(); 
          String opd = jsonObject.optString("OPE").toString(); 
          String mil = jsonObject.optString("MIL").toString(); 
          String mxl = jsonObject.optString("MXL").toString(); 
          try { 
           iph = jsonObject.getString("IPH").toString(); 
          } catch (JSONException e1) { 
           e1.printStackTrace(); 
          } 

          String urldisplay = "http://192.168.1.105/TotalRecharge/"+iph; 
          Bitmap mIcon11 = null; 
          try { 
           InputStream in = new java.net.URL(urldisplay).openStream(); 
           mIcon11 = BitmapFactory.decodeStream(in); 
          } catch (Exception e3) { 
           e3.printStackTrace(); 
          } 
          SpinnerMenu spinnerData = new SpinnerMenu(); 
          spinnerData.setOid(oid); 
          spinnerData.setOcd(ocd); 
          spinnerData.setOpd(opd); 
          spinnerData.setMil(mil); 
          spinnerData.setMix(mxl); 
          spinnerData.setImage(mIcon11); 

          selectedNetwork.add(spinnerData); 

         } 

        } 

       }); 
    } 


    public void settingSpinnerDropDown(){ 
     Fragment_DTH_Main_Spinner_Adapter customAdapter=new Fragment_DTH_Main_Spinner_Adapter(getActivity(),R.layout.fragment_dth_main_spinner_items,R.id.serviceName,selectedNetwork); 
     selectMenu.setAdapter(customAdapter); 
    } 

在上面的代码来自服务器的JSON数据在ArrayList中保存在selectedNetwork.add(spinnerData);,但是当我打电话里面保存的数组列表数据:在这个

Fragment_DTH_Main_Spinner_Adapter customAdapter=new Fragment_DTH_Main_Spinner_Adapter(getActivity(),R.layout.fragment_dth_main_spinner_items,R.id.serviceName,selectedNetwork); 

ArrayList中被返回null时数据通过自定义适配器传递。

当我通过调试检查JSON数据保存在ArrayList中,但是当它在适配器中调用时返回null。

我不知道这是什么错误。请帮我解决这个问题。 `

下面的代码是在自定义adatapter

public class Fragment_DTH_Main_Spinner_Adapter extends ArrayAdapter<SpinnerMenu> { 
     Context context; 
    int flags[]; 
    List<SpinnerMenu> countryNames; 
    LayoutInflater inflter; 

    public Fragment_DTH_Main_Spinner_Adapter(FragmentActivity activity, int resouceId, int textviewId, List<SpinnerMenu> data) { 


    //  super(activity, R.layout.fragment_dth_main_spinner_items,userstories); 
     super(activity,resouceId,textviewId,data); 
     this.countryNames = data; 
    } 

    public class ViewHolder 
    { 
     TextView names; 
     ImageView icon; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     LayoutInflater inflater = LayoutInflater.from(getContext()); 
     convertView = inflater.inflate(R.layout.fragment_dth_main_spinner_items, parent, false); 
    //  convertView = inflter.inflate(fragment_dth_main_spinner_items, null); 
     SpinnerMenu spinnerData = countryNames.get(position); 
     ViewHolder viewHolder; 
     View result; 

     if(convertView == null){ 
      viewHolder = new ViewHolder(); 
      viewHolder.icon = (ImageView) convertView.findViewById(R.id.imageView); 
      viewHolder.names = (TextView) convertView.findViewById(R.id.serviceName); 
      result = convertView; 
     } 
     else { 
      viewHolder = (ViewHolder) convertView.getTag(); 
      result = convertView; 
     } 
//  viewHolder.icon.setImageBitmap(spinnerData.getImage()); 
     viewHolder.names.setText(spinnerData.getOpd()); 
     return convertView; 
    } 
} 

在上面的代码viewHolder.name.setText设置数据();该值返回null。我尝试过但仍然返回null。我不知道这种方法有什么问题。

+0

发布您的代码为Fragment_DTH_Main_Spinner_Adapter –

回答

0

而不是将项目添加到selectedNetwork阵列,将它们添加到适配器。例如

private Fragment_DTH_Main_Spinner_Adapter customAdapter; 

@Override 
public View onCreateView(LayoutInflater inflater, 
         ViewGroup container, 
         Bundle savedInstanceState) { 


    ... 

    customAdapter = new Fragment_DTH_Main_Spinner_Adapter(getActivity(), 
     R.layout.fragment_dth_main_spinner_items, 
     R.id.serviceName, 
     new ArrayList<SpinnerMenu>()); 
} 

,然后替换:

selectedNetwork.add(spinnerData); 

customAdapter.add(spinnerData); 
0

这事,因为你的mobileRecahrgeHistory()方法调用下面的代码:

Ion.with(this) 
    .load("http://192.168.1.105/TotalRecharge/?api=ol&uid=1") 
    .asJsonObject().withResponse() 
    .setCallback(new FutureCallback<Response<JsonObject>>() { 

    ... 
    selectedNetwork.add(spinnerData); 
    ... 
    } 

这是异步。当mobileRecahrgeHistory完成时settingSpinnerDropDown();已经完成。

所以你需要告诉适配器,它的数据是用notifyDataSetChanged()这样的方法改变的。

+0

如何,我可以得到保存从ArrayList中 –

+0

你需要调用'Adapter.notifyDataSetChanged()''后selectedNetwork.add(spinnerData);' –

+0

确定我会尝试这个方法 –

相关问题