2016-05-27 3 views
0

Android用のJavaコードに問題があります。 httpsRequestを送信し、JSONファイルを取得します。しかし、私はエラーを取得し、私はなぜ知りません。あなたが私を助けることを願っています。

これは私が得るものLogCatです:

05-27 10:14:34.779: E/AndroidRuntime(24498): java.lang.RuntimeException: An error occured while executing doInBackground() 
05-27 10:14:34.779: E/AndroidRuntime(24498): at android.os.AsyncTask$3.done(AsyncTask.java:300) 
05-27 10:14:34.779: E/AndroidRuntime(24498): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 
05-27 10:14:34.779: E/AndroidRuntime(24498): at java.util.concurrent.FutureTask.setException(FutureTask.java:222) 
05-27 10:14:34.779: E/AndroidRuntime(24498): at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
05-27 10:14:34.779: E/AndroidRuntime(24498): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
05-27 10:14:34.779: E/AndroidRuntime(24498): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
05-27 10:14:34.779: E/AndroidRuntime(24498): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
05-27 10:14:34.779: E/AndroidRuntime(24498): at java.lang.Thread.run(Thread.java:818) 
05-27 10:14:34.779: E/AndroidRuntime(24498): Caused by: java.lang.IllegalArgumentException: HostnameVerifier is null 
05-27 10:14:34.779: E/AndroidRuntime(24498): at javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(HttpsURLConnection.java:128) 
05-27 10:14:34.779: E/AndroidRuntime(24498): at com.example.test.JSONTaskRegistrieren.doInBackground(JSONTaskRegistrieren.java:33) 
05-27 10:14:34.779: E/AndroidRuntime(24498): at com.example.test.JSONTaskRegistrieren.doInBackground(JSONTaskRegistrieren.java:1) 
05-27 10:14:34.779: E/AndroidRuntime(24498): at android.os.AsyncTask$2.call(AsyncTask.java:288) 
05-27 10:14:34.779: E/AndroidRuntime(24498): at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
05-27 10:14:34.779: E/AndroidRuntime(24498): ... 4 more 

マイコードは

package com.example.test; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.MalformedURLException; 
import java.net.URL; 

import javax.net.ssl.HostnameVerifier; 
import javax.net.ssl.HttpsURLConnection; 

import org.json.JSONException; 
import org.json.JSONObject; 

import android.os.AsyncTask; 

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

    private static final HostnameVerifier HostnameVerifier = null; 

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

     String Servicepass; 
     String SecretToken; 

     BufferedReader reader = null; 
     URL url; 

     try{ 
      url = new URL(params[0]); 
      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); 
     } 

} 

であり、これは私がリクエストを開始し、私のMainclassです:

package com.example.test; 

import java.io.BufferedReader; 
import java.io.DataOutputStream; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.MalformedURLException; 
import java.net.ProtocolException; 
import java.net.URL; 

import javax.net.ssl.HttpsURLConnection; 

import org.json.JSONArray; 
import org.json.JSONObject; 

import com.google.gson.Gson; 
import com.google.gson.JsonObject; 

import android.app.Activity; 
import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 


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://192.168.0.64"; 

        // Hersteller Hash 
        String HHash = "fa9b0dec3776ba123eba3049ec9f398h754"; 

        // AppHash 
        String HAHash = "d20439ab3eabf9ebc3fae2c89b4869ai967"; 

        // AppID 
        int AppID = 1; 


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

} 

は、非常にありがとう多くの助けを借りています。

答えて

1

検索対象のアイテムは、スタックトレースの最後のCaused by:セクションです。あなたは、コードの問題のある行が

HttpsURLConnection.setDefaultHostnameVerifier(HostnameVerifier); 

の状態ということであることを見つける必要がある。このことから、あなたのコードat com.example.test.JSONTaskRegistrieren.doInBackground(JSONTaskRegistrieren.java:33)によって引き起こされるあなたの場合はIllegalArgumentException: HostnameVerifier is null(それはあなたのコードを言及する最初の行です)

その時点の変数nullHostnameVerifierです。その変数への代入が起きた場所を調べると、初期化時に何かを割り当てる唯一の時間があることがわかります。

private static final HostnameVerifier HostnameVerifier = null; 

private static final HostnameVerifier HostnameVerifier = new NullHostnameVerifier(); 

へとnew NullHostnameVerifier();をした行を削除することを変更します。それは検証者を作成しており、それが変数に格納されていないので直ちにスローします。

+0

タンク、これは問題だった。 – Max

0

私は、この変数は、グローバルに宣言としてここに送られ、次の

url = new URL(params[0]); 
HttpsURLConnection.setDefaultHostnameVerifier(url); 
+0

しかし今、彼はこれに問題があります。 HttpsURLConnection.setDefaultHostnameVerifier(url); 彼は引数(URL)に該当しないと言った – Max

0
HttpsURLConnection.setDefaultHostnameVerifier(HostnameVerifier); 

のHostnameVerifier引数は、nullで使用する必要があります原因

private static final HostnameVerifier HostnameVerifier = null; 

だと思います!

この声明は何ですか?

new NullHostnameVerifier(); 

HostnameVerfier = new NullHostnameVerifier();をしたいですか?

関連する問題