Je copie juste tous les fichiers jar de Http
mais Android Studio
ne peut pas importer tous ces fichiers jar. Il donne une erreur: Cannot resolve symbol HttpGet,HttpClient,HttpResponse
.
Mon fichier Activity
est ici: -
public class MainActivity extends AppCompatActivity {
ArrayList<Product> productslist;
ProductAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
productslist = new ArrayList<Product>();
new JSONAsyncTask().execute("http://opencart.codeniques.com/myshop/?route=feed/web_api/products&id=60&key=test123");
ListView listView = (ListView)findViewById(R.id.list);
adapter = new ProductAdapter(getApplicationContext(),R.layout.row,productslist);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(getApplicationContext(),productslist.get(position).getName(),Toast.LENGTH_LONG).show();
}
});
}
class JSONAsyncTask extends AsyncTask<String,Void,Boolean>{
ProgressDialog dialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
dialog = new ProgressDialog(MainActivity.this);
dialog.setMessage("Loading, please wait");
dialog.setTitle("Connecting server");
dialog.show();
dialog.setCancelable(false);
}
@Override
protected Boolean doInBackground(String... params) {
try{
HttpGet httppost = new HttpGet(params[0]);
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = httpclient.execute(httppost);
int status = response.getStatusLine().getStatusCode();
if(status == 200){
HttpEntity entity = response.getEntity();
String data = EntityUtils.toString(entity);
JSONObject jsono = new JSONObject(data);
JSONArray jarray = jsono.getJSONArray("products");
for (int i = 0; i < jarray.length(); i++) {
JSONObject object = jarray.getJSONObject(i);
Product actor = new Product();
actor.setId(object.getString("id"));
actor.setName(object.getString("name"));
actor.setDescription(object.getString("description"));
actor.setHref(object.getString("href"));
actor.setPrice(object.getString("pirce"));
actor.setImage(object.getString("thumb"));
actor.setSpecial(object.getString("special"));
actor.setRating(object.getString("rating"));
productslist.add(actor);
}
return true;
}
}catch (JSONException e){
Log.e("Error :",e.getMessage());
}catch (ParseException e){
Log.e("Error :",e.getMessage());
}catch (IOException e){
Log.e("Error :",e.getMessage());
}catch (Exception e){
Log.e("Error :",e.getMessage());
}
return false;
}
@Override
protected void onPostExecute(Boolean aBoolean) {
dialog.cancel();
adapter.notifyDataSetChanged();
if(aBoolean == false){
Toast.makeText(getApplicationContext(), "Unable to fetch data from server", Toast.LENGTH_LONG).show();
}
}
}}
et voici ma gradle
est ici: -
apply plugin: 'com.Android.application'
Android {
compileSdkVersion 23
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "Android.catalyst.com.newjsonarray"
minSdkVersion 16
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}}}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.Android.support:appcompat-v7:23.0.1'
compile 'com.Android.support:design:23.0.1'}
Ajoutez simplement ceci dans vos dépendances
compile 'org.Apache.httpcomponents:httpcore:4.4.1'
compile 'org.Apache.httpcomponents:httpclient:4.5'
Finalement
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.Android.support:appcompat-v7:23.0.1'
compile 'com.Android.support:design:23.0.1'
compile 'org.Apache.httpcomponents:httpcore:4.4.1'
compile 'org.Apache.httpcomponents:httpclient:4.5'
}
Et ajoutez aussi ce code:
Android {
useLibrary 'org.Apache.http.legacy'
}
FYI
Spécifiez la configuration requise pour la bibliothèque Apache HTTP Legacy Si votre application est API de ciblage de niveau 28 (Android 9.0) ou supérieur, vous devez inclure le déclaration suivante dans l’élément de AndroidManifest.xml.
<uses-library
Android:name="org.Apache.http.legacy"
Android:required="false" />
HttpClient n'est plus pris en charge dans sdk 23. Vous devez utiliser URLConnection ou rétrograder à sdk 22 (compiler 'com.Android.support:appcompat-v7:22.2.0')
Si vous avez besoin du sdk 23, ajoutez ceci à votre diplôme:
Dans les dépendances, ajoutez:
compile 'org.Apache.httpcomponents:httpcore:4.4.1'
compile 'org.Apache.httpcomponents:httpclient:4.5'
et aussi ajouter ceci
Android {
useLibrary 'org.Apache.http.legacy'
}
HttpClient était obsolète dans l'API niveau 22 et supprimé dans l'API niveau 23 . Vous devez utiliserURLConnection
.
Veuillez supprimer tous les fichiers jar de Http du dossier libs et ajouter les dépendances ci-dessous dans le fichier gradle:
compile 'org.Apache.httpcomponents:httpclient:4.5'
compile 'org.Apache.httpcomponents:httpcore:4.4.3'
Merci.
veuillez ajouter ces codes à vos dépendances. Ça va marcher.
implementation 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.Apache.http.client:4.1.2'
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
implementation 'com.Android.support:appcompat-v7:23.1.0'
implementation 'com.Android.support:design:23.1.0'
implementation 'com.Android.support:cardview-v7:23.1.0'
implementation 'com.Android.support:recyclerview-v7:23.1.0'
implementation 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.Apache.http.client:4.1.2'
}
Google suggère officiellement aux développeurs d’utiliser la bibliothèque Volley pour la gestion de réseau Ici , Alors il est temps de passer à Volley, Happy coding
Supprimez tous les fichiers jar
de Http du dossier 'libs' et ajoutez les dépendances suivantes dans le fichier gradle:
compile 'org.Apache.httpcomponents:httpclient:4.5'
compile 'org.Apache.httpcomponents:httpcore:4.4.3'
ou
useLibrary 'org.Apache.http.legacy'
C’est juste dans le SDK 23, Httpclient et d’autres sont obsolètes. Vous pouvez le corriger en changeant la version du SDK cible comme ci-dessous:
apply plugin: 'com.Android.application'
Android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "vahid.hoseini.com.testclient"
minSdkVersion 10
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.Android.support:appcompat-v7:22.1.1'
}
Pour moi, le dessous a aidé
Trouvez org.Apache.http.legacy.jar
qui est dans Android/Sdk/platforms/Android-23/optional,
ajoutez-le à votre dépendance.
Vous venez de reconstruire votre projet
compile fileTree(dir: 'libs', include: ['*.jar'])
en ajoutant cela a fonctionné pour moi.
compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.Apache.http.client:4.1.2'