2016-06-09 150 views
1

我試圖在Android中打開我的https的Java鏈接,但沒有連接。在這之後,我嘗試在一個新的Java項目中打開我的鏈接,並且它正在連接。但我不明白爲什麼不在Android。我希望有一個人可以幫助我。與Android上的HTTPS網站沒有連接

我的代碼來打開和連接是:

public class JSONTaskRegistrieren extends AsyncTask<String, String, String>{ 

private static final HostnameVerifier HostnameVerifier = new NullHostnameVerifier(); 
private SSLSocketFactory socketfactory; 

@Override 
protected String doInBackground(String...params){ 

    String Servicepass; 
    String SecretToken = null; 


    BufferedReader reader = null; 
    URL url; 

    try{ 
     url = new URL(params[0]); 
     this.socketfactory = HttpsURLConnection.getDefaultSSLSocketFactory(); 
     HttpsURLConnection.setDefaultHostnameVerifier((HostnameVerifier) new NullHostnameVerifier()); 
     HttpsURLConnection con = (HttpsURLConnection)url.openConnection(); 

     con.setRequestMethod("GET"); 
     con.setRequestProperty("Accept", "application/json"); 

     con.setRequestProperty("WWSVC-REQID", "1"); 

     InputStream stream = con.getInputStream(); 
     reader = new BufferedReader(new InputStreamReader(stream)); 
     StringBuffer buffer = new StringBuffer(); 
     String output; 

     while ((output = reader.readLine()) != null){ 
      buffer.append(output); 
     } 

     String finalJson = buffer.toString(); 
     //System.out.println(buffer.toString()); 

     JSONObject parentObject = new JSONObject(finalJson); 
     JSONObject servicepassobjekt = parentObject.getJSONObject("SERVICEPASS"); 

     //System.out.println(servicepassobjekt.toString()); 
     StringBuffer finalBufferedData = new StringBuffer(); 

      JSONObject finalObject = servicepassobjekt; 

      Servicepass = finalObject.getString("PASSID"); 
      SecretToken = finalObject.getString("APPID"); 

      return finalBufferedData.toString(); 

    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

    @Override 
    protected void onPostExecute(String result){ 
     super.onPostExecute(result); 
     System.out.println(result); 
    } 

} 

在這裏,我建我的網址:

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main);  

    Button button1 = (Button) findViewById(R.id.button1); 

     button1.setOnClickListener(new View.OnClickListener() { 
      @SuppressWarnings("unused") 
      public void onClick(View v) { 
       // ServiceURL 
       String ServiceURL = "https://meine-webware.de"; 

       // Hersteller Hash 
       String HHash = "fa9b0dec3776ba123eba3049ec9f398h"; 

       // AppHash 
       String HAHash = "d20439ab3eabf9ebc3fae2c89b4869ai"; 

       // AppID 
       int AppID = 1; 


       new JSONTaskRegistrieren().execute(ServiceURL + "/WWSVC/WWSERVICE/REGISTER/"+HHash+"/"+HAHash+"/"+AppID); 
      }});  
} 

} 

堆棧跟蹤:

06-09 05:36:52.470: E/AndroidRuntime(1864): FATAL EXCEPTION: main 
06-09 05:36:52.470: E/AndroidRuntime(1864): Process: com.example.test, PID: 1864 
06-09 05:36:52.470: E/AndroidRuntime(1864): java.lang.NullPointerException 
06-09 05:36:52.470: E/AndroidRuntime(1864):  at com.android.internal.os.LoggingPrintStream.println(LoggingPrintStream.java:298) 
06-09 05:36:52.470: E/AndroidRuntime(1864):  at com.example.test.JSONTaskRegistrieren.onPostExecute(JSONTaskRegistrieren.java:86) 
06-09 05:36:52.470: E/AndroidRuntime(1864):  at com.example.test.JSONTaskRegistrieren.onPostExecute(JSONTaskRegistrieren.java:1) 
06-09 05:36:52.470: E/AndroidRuntime(1864):  at android.os.AsyncTask.finish(AsyncTask.java:632) 
06-09 05:36:52.470: E/AndroidRuntime(1864):  at android.os.AsyncTask.access$600(AsyncTask.java:177) 
06-09 05:36:52.470: E/AndroidRuntime(1864):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645) 
06-09 05:36:52.470: E/AndroidRuntime(1864):  at android.os.Handler.dispatchMessage(Handler.java:102) 
06-09 05:36:52.470: E/AndroidRuntime(1864):  at android.os.Looper.loop(Looper.java:136) 
06-09 05:36:52.470: E/AndroidRuntime(1864):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
06-09 05:36:52.470: E/AndroidRuntime(1864):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-09 05:36:52.470: E/AndroidRuntime(1864):  at java.lang.reflect.Method.invoke(Method.java:515) 
06-09 05:36:52.470: E/AndroidRuntime(1864):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
06-09 05:36:52.470: E/AndroidRuntime(1864):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
06-09 05:36:52.470: E/AndroidRuntime(1864):  at dalvik.system.NativeStart.main(Native Method) 

我知道這是空指針異常,原因是,他不能連接這個URL,但我不知道爲什麼。

+0

有任何堆棧跟蹤?超時,另一個異常? – adalPaRi

+0

我想它是在服務器上的'https' url必須被簽名。如果url未用ssl證書籤名,則有可能獲得SSLHandshakeException。檢查你是否得到這個例外。 – SripadRaj

+0

我使用StackTrace進行編輯。是的,https有ssl證書。 – Max

回答

0

不要使用System.out.println,但Log.v("JSONTaskRegistrieren", result);

,並改變這個部分,然後發佈異常

} catch (MalformedURLException e) { 
    Log.e("JSONTaskRegistrieren", "Error", e); 
    e.printStackTrace(); 
} catch (IOException e) { 
    Log.e("JSONTaskRegistrieren", "Error", e); 
    e.printStackTrace(); 
} catch (JSONException e) { 
    Log.e("JSONTaskRegistrieren", "Error", e); 
    e.printStackTrace(); 
+0

我這樣做,它來'錯誤:140770FC:SSL例程:SSL23_GET_SERVER_HELLO:未知協議(外部/ openssl/ssl/s23_clnt.c:766 0xa3886990:0x00000000)'。在這之後我編輯了這個:'SSLSocketFactory ssf = ctxt.getSocketFactory(); (SSLSocket)ssf.createSocket(params [0],443); \t \t \t socket.startHandshake(); \t \t \t socket.close();'現在只有一個錯誤沒有按摩。 – Max