2015-05-18 2 views
0

Я создаю приложение на Android Studio, в котором я должен поддерживать синхронизацию курсов валют с внешним источником через объект JSON. Я последовал за this tutorial, который был предоставлен мне другим ответом на этом форуме. Источник кажется надежным. Тем не менее, я продолжаю получать NoClassDefError. Я поставил флаг, помеченный как // Exception в моем коде, чтобы показать вам, где происходит исключение. Обратите внимание, что я добавил httpclient-4.3-beta1.jar в качестве библиотеки, поэтому я не думаю, что это проблема зависимости. Я нашел темы по одной и той же проблеме, но они дают только объяснения и ответы. Это мой код. Любая помощь приветствуется! Спасибо.HTTP-запрос через Android Studio NoClassDefFoundError

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

import org.apache.http.HttpEntity; 
import org.apache.http.ParseException; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.methods.CloseableHttpResponse; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.CloseableHttpClient; 
import org.apache.http.impl.client.HttpClients; 
import org.apache.http.util.EntityUtils; 
import org.json.JSONException; 
import org.json.JSONObject; 

public class LiveResponseDemo{ 

    // essential URL structure is built using constants 
    public static final String ACCESS_KEY = "YOUR_ACCESS_KEY"; 
    public static final String BASE_URL = "https://apilayer.net/api/"; 
    public static final String ENDPOINT = "live"; 

    // this object is used for executing requests to the (REST) API 
    //Exception 
    static CloseableHttpClient httpClient = HttpClients.createDefault(); 


    public static void sendLiveRequest(){ 

     // The following line initializes the HttpGet Object with the URL in order to send a request 
     HttpGet get = new HttpGet(BASE_URL + ENDPOINT + "?access_key=" + ACCESS_KEY); 

     try { 
      CloseableHttpResponse response = httpClient.execute(get); 
      HttpEntity entity = response.getEntity(); 

      // the following line converts the JSON Response to an equivalent Java Object 
      JSONObject exchangeRates = new JSONObject(EntityUtils.toString(entity)); 

      System.out.println("Live Currency Exchange Rates"); 

      // Parsed JSON Objects are accessed according to the JSON resonse's hierarchy, output strings are built 
      Date timeStampDate = new Date((long)(exchangeRates.getLong("timestamp")*1000)); 
      DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a"); 
      String formattedDate = dateFormat.format(timeStampDate); 
      System.out.println("1 " + exchangeRates.getString("base") + " in GBP : " + exchangeRates.getJSONObject("rates").getDouble("GBP") + " (as of " + formattedDate + ")"); 
      System.out.println("\n"); 
      response.close(); 

     } catch (ClientProtocolException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 
+0

Где вы разместили httpclient.jar и как файл jour gradle.build ищет модуль приложения? –

+1

httpClient больше не является частью Android, лучше всего использовать http-соединение для использования URLConnection: http://developer.android.com/reference/org/apache/http/client/HttpClient.html –

+0

Я попытаюсь использовать это спасибо вы! –

ответ

2

Это не правильный ответ на его вопрос, но решение, которое сработало для него.

  1. HttpClient больше не является частью Android SDK и отмечен как устаревший.
  2. Использование библиотеки jar с httpclient impl. дважды создает структуру httpclient в пути к классам, что затрудняет ее работу.

Решение, которое я предлагаю, заключается в том, чтобы придерживаться стандарта и следовать рекомендациям Google. Как описано в документах API: http://developer.android.com/reference/org/apache/http/client/HttpClient.html

Мы должны использовать URLConnection в качестве замены для apache httpclient. Как описано здесь: http://developer.android.com/reference/java/net/URLConnection.html

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