Android JSON 实时更新
Android JSON Live updates
我不知道如何从每 2-3 秒更新一次的 json api 中获取实时更新 android。我已经设法下载 JSON 代码,然后创建一些数组并记录它们,但是 json api 中的值每 2-3 秒更改一次,我不知道如何重新下载 JSON。预先感谢您的帮助!
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DownloadTask task = new DownloadTask();
String result = null;
try{
result = task.execute("thelinkIuse").get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
public class DownloadTask extends AsyncTask<String, Void, String>{
@Override
protected String doInBackground(String... urls) {
String result = "";
URL url;
HttpURLConnection urlConnection = null;
while (true) {
try {
url = new URL(urls[0]);
urlConnection = (HttpURLConnection) url.openConnection();
InputStream in = urlConnection.getInputStream();
InputStreamReader reader = new InputStreamReader(in);
int data = reader.read();
while (data != -1) {
char current = (char) data;
result += current;
data = reader.read();
}
return result;
} catch (IOException e) {
e.printStackTrace();
return "Failed";
}
}
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
try {
JSONArray arr = new JSONArray(result);
for (int i = 0; i < arr.length(); i++) {
JSONObject jsonPart = arr.getJSONObject(i);
symbols.add(jsonPart.getString("symbol"));
bids.add(jsonPart.getString("bid"));
asks.add(jsonPart.getString("ask"));
}
Log.i("Symbols", String.valueOf(symbols));
Log.i("Bids", String.valueOf(bids));
Log.i("Asks", String.valueOf(asks));
} catch (JSONException e) {
e.printStackTrace();
Log.i("failed", "failed");
}
}
}
我认为您需要某种轮询机制。查看 Firebase 通知,因为你可以做的是让你的服务器端代码 post 向 firebase 服务器发出一个 http 请求,这将触发一个服务器端推送通知到你的应用程序,你将有一个接收器将触发检索过程
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
try{
result =new DownloadTask().execute("thelinkIuse").get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
},0,5000);
这将每 5 秒调用一次异步任务,从而获取更新后的 JSON 字符串
如果您完全确定更新每 2-3 秒发生一次,那么您可以定期调用 AsyncTask 执行方法。这不是一个很好的做法,但可以完成您的工作。这些行的内容:
private Timer autoRefresh;
autoRefresh=new Timer();
autoRefresh.schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
public void run() {
String result = null;
try{
result = task.execute("thelinkIuse").get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
});
}
}, 0, your_time_in_miliseconds);
我不知道如何从每 2-3 秒更新一次的 json api 中获取实时更新 android。我已经设法下载 JSON 代码,然后创建一些数组并记录它们,但是 json api 中的值每 2-3 秒更改一次,我不知道如何重新下载 JSON。预先感谢您的帮助!
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DownloadTask task = new DownloadTask();
String result = null;
try{
result = task.execute("thelinkIuse").get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
public class DownloadTask extends AsyncTask<String, Void, String>{
@Override
protected String doInBackground(String... urls) {
String result = "";
URL url;
HttpURLConnection urlConnection = null;
while (true) {
try {
url = new URL(urls[0]);
urlConnection = (HttpURLConnection) url.openConnection();
InputStream in = urlConnection.getInputStream();
InputStreamReader reader = new InputStreamReader(in);
int data = reader.read();
while (data != -1) {
char current = (char) data;
result += current;
data = reader.read();
}
return result;
} catch (IOException e) {
e.printStackTrace();
return "Failed";
}
}
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
try {
JSONArray arr = new JSONArray(result);
for (int i = 0; i < arr.length(); i++) {
JSONObject jsonPart = arr.getJSONObject(i);
symbols.add(jsonPart.getString("symbol"));
bids.add(jsonPart.getString("bid"));
asks.add(jsonPart.getString("ask"));
}
Log.i("Symbols", String.valueOf(symbols));
Log.i("Bids", String.valueOf(bids));
Log.i("Asks", String.valueOf(asks));
} catch (JSONException e) {
e.printStackTrace();
Log.i("failed", "failed");
}
}
}
我认为您需要某种轮询机制。查看 Firebase 通知,因为你可以做的是让你的服务器端代码 post 向 firebase 服务器发出一个 http 请求,这将触发一个服务器端推送通知到你的应用程序,你将有一个接收器将触发检索过程
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
try{
result =new DownloadTask().execute("thelinkIuse").get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
},0,5000);
这将每 5 秒调用一次异步任务,从而获取更新后的 JSON 字符串
如果您完全确定更新每 2-3 秒发生一次,那么您可以定期调用 AsyncTask 执行方法。这不是一个很好的做法,但可以完成您的工作。这些行的内容:
private Timer autoRefresh;
autoRefresh=new Timer();
autoRefresh.schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
public void run() {
String result = null;
try{
result = task.execute("thelinkIuse").get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
});
}
}, 0, your_time_in_miliseconds);