【发布时间】:2015-11-23 00:10:45
【问题描述】:
我的主要活动中有这个私有类,我正在使用它将一个 JSon 对象从我的服务器拉到我的应用程序中。下面的代码可以正常工作,并将 JSON 对象显示为字符串。
private class HttpAsyncTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
return httpBuild(urls[0]);
}
// onPostExecute displays the results of the AsyncTask.
@Override
protected void onPostExecute(String result) {
Toast.makeText(getBaseContext(), "Received!", Toast.LENGTH_LONG).show();
etResponse.setText(result);
}
}
我想要做的是改变onPostExecute() 方法,使它像webResult = result 一样工作,其中webResult 是mainActivity 类的一个实例变量问题是一旦我这样做,当我尝试放在调用 HTTpAsyncTask 后,将下面的代码放入 onCreate() 方法中,应用程序无法显示对象并崩溃。
public class MainActivity extends Activity {
private static final String mainSite = "http://mysitehere";
private String webResult;
// private JSONArray floorsInBuilding, roomsInGender;
// private JSONObject room;
// private JSONArray arrayOfFloors;
// private JSONObject room, arrayOfRooms;
EditText etResponse;
TextView tvIsConnected;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// get reference to the views
etResponse = (EditText) findViewById(R.id.etResponse);
tvIsConnected = (TextView) findViewById(R.id.tvIsConnected);
// check if you are connected or not
if(isConnected()){
tvIsConnected.setBackgroundColor(0xFF00CC00);
tvIsConnected.setText("You are conncted");
}
else{
tvIsConnected.setText("You are NOT conncted");
}
// call AsynTask to perform network operation on separate thread
new HttpAsyncTask().execute(this.buildBuildingAddress(8));
Toast.makeText(getBaseContext(), "Received!", Toast.LENGTH_LONG).show();
etResponse.setText(WebResult);
}
我想知道是什么使显示结果的代码部分依赖于 HttpAsyncTask。我还想知道如何获得 HttpAsyncTask 的结果并将其作为字符串存储在主类中。
我的大部分代码都是基于这个例子。 http://hmkcode.com/android-parsing-json-data/
对不起,如果我对 android 的了解不是很好,但我的经验更多地在于 java。
【问题讨论】:
-
我不知道崩溃本身的细节。但是这种方法不起作用,因为 asynctask 异步执行(主线程),而 onCreate() 在主线程中执行。因此 etResponse.setText(WebResult) 将在您的 asynctask 与网络调用完成之前执行。这意味着它将 textview 文本值设置为 null。
-
感谢您的回复,我去和一位同学交谈,他也说了同样的话!这正是问题所在。我不明白该程序不会等待异步任务完成。所以它会尝试打印一个空字符串
标签: android json xml http android-asynctask