2016-07-22 5 views
0

Я пытаюсь получить данные для счетчика Страна из Интернета с помощью 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 
+0

Я думаю, что проблема в проблеме, поэтому измените частный класс Country на общественный класс. Страна – Vickyexpert

+0

вы пробовали мое решение ?? –

+0

Вы не включили методы жизненного цикла (например, oncreate, onResume) в свою деятельность. – SaravInfern

ответ

-3

Clean your project и rebuild это снова .. большинство вопросов, таких как NoClassDefFoundError, будут решать именно так.

+1

Да, мне нужно было очистить проект, спасибо! –

+0

@ M.N тогда вы можете утвердить этот ответ как правильный –

+1

Ajay, я сделал, спасибо! Я не видел значок палки, я тоже новичок в stackoverflow. –

0

Из официальной документации, это исключение из

Брошенный, если виртуальная машина Java или экземпляр ClassLoader пытается загрузить в определение класса (как часть обычного вызова метода или как часть создания нового экземпляра с использованием нового выражения), и определение класса не может быть найдено.

Так что я думаю, что вы указали неверный путь для определения своего класса в своей первой строке кода. Попробуйте дать правильный путь после ключевого слова пакета, и ваша проблема будет решена. Надеюсь, поможет!

0

В моем случае NoClassDefFoundError ошибка я сделал нижеследующий способ. это работа для меня.

Go Project Name Right Click -> Properties -> Java Build Path -> Order and Export -> common-io-2.5.jar (Check this jar)

после этого Click common-io-2.5.jar -> Click Up (in right side panel) -> Ok

Это может решить вашу проблему.

+1

Я не вижу, как проект сообщества io помогает решить проблему в вопросе –

+0

он работает для меня @ cricket_007 –

+0

Конечно, но похоже, что вы исправили класс, отсутствующий в Commons IO, что не является вопросом отсутствует. –

Смежные вопросы