2016-07-09 18 views
0

解決方法がわからないという質問がありました。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); 
     } 
    } 
} 
+0

コードの画像をアップロードする代わりに、コードを入力する方が良いでしょう。エディタはコードの書式設定オプションを提供します。 –

+0

質問をしたときにコードを入力する方法を知らなかったことは申し訳ありません –

+0

質問を編集し、画像を削除し、コードを貼り付け、コードを選択してCtrl + k(cmd + kマック)。 –

答えて

0

Asynctaskは非同期に実行されます。バックグラウンドスレッドで長時間実行される操作(doInBackgroundはメインスレッドとは別のスレッドで実行されます)を実行し、結果を使用してメインスレッド(onPostExecuteはメインスレッド上で実行)で操作を実行します。 あなたが望むのは、onCreateではなく、onPostExecuteで2D配列の操作を実行することです。

+0

onClickメソッドはonPostExecuteで使用できますか? –

+0

onClickはonCreateで設定できます。ボタンをクリックすると呼び出されます。あなたはテキストだけを持っているので、onPostExecuteでsetTextを実行する必要があります。 – user3215142

+0

つまり、すべての私の関数は、2次元配列データを含むonPostExecuteに書き込む必要がありますか? –

関連する問題