我有这个私有类在我的主要活动中,并且我正在使用它将一个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()
方法时,我会这样做,app无法显示对象并崩溃。
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中的经验更多。
答案 0 :(得分:0)
答案是异步任务与onCreate()
一起运行。因此,您必须创建一些等待任务完成的代码,或者您必须在result
方法中操作异步任务的onPostExecute()
答案 1 :(得分:0)
如果您想等到任务结束,以便您可以使用webResult覆盖结果,那么您可以使用在UI线程上运行的onProgressUpdate的asyncTask方法。您可以参考android开发者网站了解如何使用该方法。