处理传递给AsyncTask.onPostExecute()的结果参数的数据

时间:2015-11-23 00:10:45

标签: android json xml http android-asynctask

我有这个私有类在我的主要活动中,并且我正在使用它将一个JSon对象从我的服务器拉到我的应用程序中。下面的代码工作正常,并将JSon对象显示为字符串。

   private class HttpAsyncTask extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... urls) {

            return httpBuild(urls[0]);
        }
        // onPostExecute displays the results of the AsyncTask.
        @Override
        protected void onPostExecute(String result) {
            Toast.makeText(getBaseContext(), "Received!", Toast.LENGTH_LONG).show();
            etResponse.setText(result);
        }
    }

我要做的是更改onPostExecute()方法,使其像webResult = result一样,其中webResult是类mainActivity的实例变量。问题是一次当我尝试在调用HTTpAsyncTask之后将下面的代码放入onCreate()方法时,我会这样做,app无法显示对象并崩溃。

    public class MainActivity extends Activity {

    private static final String mainSite = "http://mysitehere";

    private String webResult;
//    private JSONArray floorsInBuilding, roomsInGender;
//    private JSONObject room;
//    private JSONArray arrayOfFloors;
//    private JSONObject room, arrayOfRooms;

    EditText etResponse;
    TextView tvIsConnected;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // get reference to the views
        etResponse = (EditText) findViewById(R.id.etResponse);
        tvIsConnected = (TextView) findViewById(R.id.tvIsConnected);

        // check if you are connected or not
        if(isConnected()){
            tvIsConnected.setBackgroundColor(0xFF00CC00);
            tvIsConnected.setText("You are conncted");
        }
        else{
            tvIsConnected.setText("You are NOT conncted");
        }

        // call AsynTask to perform network operation on separate thread
        new HttpAsyncTask().execute(this.buildBuildingAddress(8));
        Toast.makeText(getBaseContext(), "Received!", Toast.LENGTH_LONG).show();
        etResponse.setText(WebResult);
    }

我想知道是什么使得显示结果的代码部分依赖于HttpAsyncTask。我还想知道如何获得HttpAsyncTask的结果并将其作为字符串存储在主类中。

我的代码中有很大一部分是基于这个例子的。 http://hmkcode.com/android-parsing-json-data/

对不起如果我对android的了解不是很好,但我在java中的经验更多。

2 个答案:

答案 0 :(得分:0)

答案是异步任务与onCreate()一起运行。因此,您必须创建一些等待任务完成的代码,或者您必须在result方法中操作异步任务的onPostExecute()

答案 1 :(得分:0)

如果您想等到任务结束,以便您可以使用webResult覆盖结果,那么您可以使用在UI线程上运行的onProgressUpdate的asyncTask方法。您可以参考android开发者网站了解如何使用该方法。