Я пытаюсь получить данные для счетчика Страна из Интернета с помощью AsynTask. Я получил NoClassDefFoundError, я проверил, common-io-2.5.jar был в пути к классам. Я использую Eclipse. Код сбой при объявлении маркера Type. Я не знаю, как это исправить, пожалуйста, помогите мне. Большое спасибо!Не могу исправить NoClassDefFoundError
package fantasticmassage.com;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Comparator;
import org.json.JSONObject;
import android.app.Activity;
import android.os.AsyncTask;
import android.renderscript.Type;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import org.apache.commons.io.IOUtils;
import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
import com.google.gson.reflect.TypeToken;
public class CountrySpinner extends Activity{
private Spinner spnCountry;
private ArrayList<Country> countries;
private ArrayAdapter<Country> spnCountryAdapter;
public CountrySpinner(){
}
public CountrySpinner(Spinner spn){
this.spnCountry = spn;
}
public CountrySpinner(Spinner spn, ArrayAdapter<Country> adapter){
this.spnCountry = spn;
this.spnCountryAdapter = adapter;
}
public void getDataForCountrySpinner(){
new CountrySpinnerAsync().execute();
}
public class CountrySpinnerAsync extends AsyncTask<Void, Void, Void>{
@Override
protected void onPreExecute(){
super.onPreExecute();
System.out.println("onPreExecute: passed");
}
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
try {
URL url = new URL("http://leansigmaway.com/api/ca_api/api.php?type=getCountries");
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.connect();
String result = IOUtils.toString(httpURLConnection.getInputStream(), "UTF-8");
JSONObject jsonObject = new JSONObject(result);
String countryList = jsonObject.getJSONArray("result").toString();
Type token = (Type) new TypeToken<ArrayList<Country>>(){}.getType();//Look like it crashes right here
System.out.println("doInBacground, token: " + token);
Gson gson = new Gson();
countries = gson.fromJson(countryList, (java.lang.reflect.Type) token);
spnCountryAdapter = new ArrayAdapter<Country>(getApplicationContext(), android.R.layout.simple_spinner_dropdown_item, countries);
spnCountryAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid){
super.onPostExecute(aVoid);
spnCountry.setAdapter(spnCountryAdapter);
}
}
private class Country implements Comparator<Country> {
@SerializedName("id")
private int countryID;
@SerializedName("name")
private String countryName;
public Country() {
}
public Country(int countryID, String countryName) {
this.countryID = countryID;
this.countryName = countryName;
}
public int getCountryID() {
return countryID;
}
public void setCountryID(int countryID) {
this.countryID = countryID;
}
public String getCountryName() {
return countryName;
}
public void setCountryName(String countryName) {
this.countryName = countryName;
}
@Override
public String toString() {
return countryName;
}
@Override
public int compare(Country lhs, Country rhs) {
return lhs.getCountryName().compareTo(rhs.getCountryName());
}
}
}
И файл журнала:
07-21 22:00:59.378: E/AndroidRuntime(1948): FATAL EXCEPTION: AsyncTask #1
07-21 22:00:59.378: E/AndroidRuntime(1948): Process: fantasticmassage.com, PID: 1948
07-21 22:00:59.378: E/AndroidRuntime(1948): java.lang.RuntimeException: An error occured while executing doInBackground()
07-21 22:00:59.378: E/AndroidRuntime(1948): at android.os.AsyncTask$3.done(AsyncTask.java:300)
07-21 22:00:59.378: E/AndroidRuntime(1948): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
07-21 22:00:59.378: E/AndroidRuntime(1948): at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
07-21 22:00:59.378: E/AndroidRuntime(1948): at java.util.concurrent.FutureTask.run(FutureTask.java:242)
07-21 22:00:59.378: E/AndroidRuntime(1948): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
07-21 22:00:59.378: E/AndroidRuntime(1948): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
07-21 22:00:59.378: E/AndroidRuntime(1948): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
07-21 22:00:59.378: E/AndroidRuntime(1948): at java.lang.Thread.run(Thread.java:818)
07-21 22:00:59.378: E/AndroidRuntime(1948): Caused by: java.lang.NoClassDefFoundError: fantasticmassage.com.CountrySpinner$CountrySpinnerAsync$1
07-21 22:00:59.378: E/AndroidRuntime(1948): at fantasticmassage.com.CountrySpinner$CountrySpinnerAsync.doInBackground(CountrySpinner.java:74)
07-21 22:00:59.378: E/AndroidRuntime(1948): at fantasticmassage.com.CountrySpinner$CountrySpinnerAsync.doInBackground(CountrySpinner.java:1)
07-21 22:00:59.378: E/AndroidRuntime(1948): at android.os.AsyncTask$2.call(AsyncTask.java:288)
07-21 22:00:59.378: E/AndroidRuntime(1948): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
07-21 22:00:59.378: E/AndroidRuntime(1948): ... 4 more
Я думаю, что проблема в проблеме, поэтому измените частный класс Country на общественный класс. Страна – Vickyexpert
вы пробовали мое решение ?? –
Вы не включили методы жизненного цикла (например, oncreate, onResume) в свою деятельность. – SaravInfern