如何将.execute转换为仅在textview上显示,而不是

时间:2017-02-17 06:44:22

标签: java android json

adminpage.java

  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_admin_page);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);


    mTextView = (TextView) findViewById(R.id.dataList);
    Button button = (Button) findViewById(R.id.rf);

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // new JSONTask().execute("https://jsonparsingdemo-cec5b.firebaseapp.com/jsonData/moviesDemoItem.txt");
            new JSONTask().execute("https://jsonparsingdemo-cec5b.firebaseapp.com/jsonData/moviesDemoList.txt");

        }
    });

}
 public static class JSONTask extends AsyncTask<String, String, String> {
    @Override
    protected String doInBackground(String... params) {
        HttpURLConnection connection = null;
        BufferedReader reader = null;

        try {
            URL url = new URL(params[0]);
            connection = (HttpURLConnection) url.openConnection();
            connection.connect();

            InputStream stream = connection.getInputStream();

            reader = new BufferedReader(new InputStreamReader(stream));

            StringBuffer buffer = new StringBuffer();

            String line = "";
            while ((line = reader.readLine()) != null) {
                buffer.append(line);
            }

            String finalJson = buffer.toString();

            JSONObject parentObject = new JSONObject(finalJson);
            JSONArray parentArray = parentObject.getJSONArray("movies");

            StringBuffer finalBufferedData = new StringBuffer();
            for (int i = 0; i < parentArray.length(); i++) {
                JSONObject finalObject = parentArray.getJSONObject(i);
                String movieName = finalObject.getString("movie");
                int year = finalObject.getInt("year");
                finalBufferedData.append(movieName + " - " + year + "\n");
            }
            //JSONObject finalObject = parentArray.getJSONObject(0);


            return finalBufferedData.toString();

            //return buffer.toString();

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        } finally {
            if (connection != null) {
                connection.disconnect();
            }
            try {
                if (reader != null) {
                    reader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }


    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        mTextView.setText(result);


    }


}

基于此,我可以得出结论。

1)JSONTASK将获取url并将它们分成不同的字符串并将它们链接在一起并返回finalBufferedData.toString();

2)onPostExecute将获取结果并将其设置为mTextView。

3)onclicklistener将运行该功能并执行步骤2并显示。

问题!

  • 我没有在代码中看到调用函数onPostExecute(String result)的任何地方&lt; - 结果是什么?它是返回finalBufferedData.toString()

  • 我在另一个活动中运行相同的功能,如何在TextView中显示onClicklistener来执行它。

1 个答案:

答案 0 :(得分:0)

<强> 1 即可。是..它是返回值(finalBufferedData.toString())。它是doInBackground方法的输出(结果/返回)。

<强> 2 即可。调用onCreate或onResume,无需onClick即可执行。的例如: -

 button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });

// put the AsyncTask call here