动态数组的首选项活动

时间:2014-02-27 13:23:25

标签: android web-services android-asynctask preferenceactivity

从webservices获取数据,但值不会超出异步类,

公共类设置扩展了PreferenceActivity {

ListPreference lst1;
public static String[] batcharr;
public static String[] streamarr;

public Settings(){
  //  TPGetListone getlist = new TPGetListone();
  //  getlist.execute();
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.layout.settings);
    lst1 = (ListPreference) findPreference("prefStream");
    TPGetListone getlist = new TPGetListone();
    getlist.execute();
    lst1.setEntries(batcharr);
    lst1.setEntryValues(batcharr);
}

public class TPGetListone extends AsyncTask<String, Void, Void> {
    String datax = "";
    JSONArray array;
    List<String> lstbatch;
    List<String> lststream;
    private String LogStr = "Panchratna";

    @Override
    protected Void doInBackground(String... params) {
        DataHelper gd = new DataHelper("http://xxxx.com/EventGetter","http://xxxx.com/EventGetter.asmx?wsdl","http://xxxx.com/EventGetter/GetCourseList","GetCourseList");
        datax =  gd.GetData("query","SELECT batch, stream FROM batch");
        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        Log.i(LogStr, "onPostExecuteCATALOG");
        try {
            array = new JSONArray(datax);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        lstbatch = new ArrayList<String>();
        lststream = new ArrayList<String>();
        for(int i = 0; i < array.length(); i++){
            try {
                lstbatch.add(array.getJSONObject(i).getString("batch"));
                lststream.add(array.getJSONObject(i).getString("stream"));
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
         batcharr = new String[lstbatch.size()];
         streamarr = new String[lststream.size()];
        for (int i=0;i<lststream.size();i++){
            lststream.toArray(batcharr);
            lstbatch.toArray(streamarr);
        }
    }

    @Override
    protected void onCancelled(Void aVoid) {
        super.onCancelled(aVoid);
    }

    @Override
    protected void onProgressUpdate(Void... values) {
        super.onProgressUpdate(values);
    }


    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }
}
}

我知道这不是一个正确的方法, 我使用webservices获取json值并将其转换为list&lt;&gt; 通过调试,值确实来自List,即lstbatch和lststream, 和数组batcharr和streamarr, 但是当任务执行时,在创建方法中,batcharr和streamarr显示错误,

上次在活动

上使用相同的方法

请帮忙, 谢谢

2 个答案:

答案 0 :(得分:0)

将此代码移到Async上方,可以访问

 List<String> lstbatch;
List<String> lststream;


public class TPGetListone extends AsyncTask<String, Void, Void> {
String datax = "";
JSONArray array;
//--> Remove to Up    -->List<String> lstbatch;
//--> Remove to Up    -->List<String> lststream;
private String LogStr = "Panchratna";

修改

 for (int i=0;i<lststream.size();i++){
        batcharr[i]=lststream.get(i);
        streamarr[i]=lstbatch.get(i);
    }

答案 1 :(得分:0)

把这段代码

lst1.setEntries(batcharr);     lst1.setEntryValues(batcharr);

in

PostExecute方法

 protected void onPostExecute(Void aVoid) {
        Log.i(LogStr, "onPostExecuteCATALOG");
        try {
            array = new JSONArray(datax);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        lstbatch = new ArrayList<String>();
        lststream = new ArrayList<String>();
        for(int i = 0; i < array.length(); i++){
            try {
                lstbatch.add(array.getJSONObject(i).getString("batch"));
                lststream.add(array.getJSONObject(i).getString("stream"));
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
         batcharr = new String[lstbatch.size()];
         streamarr = new String[lststream.size()];
        for (int i=0;i<lststream.size();i++){
            lststream.toArray(batcharr);
            lstbatch.toArray(streamarr);
        }
     ===>   lst1.setEntries(batcharr);
     ===>   lst1.setEntryValues(batcharr);
    }