获取服务器数据到android并自动显示服务器数据更改

时间:2015-12-03 23:04:03

标签: android server

我目前正致力于项目。它涉及持续从云服务器读取数据。我正在使用ubidots服务器。目前我创建的类扩展到asynctask类,如此

public class ApiUbidots extends AsyncTask<Integer, Void, Void> {
    private final String API_KEY = "1XXXXXXXXX";

    private static final String tempID = "56XXXXXXXX";

    @Override
    protected Void doInBackground(Integer... params) {
        final ApiClient apiClient = new ApiClient(API_KEY);

        Variable tempVariable = apiClient.getVariable(tempID);

        Value[] tempValues = tempVariable.getValues();
        Double vlStr = tempValues[0].getValue();
        String tempValue = String.valueOf(vlStr);
        Log.i(TAG, "TEMPERATURE VALUE IS ====" + tempValue);

        tempTextView.setText(tempValue);

        return null;
    }
}

现在我正在尝试将我从服务器获取的值设置为在textview上显示但我无法在此类中设置。

我需要找到一种方法,只要数据变量发生变化就必须改变textview

任何人都可以帮助我如何继续工作。 谢谢!

1 个答案:

答案 0 :(得分:1)

如果将此类定义为子类,则需要做的就是在AsyncTask的onPostExecute()方法中更新TextView。如果此任务是单独文件中的类,则应定义回调以将数据发送回调用Activity,然后使用回调中收到的数据更新TextView。这是一些示例代码:

您的AsyncTask看起来像这样。请注意,它定义了一个公共接口,用作任务结果的回调。

import android.os.AsyncTask;

public class TestTask extends AsyncTask<String, Void, String> {

    TestTaskCallback listener;

    public TestTask(TestTaskCallback listener) {
        this.listener = listener;
    }

    protected String doInBackground(String... args) {

        String input = args[0];
        String output = "simulated return value";

        return output;
    }

    protected void onPostExecute(String result) {
        listener.onResultReceived(result);
    }

    public interface TestTaskCallback {
        void onResultReceived(String result);
    }
}

然后你的调用Activity将实现回调,触发Task,然后等待结果,如下所示:

public class TestActivity extends AppCompatActivity implements TestTask.TestTaskCallback {

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

        new TestTask(this).execute("Some input");

    }

    public void onResultReceived(String result) {
        Log.d("TEST TASK RESULT", result);
    }
}

一旦结果出现,您可以在Activity中使用它来更新TextView。正如我上面提到的,如果你只是在Activity本身中继承Task,这就更容易了。这样,您就可以直接从任务访问TextView。此时无需乱搞回调。