Java 从jsonbin.io获取Json数据的滞后问题
我正在开发一个简单的游戏应用程序,因此我的UI有一个简单的例子,问题是当我使用Json web服务获取一个关卡时,第一次从中选择关卡时,图片和关卡编号不会显示,只有4个字可以工作,但图像和关卡编号都不会显示 注意:image URL变量为null(因为在我第一次打开第一级活动时发生了延迟),所以发生了错误(这就是为什么它显示ic_launcher而不是显示级别图片) 所以,我说问题是“滞后”,因为当我回到Java 从jsonbin.io获取Json数据的滞后问题,java,android,json,Java,Android,Json,我正在开发一个简单的游戏应用程序,因此我的UI有一个简单的例子,问题是当我使用Json web服务获取一个关卡时,第一次从中选择关卡时,图片和关卡编号不会显示,只有4个字可以工作,但图像和关卡编号都不会显示 注意:image URL变量为null(因为在我第一次打开第一级活动时发生了延迟),所以发生了错误(这就是为什么它显示ic_launcher而不是显示级别图片) 所以,我说问题是“滞后”,因为当我回到LevelList并单击level1时,图片和级别编号被提取出来,一切都变好了 如何使图像和
LevelList
并单击level1时,图片和级别编号被提取出来,一切都变好了
如何使图像和级别ID在我第一次打开活动时同时显示
注意:我使用jsonbin.io获取数据
下面是我的Json数据获取类:
import android.os.AsyncTask;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class FetchData extends AsyncTask<Void,Void,Void> {
String update = "4";
String data ="";
String id;
String img;
String w1;
String w2;
String w3;
String w4;
@Override
protected Void doInBackground(Void... voids) {
try {
URL url = new URL("https://api.jsonbin.io/b/5e42776dd18e4016617690ce/" + update);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
InputStream inputStream = httpURLConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String line = "";
while(line != null){
line = bufferedReader.readLine();
data = data + line;
}
JSONArray JA = new JSONArray(data);
// for(int i = 0 ;i < JA.length(); i++) {
JSONObject JO = (JSONObject) JA.get(1);
id = (String) JO.get("id");
img = (String) JO.get("img");
w1 = (String) JO.get("w1");
w2 = (String) JO.get("w2");
w3 = (String) JO.get("w3");
w4 = (String) JO.get("w4");
// }
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
int levelId = Integer.parseInt(id);
levelId++;
LevelActivity.levelID = String.valueOf(levelId);
LevelActivity.imageURL = img;
LevelActivity.button1Word = w1;
LevelActivity.button2Word = w2;
LevelActivity.button3Word = w3;
LevelActivity.button4Word = w4;
}
}
导入android.os.AsyncTask;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.net.HttpURLConnection;
导入java.net.MalformedURLException;
导入java.net.URL;
公共类FetchData扩展异步任务{
字符串更新=“4”;
字符串数据=”;
字符串id;
字符串img;
字符串w1;
字符串w2;
字符串w3;
字符串w4;
@凌驾
受保护的空位背景(空位…空位){
试一试{
URL=新URL(“https://api.jsonbin.io/b/5e42776dd18e4016617690ce/“+更新);
HttpURLConnection HttpURLConnection=(HttpURLConnection)url.openConnection();
InputStream InputStream=httpURLConnection.getInputStream();
BufferedReader BufferedReader=新的BufferedReader(新的InputStreamReader(inputStream));
字符串行=”;
while(行!=null){
line=bufferedReader.readLine();
数据=数据+行;
}
JSONArray JA=新JSONArray(数据);
//对于(int i=0;i
谢谢^-^
我只需要更新onPostExecute
方法中的图像和级别文本视图编号,使其从第一次加载。
NIKHIL AGGARWAL的回答
您只是在onPostExecute()方法中更新image和levelID变量的值。获取数据后,您必须在活动中的视图中设置这些变量,即在onPostExecute()方法中,我已经在onCreate()方法中的LevelActivity中设置了这些变量。创建活动时,您已经设置了这些变量。在获取新数据时,必须再次设置变量。