2015-02-12 2 views
0

Я пытаюсь скопировать элементы (имя) из JSONArray в ArrayList, а затем из ArrayList в Spinner.I не получает сообщение об ошибке, но при выполнении Spinner не отображает никаких элементов. Как Spinner может отображать элементы?Spinner не отображает элементы

package com.example.klarity; 

import java.util.ArrayList; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.ArrayAdapter; 
import android.widget.Spinner; 

import com.example.klarity1.R; 

    public class MainActivity extends ActionBarActivity { 

    Spinner practiceSpin; 
    Spinner projectSpin; 
    JSONObject projDet; 
    JSONArray projArr; 
    ArrayList<String> arrData=new ArrayList<String>(); 
    int[] project; 



    public final static String JSON_DATA = 
      "{" 
        + " \"project\": [" 
        + " {"     
        + "  \"name\": \"xxxx\""     
        + " }," 
        + " {" 
        + "  \"name\": \"yyyy\"" 
        + " },"             //JSONArray created 
        + " {" 
        + "  \"name\": \"zzzz\"" 
        + " }," 
        + " {" 
        + "  \"name\": \"hhhh\"" 
        + " }" 
        + " ]" 
        + "}"; 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 



    try { 
      projDet=new JSONObject(JSON_DATA); 
      projArr=projDet.getJSONArray("project"); 

      ArrayList<String> arrData=new ArrayList<String>(); 
      for(int n = 0; n < projArr.length(); n++) 
      { 
       //JSONObject projDet = projArr.getJSONObject(n); 
       arrData.add(projArr.getJSONObject(n).getString("name")); 
      } 


     } catch (JSONException e) { 
      e.printStackTrace(); 
      System.out.println(e.getMessage()); 
      System.out.println("exception occured"); 
     } 


    try { 
     practiceSpin=(Spinner) findViewById(R.id.spinnerPractice); 
     ArrayAdapter<CharSequence> ar= ArrayAdapter.createFromResource(this,R.array.practices ,android.R.layout.simple_list_item_1); 
     ar.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line); 
     practiceSpin.setAdapter(ar); 

     /*projectSpin=(Spinner) findViewById(R.id.spinnerProject); 
     ArrayAdapter<CharSequence> ar1= ArrayAdapter.createFromResource(this,R.array.projects ,android.R.layout.simple_list_item_1); 
     ar1.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line); 
     projectSpin.setAdapter(ar1);*/ 

     ArrayAdapter<String> adapter_proj = new ArrayAdapter<String>(this,R.array.projects, android.R.layout.simple_spinner_item,arrData);  //"The constructor ArrayAdapter<String>(MainActivity, int, int, JSONArray) 
     adapter_proj.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     projectSpin.setAdapter(adapter_proj); 
    } catch (Exception e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
     System.out.println(e1.getMessage()); 
     System.out.println("exception occured in 2nd catch"); 
    } 
    finally{ 

    } 






} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
    } 
} 
+0

Почему вы используете 2 arraylist. 1 в создании и 1 глобально. Thats создание проблемы – MRX

+0

Вы проверили свой Arraylist, его всегда возвращающийся пустой arraylist Thats создает проблему. Кроме того, вы должны использовать ArrayAdapter adapter_proj = new ArrayAdapter (это, android.R.layout.simple_spinner_item, arrData); для установки адаптера. Просто проверьте ваш синтаксический анализ – MRX

+0

@MRX .. Да, я решил, что ошибка..следует только 1 массивList, который является глобальным. Спасибо за вашу помощь. Удалили код ... и теперь все элементы JSONArray вступают в arrData, т.е. arrayList. , –

ответ

0

Проблема с местным varibable называется arrData: Заменить

ArrayList<String> arrData=new ArrayList<String>();

с этим

this.arrData=new ArrayList<String>(); (убрать ArrayList).

arrData существует только в первом блоке try-cacth, а во втором блоке try-catch arrData был acctualy поле вашего класса. Я настоятельно рекомендую вам использовать «это» как можно больше, чтобы избежать подобной проблемы.

Смежные вопросы