2016-03-30 4 views
0

Я создал API в почтовом методе, который отлично работает в почтальоне, и это дает желаемый ответ. Но при использовании этого API в Android он дает ошибку:android Ошибка преобразования результат java.io.FileNotFoundException

Error converting result java.io.FileNotFoundException and Error parsing data org.json.JSONException: End of input at character 0 of

Я оценил бы кто-нибудь направляющие меня о том, как это сделать.

Вот код makeHttpRequest метод jsonparser:

public JSONObject makeHttpRequest2(String url2 , String method, 
        String name, String password) throws IOException { 

    // Making HTTP request 
    try { 

    // check for request method 
    if (method == "POST") { 
     // request method is POST 

     url = new URL(url2); 
     conn = (HttpURLConnection) url.openConnection(); 
     conn.setDoOutput(true); 
     conn.setRequestMethod("POST"); 
     conn.setUseCaches(false); 
     conn.setConnectTimeout(10000); 
     conn.setReadTimeout(10000); 
     conn.setRequestProperty("Content-Type", "application/json"); 
     conn.setRequestProperty("Host", "android.schoolportal.gr"); 
     conn.connect(); 

     JSONObject jsonParam = new JSONObject(); 
     jsonParam.put("name", name); 
     //jsonParam.put("email", email); 
     jsonParam.put("password", password); 
     Log.d("json",String.valueOf(jsonParam)); 
     OutputStreamWriter out=new OutputStreamWriter(
     conn.getOutputStream()); 
     out.write(jsonParam.toString()); 
     out.close(); 

    } 
    } catch (UnsupportedEncodingException e) { 
    e.printStackTrace(); 
    } catch (IOException e) { 
    e.printStackTrace(); 
    } catch (JSONException e) { 
    e.printStackTrace(); 
    } 

    try { 
    InputStream is = conn.getInputStream(); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(
       is, "UTF-8"), 8); 
    StringBuilder sb = new StringBuilder(); 
    String line = null; 
    while ((line = reader.readLine()) != null) { 
     sb.append(line + "\n"); 
    } 
    is.close(); 
    json = sb.toString(); 
    Log.e("JSON", json); 
    } catch (Exception e) { 
    Log.e("Buffer Error", "Error converting result " + e.toString()); 
    } 
    // try parse the string to a JSON object 

    try { 
    jObj = new JSONObject(json); 
    } catch (JSONException e) { 
    Log.e("JSON Parser", "Error parsing data " + e.toString()); 
    } 
    Log.d("json3",String.valueOf(json)); 
    // return JSON String 
    return jObj; 

} 

ответ

0

Добавьте это в ваш код:

conn.setDoInput(true); //After or before of setDoOutput(true) for organization :) 
conn.setChunkedStreamingMode(0); 
conn.setRequestProperty("Content-Type", "application/json; charset=utf-8"); 

EDIT:
И это, если вам нужно загрузить JSON для сервер:

conn.setRequestProperty("Content-Length", "" + Integer.toString(JsonObjectstr.getBytes().length)); // Get the json string length 
1

Во-первых вы не проверить, что запрос был успешным, перед вызовом conn.getInputStream(); Если запрос не удался, что поток пуст и вам нужно вызвать

new BufferedReader(new InputStreamReader(connection.getErrorStream())); 

номер строки дают вам выдать? Если вы распечатаете JSON, чтобы убедиться, что ответ действительно JSON.