2014-12-13 67 views
0

所以我的Andoird Phonegap應用程序出現問題。Andoird/Eclipse在插件的MainActivity之外打開一個文件

我創建了一個插件,用於將數據從HTML/JAVASCRIPT發送到Java,Java將發送此數據到帶有HTTPS發佈的 服務器。

爲了得到這個Worke我需要從我的Asset文件夾打開一個ssl.crt(證書)。

在科爾多瓦類中,這個函數可以起作用,因爲它擴展了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"));