在Android中如何从Asynctask接收字符串?

时间:2016-03-16 06:21:35

标签: android android-asynctask

在我的Android项目中,我在MainActivity内:

String receivedData = new myTask().execute().get();

现在myTask - 任务是:

public class MainActivity extends Activity {
    private Button button;
    private TextView finalResult;

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

        button = (Button) findViewById(R.id.btn_do_it);
        finalResult = (TextView) findViewById(R.id.tv_result);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String receivedData = new myTask().execute().get();
                finalResult.setText(receivedData);
            }
        });
    }

    private class myTask extends AsyncTask<String, Void, String> {
        @Override
        protected Void doInBackground(Void... params) {
            Gson gson = new Gson();
            List<Myobject> newObject = new ArrayList<Myobject>();
            try {
                //here I add object valus to the list 
                newObject.add(valueadded)
            } catch {
                Exception e
            }
            //here returning the value as String
            return gson.toJson(newObject);
        }

        protected void onPostExecute(String result) {
            String receivedData = result;
        }
    }
}

receivedData 未从AsyncTask收到任何值。 为什么会这样?我做错了什么?

3 个答案:

答案 0 :(得分:1)

您的AsyncTask定义如下:

private class myTask extends AsyncTask<String, Void, Void>

最后一个通用类型是结果的类型。你有空虚。这意味着您的AsyncTask不返回值。如果你想要一个String结果,你必须这样定义:

private class myTask extends AsyncTask<String, Void, String>

这意味着您现在可以从doInBackground()返回一个String。

答案 1 :(得分:0)

尝试这样的事情

public class MainActivity extends Activity {
    String receivedData;
    private Button button;
    private TextView finalResult;

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

        button = (Button) findViewById(R.id.btn_do_it);
        finalResult = (TextView) findViewById(R.id.tv_result);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new myTask().execute().get();
            }
        });
    }

    private class myTask extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(Void... params) {
            Gson gson = new Gson();
            List<Myobject> newObject = new ArrayList<Myobject>();
            try {
                //here I add object valus to the list 
                newObject.add(valueadded)
            } catch (Exception e) {
                //here returning the value as String
                return gson.toJson(newObject);
            }
        }

        protected void onPostExecute(String result) {
            String receivedData = result;
            finalResult.setText(receivedData);
        }
    }
}

答案 2 :(得分:0)

您可以在AsynchTask中添加onPostExecute方法来接收String。喜欢下面

private class myTask extends AsyncTask<String, Void, String> {
    @Override
    protected Void doInBackground(Void... params) {
        .........
        return someString;
    }
    protected void onPostExecute(String result) {
        String receivedData = result;
    }
}