2016-05-15 8 views
2

Ich möchte eine Liste von Restaurants mit meinem aktuellen Standort von Yelp API anzeigen. Es gibt sehr wenig oder keine klare Hilfe zu diesem Thema. Ich versuche verschiedene Möglichkeiten, um das Ergebnis zu bekommen, aber nicht in der Lage, es zu bekommen. Ich bin nur ein Anfänger in Android.Android: YelpAPI Zugriffsfehler

Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'. com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: org/apache/commons/codec/BinaryDecoder.class

Der Fluss soll wie auf dem MainActivityFragment sein es sollte eine Liste von Restaurants in Radius von einer Meile von meiner aktuellen Position anzuzeigen.

MAWFragment.java Klasse

package com.nickdroid.projectmaw; 

import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 

import com.yelp.clientlib.connection.YelpAPI; 
import com.yelp.clientlib.connection.YelpAPIFactory; 
import com.yelp.clientlib.entities.SearchResponse; 

import org.scribe.model.OAuthRequest; 
import org.scribe.model.Response; 
import org.scribe.model.Token; 
import org.scribe.model.Verb; 
import org.scribe.oauth.OAuthService; 

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.Map; 

import retrofit2.Call; 

; 

/** 
* A placeholder fragment containing a simple view. 
*/ 
public class MAWFragment extends Fragment { 

    public static final String LOG_TAG = "MAWFragment"; 
    private ArrayAdapter<String> adapter; 
    /*final String CONSUMER_KEY = "xxxxxxxxxxxxxx"; 
    final String CONSUMER_SECRET = "xxxxxxxxxxxxxx"; 
    final String TOKEN = "xxxxxxxxxxxxxxx"; 
    final String TOKEN_SECRET = "xxxxxxxxxxxxxxxxx";*/ 

    final String YELP_BASEURL="https://api.yelp.com/v2/search?"; 
    final String Y_TERM = "term"; 
    final String Y_LOCATION = "location"; 
    final int Y_LIMIT = 10; 

    public MAWFragment() { 
    } 


    @Override 
    public void onStart() { 
     super.onStart(); 

    } 



    @Override 
    public void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setHasOptionsMenu(true); 
    } 



    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     View rootView = inflater.inflate(R.layout.fragment_main, container, false); 

     /*String[] weeksWeather = {"sunny","cloudy","hot","sleet","volcanic ash","windy","tornado","tsunami","breezy"}; 
     ArrayList<String> weatherArray = new ArrayList<String>(Arrays.asList(weeksWeather)); 
*/ 
     YelpAPIFactory apiFactory = new YelpAPIFactory(BuildConfig.CONSUMER_KEY, BuildConfig.CONSUMER_SECRET, BuildConfig.TOKEN, BuildConfig.TOKEN_SECRET); 
     YelpAPI yelpAPI = apiFactory.createAPI(); 
     Map<String, String> params = new HashMap<>(); 

     // general params 
     params.put("limit", "10"); 
     // locale params 
     params.put("lang", "en"); 

     try { 
      Call<SearchResponse> call = yelpAPI.getPhoneSearch("San Francisco", params); 
      SearchResponse searchResponse = call.execute().body(); 
     }catch(Exception ioEception){ 
      ioEception.printStackTrace(); 
     } 

     final ListView listView = (ListView)rootView.findViewById(R.id.listView); 
     adapter = new ArrayAdapter<String>(getActivity(),R.layout.fragment_main,R.id.item_text,new ArrayList<String>()); 


     listView.setAdapter(adapter); 
     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       int itemPosition = position; 
       String itemValue = (String) listView.getItemAtPosition(position); 

       Toast.makeText(getActivity(), "ListItem : " + itemValue, Toast.LENGTH_SHORT).show(); 
      } 
     }); 
     return rootView; 
    } 

    OAuthService service; 
    Token accessToken; 

    /*public MAWFragment(String consumerKey, String consumerSecret, String token, String tokenSecret) { 
     this.service = new ServiceBuilder().provider(TwoStepOAuth.class).apiKey(consumerKey).apiSecret(consumerSecret) 
       .build(); 
     this.accessToken = new Token(token, tokenSecret); 
    }*/ 

    public String searchForBusinessesByLocation(String term, String location) { 
     OAuthRequest request = createOAuthRequest(YELP_BASEURL); 
     request.addQuerystringParameter("term", Y_TERM); 
     request.addQuerystringParameter("location", Y_LOCATION); 
     request.addQuerystringParameter("limit", String.valueOf(Y_LIMIT)); 
     return sendRequestAndGetResponse(request); 
    } 


    private OAuthRequest createOAuthRequest(String path) { 
     OAuthRequest request = new OAuthRequest(Verb.GET, path); 
     return request; 
    } 

    private String sendRequestAndGetResponse(OAuthRequest request) { 
     System.out.println("Querying " + request.getCompleteUrl() + " ..."); 
     this.service.signRequest(this.accessToken, request); 
     Response response = request.send(); 
     return response.getBody(); 
    } 

    public class FetchMealsTask extends AsyncTask<Void, Void, Void> { 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
     } 

     @Override 
     protected Void doInBackground(Void... data) { 

     return null; 
     } 

    } 
    } 

