2016-05-27 4 views
0

У меня проблема с Java-кодом для Android. Я отправлю 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: секцией stacktrace. В вашем случае IllegalArgumentException: HostnameVerifier is null которое вызывается кодом at com.example.test.JSONTaskRegistrieren.doInBackground(JSONTaskRegistrieren.java:33) (это первая линия упоминая код)

Из этого вы должны найти, что виновная строку кода

HttpsURLConnection.setDefaultHostnameVerifier(HostnameVerifier); 

и что состояние из HostnameVerifier переменная в этот момент времени null. Когда вы проверяете, где выполняются назначения этой переменной, вы видите, что единственный раз, когда вы что-то присваиваете ей, находится во время инициализации.

private static final HostnameVerifier HostnameVerifier = null; 

Изменить что

private static final HostnameVerifier HostnameVerifier = new NullHostnameVerifier(); 

и удалить строку, которая сделала new NullHostnameVerifier();. Он создает верификатор и отбрасывает его немедленно, так как он не сохраняется в переменной.

+0

Танк вам, в этом была проблема. – Max

0

Я думаю, что эта переменная является причиной

private static final HostnameVerifier HostnameVerifier = null; 

вы должны использовать следующие

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

Но теперь у него есть проблема с этим. HttpsURLConnection.setDefaultHostnameVerifier (url); Он сказал, что это не относится к аргументам (URL) – Max

0
HttpsURLConnection.setDefaultHostnameVerifier(HostnameVerifier); 

HostnameVerifier аргумент, передаваемый здесь равно нулю, так как во всем мире объявлен!

Для чего это утверждение?

new NullHostnameVerifier(); 

Вы хотите сделать HostnameVerfier = new NullHostnameVerifier();?

Смежные вопросы