私はAndroidのアプリケーションでHTTPコアとクライアントのjarファイルを使用しています。私はSDK 23で動作しています。 私はコンパイル時にエラーが発生していません。外部依存関係を使用して呼び出されます。私のアプリは実行時に追加された依存関係を使用していません
マイmainactivity.java
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import com.rallydev.rest.RallyRestApi;
import com.rallydev.rest.request.QueryRequest;
import com.rallydev.rest.response.QueryResponse;
public class MainActivity extends AppCompatActivity
{
String host = "https://rally1.rallydev.com";
String applicationName = "Android-Rally";
RallyRestApi restApi;
Button buttonlogin;
EditText etemail,etpass;
QueryRequest qtestset;
QueryResponse response;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etemail=(EditText) findViewById(R.id.etemail);
etpass=(EditText) findViewById(R.id.etpassword);
buttonlogin=(Button) findViewById(R.id.btnlogin);
buttonlogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
if(etemail.equals("") && etpass.equals(""))
{
Toast.makeText(getApplicationContext(),"Enter your Rally Credentials",Toast.LENGTH_LONG).show();
}
else
{
try
{
getRally();
}
catch (URISyntaxException e)
{
e.printStackTrace();
}
qtestset = new QueryRequest("Defects");
qtestset.setLimit(1);
try
{
response = restApi.query(qtestset);
if(!response.wasSuccessful())
{
Toast.makeText(getApplicationContext(),"Login Un-Successful",Toast.LENGTH_LONG).show();
}
else{
Toast.makeText(getApplicationContext(),"Login Successful",Toast.LENGTH_LONG).show();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
});
}
public RallyRestApi getRally() throws URISyntaxException {
String password = etemail.getText().toString();
String email=etpass.getText().toString();
restApi = new RallyRestApi(new URI(host), email,password);
restApi.setApplicationName(applicationName);
return restApi;
}
}
マイアプリのGradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "22.0.1"
packagingOptions
{
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/dependencies.txt'
}
defaultConfig {
applicationId "com.example.apetkar.rally_rest_android"
minSdkVersion 19
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.2.0')
compile files('libs/gson-2.2.4.jar')
compile files('libs/commons-logging-1.1.1.jar')
compile files('libs/httpcore-4.2.4.jar')
compile files('libs/httpclient-4.2.5.jar')
compile files('libs/rally-rest-api-2.2.1.jar')
}
エラーログ
java.lang.NoSuchMethodError: No static method extractHost(Ljava/net/URI;)Lorg/apache/http/HttpHost; in class Lorg/apache/http/client/utils/URIUtils; or its super classes (declaration of 'org.apache.http.client.utils.URIUtils' appears in /system/framework/org.apache.http.legacy.boot.jar)
at org.apache.http.impl.client.DecompressingHttpClient.getHttpHost(DecompressingHttpClient.java:113)
at org.apache.http.impl.client.DecompressingHttpClient.execute(DecompressingHttpClient.java:108)
at com.rallydev.rest.client.HttpClient.executeRequest(HttpClient.java:157)
at com.rallydev.rest.client.HttpClient.doRequest(HttpClient.java:145)
at com.rallydev.rest.client.BasicAuthClient.doRequest(BasicAuthClient.java:56)
at com.rallydev.rest.client.HttpClient.doGet(HttpClient.java:221)
at com.rallydev.rest.RallyRestApi.query(RallyRestApi.java:172)
at com.example.apetkar.rally_rest_android.MainActivity$1.onClick(MainActivity.java:67)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
私はこのissue.Theの問題に見えなかったアンドロイドのデフォルトorg.apache.http.client.utils.URIUtils
があります実行時に呼び出され、メソッドの抽出ホストが含まれていません。メソッドextracthostはHttpClient.jar ..どのようにして、アプリケーションがデフォルトのアンドロイドクラスではなくJarのクラスを強制的に呼び出すことができますか?
1)代わりにJARファイルと 'compile' gradle依存関係を使用しないでください。 2) 'fileTree(dir: 'libs')をコンパイルするのは分かりますか?もしそうなら、別々のJARをそれぞれ明示的にコンパイルする必要はありません。 –
ええ。私はjarを右クリックし、コンパイルファイル(.jar)が追加されています。私はここで何を提案しますか?私はjarファイルを削除し、コンパイルするためのgradle依存関係を追加して戻します。 – Akshay