2017-04-25 1 views
0

https://jsonplaceholder.typicode.com/users에서 json을 구문 분석 할 때 문자열에 json 응답을 받고 JSONArray로 이동 한 다음 구문 분석 할 때 문제가 있습니다. 그러나 java.lang.String을 JSONArray로 변환 할 수 없다고 말합니다.json을 구문 분석 할 수 없습니다. - 문자열을 JSONArray로 변환 할 수 없습니다.

json 응답을받는 코드가 doInBackground()에 있으며, onPostExecute()에서 json을 파싱합니다. ,

public class HomeActivity extends AppCompatActivity { 
    public static final int CONNECTION_TIMEOUT = 10000; 
    public static final int READ_TIMEOUT = 15000; 
    private RecyclerView rv_user; 
    private AdapterUser mAdapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_home); 
     new AsyncFetch().execute(); 
    } 

    private class AsyncFetch extends AsyncTask<String, String, String> { 
     String response = ""; 
     ProgressDialog pdLoading = new ProgressDialog(HomeActivity.this); 
     HttpURLConnection conn; 
     URL url = null; 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 

      pdLoading.setMessage("\tLoading..."); 
      pdLoading.setCancelable(false); 
      pdLoading.show(); 

     } 

     @Override 
     protected String doInBackground(String... params) { 
      try { 
       url = new URL("https://jsonplaceholder.typicode.com/users"); 
      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
       return e.toString(); 
      } 

      try { 
       conn = (HttpURLConnection) url.openConnection(); 
       conn.setReadTimeout(READ_TIMEOUT); 
       conn.setConnectTimeout(CONNECTION_TIMEOUT); 
       conn.setRequestMethod("GET"); 

       conn.setDoOutput(true); 

      } catch (IOException e1) { 
       e1.printStackTrace(); 
       return e1.toString(); 
      } 

      try { 
       int response_code = conn.getResponseCode(); 
       if (response_code == HttpURLConnection.HTTP_OK) { 
        BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
        StringBuilder sb = new StringBuilder(); 
        String line; 

        while ((line = reader.readLine()) != null) { 
         sb.append(line); 
        } 
        response = sb.toString(); 

        // Pass data to onPostExecute method 
        System.out.println(response); 

        return (response); 
       } else { 
        return ("unsuccessful"); 
       } 

      } catch (IOException e) { 
       e.printStackTrace(); 
       return e.toString(); 
      } finally { 
       conn.disconnect(); 
      } 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      pdLoading.dismiss(); 
      List<DataUser> data = new ArrayList<>(); 
      pdLoading.dismiss(); 
      try { 
       JSONArray jArray = new JSONArray(result); 
       // Extract data from json and store into ArrayList as class objects 
       for(int i=0;i<jArray.length();i++){ 
        JSONObject json_user_data = jArray.getJSONObject(i); 

        DataUser userData = new DataUser(); 
        userData.id = json_user_data.getString("id"); 
        userData.fullName = json_user_data.getString("name"); 
        userData.uName = json_user_data.getString("username"); 
        userData.email = json_user_data.getString("email"); 

        JSONObject addr = json_user_data.getJSONObject("address"); 
        String street = addr.getString("street"); 
        String city = addr.getString("city"); 
        int zip = addr.getInt("zipcode"); 

        userData.address = street+", "+ city + " " + zip; 
        userData.phone = json_user_data.getString("phone"); 
        userData.web = json_user_data.getString("website"); 
        data.add(userData); 
       } 

       // Setup and Handover data to recyclerview 
       rv_user = (RecyclerView)findViewById(R.id.userList); 
       mAdapter = new AdapterUser(HomeActivity.this, data); 
       rv_user.setAdapter(mAdapter); 
       rv_user.setLayoutManager(new LinearLayoutManager(HomeActivity.this)); 

      } catch (JSONException e) { 
       Toast.makeText(HomeActivity.this, e.toString(), Toast.LENGTH_LONG).show(); 
      } 

     } 

    } 
} 

도움말 제발 :

여기 내 구문 분석 코드입니다. 고맙습니다.

+0

어디서 실패했는지 표시하고 불필요한 코드를 제거하십시오 –

+0

죄송합니다. 내 질문을 편집했습니다. – newITguy

답변

0

변경 두 개의 문자열 :

conn.setDoOutput(false);
당신은 가고 에 서버에서,에 쓸 읽어 보시기 바랍니다. 당신의 JSON에서

String zip = addr.getString("zipcode");
우편 번호는 59590-4157의 형태를 가지고 있으며, 따라서 정수 (int)로 읽을 수 없습니다.

+0

그것은 작동합니다! 도와 주셔서 감사합니다. – newITguy

0

url에서 "result"내용을 보았습니까? 나는 그것이 당신이 원하는 것이 아니라고 생각합니다. 에 코드에서

관련 문제