I’m a novice Android developer and I’m trying to get data from a RESTful web service using GSON and AsynTask. However, when the activity containing the AsynTask class is called, the only error I get in LogCat is:
01-02 11:17:58.275: E/dalvikvm(807): Unable to open stack trace file
‘/data/anr/traces.txt’: Is a directory
And then the doInBackground method can’t be called, hence no response is got from the web service.
I have googled this problem but most people got the permission denied or something, not is a directory as in my case. So if you have any suggestion on how to solve this problem, please help me out!
In case anyone may ask for the code of the class containing AsynTask, I include it here:
public class PlaceListActivity extends Activity{
private ListView m_vwPlaceLayout;
private ArrayList<Place> m_arrPlaceList;
private PlaceAdapter m_placeListAdapter;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.place_list);
m_vwPlaceLayout = (ListView) findViewById(R.id.spotListView);
m_arrPlaceList = new ArrayList<Place>();
m_placeListAdapter = new PlaceAdapter(this, R.layout.place_view, m_arrPlaceList);
m_vwPlaceLayout.setAdapter(m_placeListAdapter);
populateList();
}
public void populateList(){
Intent intent = getIntent();
String key = intent.getStringExtra("KEYWORD");
new GetSpots().execute(key);
}
private class GetSpots extends AsyncTask<String, Integer, ArrayList<Place>>{
protected ArrayList<Place> doInBackground(String... keys){
ArrayList<Place> list = null;
String url = "http://10.0.2.2:81/HGourmet/getPlaces?key=" + keys[0].trim();
try{
RestClient client = new RestClient(url);
try{
client.Execute(RequestMethod.GET);
}catch(Exception e){
e.printStackTrace();
}
String json = client.getResponse();
Gson gson = new Gson();
Type listType = new TypeToken<ArrayList<Place>>(){}.getType();
list = gson.fromJson(json, listType);
}catch(Exception e){}
return list;
}
protected void onProgressUpdate(Integer... progress){
}
protected void onPreExecute(){
}
protected void onPostExecute(ArrayList<Place> placeList){
if (placeList != null){
for (Place place : placeList){
m_arrPlaceList.add(place);
}
m_placeListAdapter.notifyDataSetChanged();
}
else{
Toast.makeText(PlaceListActivity.this, "No Results!", Toast.LENGTH_LONG).show();
}
}
}
}
Oh, turns out the stack trace error is not the problem no matter when it is shown. I noticed that I forgot to print error when catching the exception in
doInBackgroundmethod and when I added it, I figured out the error lies in the URL for the JSON request. Well, this is embarrassing to admit, but I solved it anyway.