ne pouvait pas trouver la classe référencée à partir de la méthode android java.lang.NoClassDefFoundError
Je vais appeler pour une catégorie distincte j'ai écrit dans le même paquet que mon MainActivity
classe est enregistré. mais quand je lance l'application il me donne java.lang.NoClassDefFoundError
. Je ne comprends pas pourquoi une autre classe définie dans un même colis ne peut pas être identifié. J'ai essayé de nombreuses méthodes suggèrent pour java.lang.NoClassDefFoundError
, mais pas tous d'entre eux résolu l'erreur.
08-26 10:43:27.776: E/dalvikvm(1311): Could not find class 'com.example.hcpandroid.SSLAuthenticate$1', referenced from method com.example.hcpandroid SSLAuthenticate.authenticate
08-26 10:43:27.786: E/AndroidRuntime(1311): FATAL EXCEPTION: main
08-26 10:43:27.786: E/AndroidRuntime(1311): java.lang.NoClassDefFoundError: com.example.hcpandroid.SSLAuthenticate$1
08-26 10:43:27.786: E/AndroidRuntime(1311): at com.example.hcpandroid.SSLAuthenticate.authenticate(SSLAuthenticate.java:86)
08-26 10:43:27.786: E/AndroidRuntime(1311): at com.example.hcpandroid.LogIn.LogIn(LogIn.java:48)
08-26 10:43:27.786: E/AndroidRuntime(1311): at com.example.hcpandroid.LogIn$1.onClick(LogIn.java:29)
08-26 10:43:27.786: E/AndroidRuntime(1311): at android.view.View.performClick(View.java:4128)
08-26 10:43:27.786: E/AndroidRuntime(1311): at android.view.View$PerformClick.run(View.java:17142)
08-26 10:43:27.786: E/AndroidRuntime(1311): at android.os.Handler.handleCallback(Handler.java:615)
08-26 10:43:27.786: E/AndroidRuntime(1311): at android.os.Handler.dispatchMessage(Handler.java:92)
08-26 10:43:27.786: E/AndroidRuntime(1311): at android.os.Looper.loop(Looper.java:213)
08-26 10:43:27.786: E/AndroidRuntime(1311): at android.app.ActivityThread.main(ActivityThread.java:4787)
08-26 10:43:27.786: E/AndroidRuntime(1311): at java.lang.reflect.Method.invokeNative(Native Method)
08-26 10:43:27.786: E/AndroidRuntime(1311): at java.lang.reflect.Method.invoke(Method.java:511)
08-26 10:43:27.786: E/AndroidRuntime(1311): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)
08-26 10:43:27.786: E/AndroidRuntime(1311): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)
08-26 10:43:27.786: E/AndroidRuntime(1311): at dalvik.system.NativeStart.main(Native Method)
L'Activité principale de la classe:
package com.example.hcpandroid;
import com.example.hcpandroid.R.id;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.example.hcpandroid.SSLAuthenticate;
public class LogIn extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_log_in);
Button btnLogIn = (Button) findViewById(id.btnLogIn);
btnLogIn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
LogIn();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.log_in, menu);
return true;
}
public void LogIn(){
EditText txtUname = (EditText) findViewById(id.txtUsername);
EditText txtPword = (EditText) findViewById(id.txtPassword);
SSLAuthenticate ssl = new SSLAuthenticate(txtUname.getText().toString(), txtPword.getText().toString());
int authCode = ssl.authenticate();
Toast toast= Toast.makeText(getApplicationContext(), authCode, Toast.LENGTH_LONG);
toast.show();
}
}
SSLAuthentication classe:
package com.example.hcpandroid;
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
import java.io.IOException;
import java.math.BigInteger;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import net.sf.json.JSON;
import net.sf.json.JSONSerializer;
import net.sf.json.xml.XMLSerializer;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.params.ClientPNames;
import org.apache.http.client.params.CookiePolicy;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.json.simple.JSONValue;
import sun.misc.BASE64Encoder;
/**
* @author sajithru
*/
public class SSLAuthenticate {
private String username;
private String password;
private DefaultHttpClient httpClient;
private String cookie;
public SSLAuthenticate(String username, String password) {
this.username = username;
this.password = password;
}
public SSLAuthenticate() {
}
public DefaultHttpClient getHttpClient() {
return httpClient;
}
public String getCookie() {
return cookie;
}
public String getUsername() {
return username;
}
public int authenticate() {
HttpResponse responce = null;
try {
//Authenticate SSL Certification
TrustStrategy easyStrategy = new TrustStrategy() {
@Override
public boolean isTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
//eh, why not?
return true;
}
};
SchemeRegistry schemeRegistry = new SchemeRegistry();
SSLContext sslcontext = SSLContext.getInstance("TLS");
sslcontext.init(null, null, null);
SSLSocketFactory ssf = new SSLSocketFactory((KeyStore) easyStrategy);
ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
Scheme httpsScheme = new Scheme("https", ssf, 443);
schemeRegistry.register(httpsScheme);
TrustManager trustMgr = new TrustManager() {
};
sslcontext.init(null, new TrustManager[]{trustMgr}, null);
HttpParams params = new BasicHttpParams();
ClientConnectionManager connMgr = new ThreadSafeClientConnManager(params, schemeRegistry);
httpClient = new DefaultHttpClient(connMgr, params);
//Encode username into BASE64 encode format
BASE64Encoder base64Encoder = new BASE64Encoder();
String uname64 = base64Encoder.encode(username.getBytes());
//Encode password into MD5 Hash encode format
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.update(password.getBytes(), 0, password.length());
String md5Password = new BigInteger(1, messageDigest.digest()).toString(16);
//Set HTTPS request header- Authentication
cookie = "hcp-ns-auth=" + uname64 + ":" + md5Password;
System.out.println("Username: " + username + " Password: " + password);
System.out.println(cookie);
responce = adminAuth(cookie, httpClient);
} catch (NoSuchAlgorithmException ex) {
Logger.getLogger(SSLAuthenticate.class.getName()).log(Level.SEVERE, null, ex);
} catch (KeyManagementException ex) {
Logger.getLogger(SSLAuthenticate.class.getName()).log(Level.SEVERE, null, ex);
} catch (KeyStoreException ex) {
Logger.getLogger(SSLAuthenticate.class.getName()).log(Level.SEVERE, null, ex);
} catch (UnrecoverableKeyException ex) {
Logger.getLogger(SSLAuthenticate.class.getName()).log(Level.SEVERE, null, ex);
}
int responceCode = responce.getStatusLine().getStatusCode();
return responceCode;
}
private HttpResponse adminAuth(String cookie, HttpClient hClient) {
HttpResponse response = null;
try {
//Creating HTTP Post object
String url = "https://millennium-test.hcp.millenniumit.com/query";
//String url = "https://hitachi.hcp1.hdspoc.com/query";
HttpPost httpPost = new HttpPost(url);
httpPost.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY);
//Setting HTTP Post headers for Authentication, Request type, Respond type and Encode type
httpPost.addHeader("Cookie", cookie);
httpPost.addHeader("Content-Type", "application/xml");
httpPost.addHeader("Accept", "application/json");
//httpPost.addHeader("Content-Encoding", "gzip");
//httpPost.addHeader("Accept-Encoding", "gzip");
Map<String, String> obj = new LinkedHashMap<String, String>();
obj.put("query", "+(namespace:\"data-set1.Millennium-Test\")");
obj.put("contentProperties", "false");
obj.put("objectProperties", "shred,retention");
obj.put("sort", "changeTimeMilliseconds+asc");
String jsonText = "{\"object\" :" + JSONValue.toJSONString(obj) + "}";
System.out.println(jsonText);
XMLSerializer serializer = new XMLSerializer();
JSON json = JSONSerializer.toJSON(jsonText);
serializer.setRootName("queryRequest");
serializer.setTypeHintsEnabled(false);
String xml = serializer.write(json);
xml = xml.replaceAll("\\<\\?xml(.+?)\\?\\>", "").trim();
System.out.println(xml);
StringEntity stringEntity = new StringEntity(xml, HTTP.UTF_8);
httpPost.setEntity(stringEntity);
response = hClient.execute(httpPost);
System.out.println(response.toString());
String sJson = EntityUtils.toString(response.getEntity());
System.out.println(sJson);
HCP_Logger myLogger = new HCP_Logger();
myLogger.writeToLog(username, xml, response.toString());
} catch (IOException ex) {
Logger.getLogger(SSLAuthenticate.class.getName()).log(Level.SEVERE, null, ex);
}
return response;
}
private HttpResponse tenantAuth(String cookie, HttpClient hClient) {
HttpResponse response = null;
try {
//Creating HTTP Post object
String url = "sample url";
//String url = "sample url";
HttpPost httpPost = new HttpPost(url);
httpPost.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY);
//Setting HTTP Post headers for Authentication, Request type, Respond type and Encode type
httpPost.addHeader("Cookie", cookie);
httpPost.addHeader("Content-Type", "application/xml");
httpPost.addHeader("Accept", "application/json");
//httpPost.addHeader("Content-Encoding", "gzip");
//httpPost.addHeader("Accept-Encoding", "gzip");
Map obj = new LinkedHashMap();
obj.put("query", "+(namespace:\"sample")");
obj.put("contentProperties", "false");
obj.put("objectProperties", "shred,retention");
obj.put("sort", "changeTimeMilliseconds+asc");
String jsonText = "{\"object\" :" + JSONValue.toJSONString(obj) + "}";
//System.out.println(jsonText);
XMLSerializer serializer = new XMLSerializer();
JSON json = JSONSerializer.toJSON(jsonText);
serializer.setRootName("queryRequest");
serializer.setTypeHintsEnabled(false);
String xml = serializer.write(json);
xml = xml.replaceAll("\\<\\?xml(.+?)\\?\\>", "").trim();
//System.out.println(xml);
//String xmll = "<queryRequest><object><query>namespace:\"data-set1.Millennium-Test\"</query><objectProperties>shred,retention</objectProperties><sort>changeTimeMilliseconds+asc</sort></object></queryRequest>";
//System.out.println(xmll);
StringEntity stringEntity = new StringEntity(xml, HTTP.UTF_8);
httpPost.setEntity(stringEntity);
response = hClient.execute(httpPost);
//System.out.println(response.toString());
// String sJson = EntityUtils.toString(response.getEntity());
//System.out.println(sJson);
// HCP_Logger myLogger = new HCP_Logger();
// myLogger.writeToLog(username, xml, response.toString());
} catch (IOException ex) {
Logger.getLogger(SSLAuthenticate.class.getName()).log(Level.SEVERE, null, ex);
}
return response;
}
}
Mise à JOUR:
Je crois que j'ai trouvé quelle est la cause de l'erreur. C'est les bibliothèques que j'ai utilisé à l'intérieur de la classe de faire des exceptions. Je suis à l'aide d'httpclient-4.2.5.jar, jackson-core-2.2.0.jar, json-lib-2.4-jdk15.jar, json-simple-1.1.1.jar et rt.jar à l'intérieur de ma classe. Existe t'il une méthode que je peux utiliser ces bibliothèques sans causer de l'exception?
si vous avez ajouté un fichier jar, alors assurez-vous que vous avez coché la case pour la même bibliothèque dans l'ordre et à l'Exportation de l'onglet
propre et construire votre projet
L'afficher à la fois les classes que vous utilisez, alors seulement peut aider quelqu'un
Toute personne ayant une solution.?
OriginalL'auteur Sajirupee | 2013-08-26
Vous devez vous connecter pour publier un commentaire.
Clic droit sur votre
Assurez-vous que "Android Bibliothèques Privées" est cochée pour l'Exportation.
Si vous avez ajouté toutes les bibliothèques de la libs/dossier, enlever, car ils sont automatiquement ajoutés dans la "Android Bibliothèques Privées".
OriginalL'auteur Sunil Kumar
clic droit sur le projet -> Propriétés-> Java Build Path -> de l'Ordre et de l'Exportation de l'Onglet et sélectionnez vos bibliothèques privées.
fait que trop. ne pouvait toujours pas comprendre pourquoi il ne peut pas identifier une classe c'est dans le même package
votre impressionnant.merci beaucoup
OriginalL'auteur SHASHIDHAR MANCHUKONDA
En classe MainActivity: import com.exemple.hcpandroid.SSLAuthenticate;
Puis Après ça, si vous avez importé une bibliothèque externe fichier jar de les importer dans le dossier LIB.
Droit Sur Votre Projet -> Propriétés -> Java Build Path -> de l'Ordre et de l'Exportation -> Sélectionner Tout -> Appuyez sur OK -> va nettoyer votre projet.
espère que cela résoudre votre problème.
OriginalL'auteur user3468848