2016-07-22 58 views
0

我想从使用AsynTask的Internet获取国家/地区微调器的数据。我得到了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

我认为范围是问题,所以更改私人类国家公共类国家 – Vickyexpert

+0

你试过我的解决方案? –

+0

你没有在你的活动中包含生命周期方法(如oncreate,onResume) – SaravInfern

回答

-3

Clean your projectrebuild它再次..大多数的问题,如NoClassDefFoundError将解决这样的问题。

+1

是的,我需要清理项目,谢谢! –

+0

@ M.N然后你可以批准这个答案作为正确的答案 –

+1

Ajay,我做了,谢谢!我没有看到棒图标,我也是新手。 –

0

从官方文档,这个例外是因为

抛出抛出当Java虚拟机或ClassLoader实例试图在加载定义一个类(作为常规方法调用的一部分或作为使用新表达式创建新实例的一部分),并且不能找到该类的定义。

所以我认为你在第一行代码中给你的类定义给出错误的路径。尝试在package关键字之后给出正确的路径并解决您的问题。希望能帮助到你!

0

在我的情况下NoClassDefFoundError错误我做了下面的方法。这对我有用。

转到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中缺少的类,这不是问题所在失踪。 –