Android - 将数据放入asynctask中的数组中

时间:2016-07-09 04:05:35

标签: java android arrays android-studio android-asynctask

我得到了一个我不知道如何解决的问题。

我正在努力实现提出问题'并且回答'进入2D数组,但它无法将数据放入asyncTask中的2D数组。

我希望我能提出问题'并且回答'将JSON对象放入2D数组中。然后在OnCreate方法中使用数组。

public class MainActivity extends Activity {
    String[][] array = new String[10][4];
    private TextView tvData;
    int qnum = 1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        String quest;
        String ans;
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new JSONTask().execute("http://itdmoodle.hung0530.com/ptms/questions_ws.php");
        Button btnNext = (Button) findViewById(R.id.btnNext);
        tvData = (TextView) findViewById(R.id.textView);
        for(int i=0;i<10;i++){
            int z = i+1;
            array[i][0] = String.valueOf(z);
        }
        quest = array[0][1];
        ans = array[0][2];
        tvData.setText(quest);
        btnNext.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
            }
        });
    }
    public class JSONTask extends AsyncTask<String, String, String>{
        @Override
        protected String doInBackground(String... params) {
            HttpURLConnection conn = null;
            BufferedReader reader = null;
            try{
                URL url = new URL(params[0]);
                conn = (HttpURLConnection) url.openConnection();
                conn.connect();
                InputStream stream = conn.getInputStream();
                reader = new BufferedReader(new InputStreamReader(stream));
                StringBuffer buffer = new StringBuffer();
                String line ="";
                while((line = reader.readLine()) != null){
                    buffer.append(line);
                }
                String Json = buffer.toString();
                JSONObject jsonObject = new JSONObject(Json);
                JSONArray jsonArray = jsonObject.getJSONArray("Questions");
                StringBuffer bufferQues = new StringBuffer();
                StringBuffer bufferAns = new StringBuffer();
                for(int i=0;i<jsonArray.length();i++) {
                    JSONObject otherJson = jsonArray.getJSONObject(i);
                    String question = otherJson.getString("question");
                    String answer = otherJson.getString("answer");
                    bufferQues.append(question);
                    bufferAns.append(answer);
                    array[i][1] = bufferQues.toString();
                    array[i][2] = bufferAns.toString();
                }
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            } finally{
                if(conn != null){
                    conn.disconnect();
                }
                try{
                    if(reader != null){
                        reader.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return null;
        }
        @Override
        protected void onPostExecute(String result){
            super.onPostExecute(result);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

Asynctask异步执行。它允许您在后台线程上执行长时间运行的操作(doInBackground在主线程上运行的单独线程上)并使用结果在主线程上执行操作(onPostExecute在主线程上运行)。 你想要的是在onPostExecute中对你的2D数组执行操作而不是onCreate。