2014-12-13 3 views
0

그래서 Andoird Phonegap App에 문제가 있습니다.Andoird/Eclipse 플러그인을 MainActivity 외부에서 엽니 다.

HTML/JAVASCRIPT에서 Java로 데이터를 보내기위한 플러그인을 만들었고 Java는 HTTPS 게시물이있는 서버로이 DATA를 보냅니다.

이 Worke를 얻으려면 내 Asset 폴더에서 ssl.crt (인증)를여십시오.

Cordova 클래스에서이 함수는 CordovaActivity를 확장하기 때문에 효과가 있습니다.

내 플러그인 클래스 : 공용 클래스 ConnectPlugin 여기 CordovaPlugin에게

를 확장하는 로그인 방법 :

protected String tryLogin_2(String d1) throws CertificateException, FileNotFoundException, IOException, KeyStoreException, NoSuchAlgorithmException, KeyManagementException 
{   

    // Load CAs from an InputStream 
    // (could be from a resource or ByteArrayInputStream or ...) 
    CertificateFactory cf = CertificateFactory.getInstance("X.509"); 
    // From https://www.washington.edu/itconnect/security/ca/load-der.crt 


    InputStream caInput = new BufferedInputStream(this.getAssets().open("ssl.crt")); 

    java.security.cert.Certificate ca; 
    try { 
     ca = cf.generateCertificate(caInput); 
    } finally { 
     caInput.close(); 
    } 

    // Create a KeyStore containing our trusted CAs 
    String keyStoreType = KeyStore.getDefaultType(); 
    KeyStore keyStore = KeyStore.getInstance(keyStoreType); 
    keyStore.load(null, null); 
    keyStore.setCertificateEntry("ca", ca); 

    // Create a TrustManager that trusts the CAs in our KeyStore 
    String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm(); 
    TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm); 
    tmf.init(keyStore); 

    // Create an SSLContext that uses our TrustManager 
    SSLContext context = SSLContext.getInstance("TLS"); 
    context.init(null, tmf.getTrustManagers(), null); 




    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 

    StrictMode.setThreadPolicy(policy); 

    String httpsURL = "https://URL.com"; 
    OutputStreamWriter request = null; 
    DataInputStream response_2 = null; 
    String parameters = "1="+d1; 
    String response = null;  

    try 
    { 
    URL myurl = new URL(httpsURL); 
    HttpsURLConnection con = (HttpsURLConnection)myurl.openConnection(); 
    con.setSSLSocketFactory(context.getSocketFactory()); 
    con.setRequestMethod("POST"); 
    con.setRequestProperty("Content-length", String.valueOf(query.length())); 
    con.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); 
    con.setDoOutput(true); 
    con.setDoInput(true); 

    request = new OutputStreamWriter(con.getOutputStream()); 
    request.write(parameters); 
    request.flush(); 
    request.close();    
    String line = "";    
    InputStreamReader isr = new InputStreamReader(con.getInputStream()); 
    BufferedReader reader = new BufferedReader(isr); 
    StringBuilder sb = new StringBuilder(); 
    while ((line = reader.readLine()) != null) 
    { 
    sb.append(line + "\n"); 
    } 
    //Response from server after login process will be stored in response variable.     
    response = sb.toString();    
    isr.close(); 
    reader.close(); 
    } 
    catch(IOException e) 
    { 
    response = "Error";  // Error 
    } 
    return response; 


} 

문제는 지금 "메소드에 getAssets()가 형 ConnectPlugin에 대한 정의입니다".

메인 클래스 외부에서 getAssets() 메소드를 사용할 수 없습니다. 내 MainClass에서 obove 코드가 100 % 정상적으로 작동하고 내 서버에 요청을 보냅니다. 내 플러그인 클래스에는 없습니다. 누군가 나를 도울 수 있습니까?

답변

0

사용

cordova.getActivity().getAssets().open("ssl.crt"));