2012-11-27 4 views
1

json-lib-2.4-jdk15.json을 사용하려고합니다. 내 코드에서 오류가 있지만없는 내 프로그램 catlog 실행하면 내가 가지고있는 반면NoClassDefFoundError 반면 클래스 경로의 .jar

Caused by: java.lang.NoClassDefFoundError: net.sf.json.JSONSerializer 

"수입 net.sf.json.JSONSerializer을;" 및 이클립스는이 줄에 오류를 표시하지 않습니다.

package com.example.androidgridweb; 
import java.io.IOException; 
import java.io.UnsupportedEncodingException; 

import net.sf.json.JSONException; 
import net.sf.json.JSONObject; 
import net.sf.json.JSONSerializer; 
import org.apache.http.entity.StringEntity; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.ParseException; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpPost; 

import android.os.AsyncTask; 

public class eSearchElastic{ 



public void ESE (final ImageAdapter imgAdapter)throws ClientProtocolException, IOException { 

AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>(){ 



    @Override 
    protected Void doInBackground(Void... params) { 
     String server = "servename"; 
     String index = "images"; 
     String type = "images_schema_1"; 
     StringEntity query = null; 
     try { 
      query = new StringEntity("{\"sort\" : [ {\"confidence_level\" : {\"order\" : \"desc\"} }],\"from\" : 0, \"size\" : 10,\"query\" : {\"text_phrase\" : { \"keyword\" : \"finding nemo\"}},\"filter\" : {\"numeric_range\" : {\"confidence_level\" : { \"from\" : 10, \"to\" : 100, \"include_lower\" : true, \"include_upper\" : true}}}}'"); 
     } catch (UnsupportedEncodingException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     int i=0; 
     HttpClient httpclient = new DefaultHttpClient(); 
     StringBuilder urlStr = new StringBuilder("http://"); 
     urlStr.append(server) 
       .append("/" + index) 
       .append("/" + type + "/_search"); 
     System.out.println(urlStr.toString()); 
     while (i < 5) { 
      HttpPost httpost = new HttpPost(urlStr.toString()); 
      httpost.setEntity((HttpEntity)query); 

     httpost.setHeader("Accept", "application/json"); 
      httpost.setHeader("Content-type", "application/json"); 

      HttpResponse response = null; 
      try { 
       response = httpclient.execute(httpost); 
      } catch (ClientProtocolException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      String answer = null; 
      try { 
       answer = org.apache.http.util.EntityUtils.toString(response.getEntity()); 
      } catch (ParseException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      System.out.println(answer); 
      i++; 

      JSONObject answerJson = (JSONObject) JSONSerializer.toJSON(answer); 
      String urlImage; 
      try { 
       urlImage = answerJson.getString("hits"); 
       JSONObject answerJson1 = (JSONObject) JSONSerializer.toJSON(urlImage); 
       String urlImage1 = answerJson1.getString("hits").replace("[", "").replace("]",""); 
       JSONObject answerJson2 = (JSONObject) JSONSerializer.toJSON(urlImage1); 
       String urlImage2 = answerJson2.getString("_source"); 
       JSONObject answerJson3 = (JSONObject) JSONSerializer.toJSON(urlImage2); 
       String urlImage3 = answerJson3.getString("url"); 
       System.out.println(urlImage3); 
       imgAdapter.addmThumbIds(urlImage3); 
      } catch (JSONException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

     } 
     return null; 
    } 

}; 
task.execute(); 

} 

} 

Catlog :

FATAL EXCEPTION: AsyncTask #1 
java.lang.RuntimeException: An error occured while executing doInBackground() 
    at android.os.AsyncTask$3.done(AsyncTask.java:278) 
    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
    at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
    at java.lang.Thread.run(Thread.java:864) 
Caused by: java.lang.NoClassDefFoundError: net.sf.json.JSONSerializer 
    at com.example.androidgridweb.eSearchElastic$1.doInBackground(eSearchElastic.java:82) 
    at com.example.androidgridweb.eSearchElastic$1.doInBackground(eSearchElastic.java:1) 
    at android.os.AsyncTask$2.call(AsyncTask.java:264) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
-> 외부 항아리 추가 ... (이제 항아리가 참조 된 라이브러리에 표시)

내 클래스 빌드 경로를 구성합니다 나는이 같은 .JAR 추가

답변

4

빌드 경로에 jar를 추가한다고해서 jar 파일이 애플리케이션 apk에 포함되는 것은 아닙니다. 이것은 컴파일 타임 (이클립스)에서 작동하는 이유이며 런타임에는 실행되지 않습니다.

android app 프로젝트의 최상위 레벨에 "libs"폴더를 만들고 그 폴더 안에 jar 파일을 복사하십시오. ADT 플러그인은 이클립스 빌드 경로와 빌드 된 apk 파일에 해당 폴더에있는 모든 jar를 자동으로 추가합니다.

+0

프로젝트가 아닌 libs 폴더 여야합니다. – brillenheini

+0

답변을 편집했습니다. 감사 –

관련 문제