Asynctask android返回内容" doinBackground

时间:2016-10-13 08:34:41

标签: android android-asynctask return-value

我想检索变量" $ content"的内容。在我的活动中。 但我不知道如何使用我的doinbackground的返回值。 你能帮助我吗 ? 提前谢谢你

public class MainActivity extends AppCompatActivity {

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

        String restURL = "https://proxyepn-test.epnbn.net/wsapi/epn";
        RestOperation test = new RestOperation();
        test.execute(restURL);
    }

    private class RestOperation extends AsyncTask<String, Void, String> {

        //final HttpClient  httpClient = new DefaultHttpClient();
        String content;
        String error;
        ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
        String data = "";
        TextView serverDataReceived = (TextView)findViewById(R.id.serverDataReceived);
        TextView showParsedJSON = (TextView) findViewById(R.id.showParsedJSON);

       // EditText userinput = (EditText) findViewById(R.id.userinput);

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

            progressDialog.setTitle("Please wait ...");
            progressDialog.show();
        }

        @Override
        protected String doInBackground(String... params) {
            BufferedReader br = null;

            URL url;
            try {
                url = new URL(params[0]);

                URLConnection connection = url.openConnection();
                connection.setDoOutput(true);

                OutputStreamWriter outputStreamWr = new OutputStreamWriter(connection.getOutputStream());
                outputStreamWr.write(data);
                outputStreamWr.flush();

                br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                StringBuilder sb = new StringBuilder();
                String line = null;

                while((line = br.readLine())!=null) {
                    sb.append(line);
                    sb.append(System.getProperty("line.separator"));
                }

                content = sb.toString();

            } catch (MalformedURLException e) {
                error = e.getMessage();
                e.printStackTrace();
            } catch (IOException e) {
                error = e.getMessage();
                e.printStackTrace();
            } finally {
                try {
                    br.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            return content;
        }

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

            progressDialog.dismiss();

            if(error!=null) {
                serverDataReceived.setText("Error " + error);
            } else {
                serverDataReceived.setText(content);

                String output = "";
                JSONObject jsonResponse;

                try {
                    jsonResponse = new JSONObject(content);

                    JSONArray jsonArray = jsonResponse.names();

                    for (int i = 0; i < jsonArray.length(); i++) {
                        JSONObject child = jsonArray.getJSONObject(i);

                        String name = child.getString("name");
                        String number = child.getString("number");
                        String time = child.getString("date_added");

                        output = "Name = " + name + System.getProperty("line.separator") + number + System.getProperty("line.separator") + time;
                        output += System.getProperty("line.separator");
                        Log.i("content",content);

                    }

                    showParsedJSON.setVisibility(View.INVISIBLE);
                    showParsedJSON.setText(output);

                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:-2)

  1. 您可以通过传递“content”值直接调用assectask的onPostExecute方法中存在于activity中的方法。

    @Override
    
            protected void onPostExecute(String content) {
    
            Activity.yourMethod(content);
    
            }
    
  2. 如果要从asynctask返回值,可以使用

    content = test.execute(url).get();
    
  3. 但它不是asynctask的好习惯,因为它作为串行执行工作。因此,它不能满足使用asynctask进行腭化。因为get()将阻止UI线程。