2017-06-25 2 views
0

こんにちはiamは単純なjsonオブジェクトを投稿し、Httpurlconnectionを使用して結果を取得しようとしています。私はしようとしましたが、何らかのエラーや応答がありません。この問題を解決するのに役立つ人もいます。 tnx。HttpURLconnectionは継続的にエラーを返します - Android

RequestExternalResouceクラス

package sathyabamanan.com.duoproject.comman; 

import android.content.Context; 
import android.os.AsyncTask; 

import java.io.BufferedReader; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.net.URLEncoder; 

/** 
* Created by baman on 6/25/17. 
*/ 

    public class RequestExternalResouce extends AsyncTask<String, Void, String> { 

    private Context mContext; 
    private OnTaskDoneListener onTaskDoneListener; 
    private String urlStr = ""; 
    private String requestBody = ""; 

    public RequestExternalResouce(Context context, String url, String body, OnTaskDoneListener onTaskDoneListener) { 
     this.mContext = context; 
     this.urlStr = url; 
     this.requestBody= body; 
     this.onTaskDoneListener = onTaskDoneListener; 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     try { 
      URL mUrl = new URL(urlStr); 
      HttpURLConnection httpConnection = (HttpURLConnection) mUrl.openConnection(); 
      httpConnection.setRequestMethod("POST"); 
      httpConnection.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); 
      httpConnection.setUseCaches(false); 
      httpConnection.setAllowUserInteraction(false); 
      httpConnection.setConnectTimeout(1000000); 
      httpConnection.setReadTimeout(1000000); 
      httpConnection.connect(); 

      //get Response 
      int responseCode = httpConnection.getResponseCode(); 

      if (responseCode == HttpURLConnection.HTTP_OK) { 

       DataOutputStream localDataOutputStream = new DataOutputStream(httpConnection.getOutputStream()); 
       localDataOutputStream.writeBytes(requestBody.toString()); 
       localDataOutputStream.flush(); 
       localDataOutputStream.close(); 

       BufferedReader br = new BufferedReader(new InputStreamReader(httpConnection.getInputStream())); 
       StringBuilder sb = new StringBuilder(); 
       String line; 
       while ((line = br.readLine()) != null) { 
        sb.append(line + "\n"); 
       } 
       br.close(); 
       return sb.toString(); 
      } 

     } catch (IOException e) { e.printStackTrace(); 
     } catch (Exception ex) { ex.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String s) { 
     super.onPostExecute(s); 
     if (onTaskDoneListener != null && s != null) { 
      onTaskDoneListener.onTaskDone(s); 
     } else 
      onTaskDoneListener.onError(); 
    } 


    public interface OnTaskDoneListener { 
     void onTaskDone(String responseData); 
     void onError(); 
    } 

} 

アクティビティメソッド

public void sendLloginRequest(View v){ 
    login_email = email.getText().toString(); 
    login_password = password.getText().toString(); 
    String getLoginUrl = getRequestBody(); 
    new RequestExternalResouce(context, new Utility().getLoginUrl(), getLoginUrl, new RequestExternalResouce.OnTaskDoneListener() { 
     @Override 
     public void onTaskDone(String responseData) { 
      System.out.println("Success : in activity"+ responseData); 
     } 

     @Override 
     public void onError() { 
      System.out.println("Error : "); 
     } 
    }).execute(); 
} 


public String getRequestBody(){ 
    JSONObject requestBody = new JSONObject(); 


    JSONArray scopeArray = new JSONArray(); 
     try { 
      scopeArray.put("all_all"); 
      requestBody.put("userName", login_email); 
      requestBody.put("password", login_password); 
      requestBody.put("scope", scopeArray); 
      requestBody.put("console", "AGENT_CONSOLE"); 
      requestBody.put("clientID", "e8ea7bb0-5026-11e7-a69b-b153a7c332b9"); 
     } catch (JSONException e1) { 
      e1.printStackTrace(); 
     } 

     return requestBody.toString(); 
    } 

JSONオブジェクト

{ 
    "userName": "[email protected]", 
    "password": "AD123", 
    "scope": [ 
     "all_all" 
    ], 
    "console": "AGENT_CONSOLE", 
    "clientID": "e8ea7bb0-5026-11e7-a69b-b153a7c332b9" 
} 

答えて

1

クラスを更新しました。

package sathyabamanan.com.duoproject.comman; 

import android.content.Context; 
import android.os.AsyncTask; 

import java.io.BufferedReader; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.net.URLEncoder; 

/** 
* Created by baman on 6/25/17. 
*/ 

    public class RequestExternalResouce extends AsyncTask<String, Void, String> { 

    private Context mContext; 
    private OnTaskDoneListener onTaskDoneListener; 
    private String urlStr = ""; 
    private String requestBody = ""; 

    public RequestExternalResouce(Context context, String url, String body, OnTaskDoneListener onTaskDoneListener) { 
     this.mContext = context; 
     this.urlStr = url; 
     this.requestBody= body; 
     this.onTaskDoneListener = onTaskDoneListener; 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     try { 
      URL mUrl = new URL(urlStr); 
      HttpURLConnection httpConnection = (HttpURLConnection) mUrl.openConnection(); 
      httpConnection.setRequestMethod("POST"); 
      httpConnection.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); 
      httpConnection.setUseCaches(false); 
      httpConnection.setAllowUserInteraction(false); 
      httpConnection.setConnectTimeout(1000000); 
      httpConnection.setReadTimeout(1000000); 
      httpConnection.setDoOutput(true); 


      DataOutputStream localDataOutputStream = new DataOutputStream(httpConnection.getOutputStream()); 
      localDataOutputStream.writeBytes(requestBody.toString()); 
      localDataOutputStream.flush(); 
      localDataOutputStream.close(); 


      int responseCode = httpConnection.getResponseCode(); 
      httpConnection.connect(); 

      BufferedReader br = new BufferedReader(new InputStreamReader(httpConnection.getInputStream())); 
      StringBuilder sb = new StringBuilder(); 
      String line; 
      while ((line = br.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 
      br.close(); 



      if (responseCode == HttpURLConnection.HTTP_OK) { 
       return sb.toString(); 
      } 

     } catch (IOException e) { e.printStackTrace(); 
     } catch (Exception ex) { ex.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String s) { 
     super.onPostExecute(s); 
     if (onTaskDoneListener != null && s != null) { 
      onTaskDoneListener.onTaskDone(s); 
     } else 
      onTaskDoneListener.onError(); 
    } 


    public interface OnTaskDoneListener { 
     void onTaskDone(String responseData); 
     void onError(); 
    } 

} 
+0

試しました。うまくいかなかった。 –

+0

@SathyaBamanは更新された答えを確認します –

+0

tnx。しかし、 'java.net.ProtocolException:応答が読み込まれた後に要求本体を書き込めません。 'というメッセージが表示されます。 –

関連する問題