【发布时间】:2017-11-19 14:12:56
【问题描述】:
我有一个应用程序,它的类负责从本地服务器请求 JSON...
这是主要活动:
public class Activity_main extends AppCompatActivity {
private ArrayList<StructAcount> netAcount = new ArrayList<StructAcount>();
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.txtJSON);
WebService.readUrl("http://localhost/match_picture/service.php?action=read");
String result = WebService.getResult();
if (result != null) {
try {
JSONArray tasks = new JSONArray(result);
for (int i=0; i<tasks.length(); i++) {
StructAcount acount= new StructAcount();
JSONObject object = tasks.getJSONObject(i);
acount.id = object.getLong("user_id");
acount.name = object.getString("user_name");
acount.email = object.getString("user_email");
netAcount.add(acount);
}
} catch (JSONException e) {
e.printStackTrace();
}
} else {
Toast.makeText(Activity_main.this, "hsh" , Toast.LENGTH_SHORT).show();
}
for (StructAcount acount: netAcount) {
textView.setText(textView.getText() + "username: " + acount.name + " | " + "useremail: " + acount.email + "\n");
Toast.makeText(Activity_main.this, "username: " + acount.name + "\n" + "useremail: " + acount.email , Toast.LENGTH_SHORT).show();
}
}
}
...这是 HTTP 请求的类:
public class WebService {
private static String result;
public static void readUrl(String server_url) {
class GetJson extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
BufferedReader bufferedReader = null;
String uri = params[0];
try {
URL url = new URL(uri);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
StringBuilder sb = new StringBuilder();
InputStream in = new BufferedInputStream(con.getInputStream());
bufferedReader = new BufferedReader(new InputStreamReader(in));
String json;
while ((json = bufferedReader.readLine()) != null) {
sb.append(json);
}
return sb.toString().trim();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
WebService.set_result(s);
}
}
GetJson gj = new GetJson();
gj.execute(server_url);
}
public static void set_result(String s) {
result = s;
}
public static String getResult() {
return result;
}
}
第一次运行应用程序时,TextView 没有设置任何内容。
当应用程序仍在模拟器的屏幕上时:如果我进行了一些小的更改,例如更改 Toast 消息的文本,我会再次运行应用程序并通过 JSON 值设置 TextView 的文本...
任何人都可以为这种情况提供一些参考或解决方案吗?
【问题讨论】:
-
原因可能是您的“for 循环”条件“netAcount”变量列表在您首次启动后保存数据。尝试在 OnCreate 方法中初始化 netAccount。
-
您是否在 AndroidMenifest 文件中授予互联网权限?
-
是的。正如我所说,它适用于第二次运行
标签: android json android-activity httpurlconnection