MainActivity.java

package com.nickdroid.projectmaw; 

import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 
import android.view.Menu; 
import android.view.MenuItem; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 

Build.gradle

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.3" 

    defaultConfig { 
     applicationId "com.nickdroid.niket.projectmaw" 
     minSdkVersion 15 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 
     multiDexEnabled true 
    } 

    buildTypes.each { 
     it.buildConfigField 'String', 'CONSUMER_KEY', MyYelpMAWApiKey 
     it.buildConfigField 'String', 'CONSUMER_SECRET', MyYelpMAWSecretKey 
     it.buildConfigField 'String', 'TOKEN', MyYelpMAWToken 
     it.buildConfigField 'String', 'TOKEN_SECRET', MyYelpMAWSecretToken 
    } 

    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:23.2.1' 
    compile 'com.android.support:design:23.2.1' 
    compile files('libs/scribe-1.3.0.jar') 
    compile files('libs/commons-codec-1.7.jar') 
    compile files('libs/yelp-android-2.0.0.jar') 
    compile 'se.akerfeldt:okhttp-signpost:1.1.0' 
    compile 'com.squareup.okhttp3:okhttp:3.0.0-RC1' 
    compile 'oauth.signpost:signpost-core:1.2.1.2' 
    compile files('libs/converter-jackson-2.0.0.jar') 
    compile 'com.android.support:multidex:1.0.0' 
    compile files('libs/retrofit-2.0.2.jar') 
} 

android { 
    configurations{ 
     all*.exclude module: 'commons-codec-1.7.jar' 
    } 
} 

gradle.properties

# Project-wide Gradle settings. 

# IDE (e.g. Android Studio) users: 
# Gradle settings configured through the IDE *will override* 
# any settings specified in this file. 

# For more details on how to configure your build environment visit 
# http://www.gradle.org/docs/current/userguide/build_environment.html 

# Specifies the JVM arguments used for the daemon process. 
# The setting is particularly useful for tweaking memory settings. 
# Default value: -Xmx10248m -XX:MaxPermSize=256m 
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 

# When configured, Gradle will run in incubating parallel mode. 
# This option should only be used with decoupled projects. More details, visit 
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 
# org.gradle.parallel=true 

MyYelpMAWApiKey = "xxxxxxxxxxxxxx" 
MyYelpMAWSecretKey = "xxxxxxxxxx" 
MyYelpMAWSecretToken = "xxxxxxxxx" 
MyYelpMAWToken = "xxxxxxxxx" 
+0

Ich löste das schließlich. – Nick

Antwort

1

ich in der Lage war, sich damit zu befassen, wie folgt:

  • die Kollision zu beheben, entfernte ich den Apache JAR, die ich in meinem Projekt hatte.
  • Um sicherzustellen, dass die erforderliche libs wurde korrekt wieder hinzugefügt, habe ich diese Zeile build.gradle unter „Android“:

    useLibrary 'org.apache.http.legacy' 
    
  • mit einer anderen Kollision einer Datei umgehen habe ich nicht mein Projekt gebaut

Dann

packagingOptions { 
    exclude 'META-INF/maven/oauth.signpost/signpost-core/pom.properties' 
} 
: benötigen, ich diesen Abschnitt auch unter "android" hinzugefügt.

Verwandte Themen