2017-03-19 2 views
2

최근에 안드로이드 스튜디오 2.3에서 응용 프로그램을 만들었습니다. 사용하는 링크가 브라우저 및 데이터에서 올바르게 작동하고 있습니다. json 형식으로 성공적으로 표시됩니다. 하지만 이러한 데이터를 검색 할 수 없습니다 내 응용 프로그램에서,이 같은 내 응용 프로그램의 Gradle을 파일에 avolley lib 디렉토리를 추가데이터가 브라우저에 표시되어 있지만 서버에서 안드로이드 스튜디오로 데이터를 가져올 수 없습니다.

컴파일 'com.mcxiaoke.volley : 라이브러리 : 1.0.18'

내가 MainActivity에서 사용하는 코드는 다음과 같습니다

public class MainActivity extends AppCompatActivity { 
     RequestQueue rq; 
     String url = "http://abdulwahid.esy.es/show.php"; 
     TextView txtshow; 


     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      txtshow = (TextView) findViewById(R.id.txtshow); 

      rq = Volley.newRequestQueue(this); 
      JsonObjectRequest jor = new JsonObjectRequest(Request.Method.GET, url, 
        new Response.Listener<JSONObject>() { 

         @Override 
         public void onResponse(JSONObject response) { 
          try { 
           JSONArray jarr = response.getJSONArray("allstudents"); 
           for (int i = 0; i < jarr.length(); i++) { 
            JSONObject res = jarr.getJSONObject(i); 
            String id = res.getString("id"); 
            String name = res.getString("name"); 
            String info = res.getString("info"); 
            txtshow.append("\n" + id + " - " + name + "\n" + info + "\n" + "------------------" + "\n"); 
           } 
          } catch (JSONException e) { 
           e.printStackTrace(); 
          } 
         } 
        } 
        , new Response.ErrorListener() { 

       @Override 
       public void onErrorResponse(VolleyError error) { 
        Log.e("VOLLEY", "ERROR"); 
       } 
      }); 
      rq.add(jor); 
     } 

나는 웹 브라우저에서 성공적으로 실행 사용 PHP 파일의 링크. 내 응용 프로그램에서 데이터를 표시하는 방법 또는 온라인으로 데이터 양식을 검색하는 데 사용할 다른 코드 또는 라이브러리가 있습니까? 브라우저에서와 같이 캐릭터 라인의 데이터를 검색 할 수

+0

을 잘 무엇이 잘못되었는지? – greenapps

+0

'사용하고있는 php 파일의 링크가 정상적으로 실행되었습니다. ' 어떻게 알았어? – greenapps

+0

@greenapps, 나는 웹 브라우저에서 그것을 시도하고 성공적으로 작동합니다. – Amjad

답변

0

사용이 코드는 데이터가 완전한 문자열로 추가됩니다

public void getData(){ 
     class GetDataJSON extends AsyncTask<String, Void, String>{ 

      @Override 
      protected String doInBackground(String... params) { 
       DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams()); 
       HttpPost httppost = new HttpPost("http://abdulwahid.esy.es/show.php"); 

       // Depends on your web service 
       httppost.setHeader("Content-type", "application/json"); 

       InputStream inputStream = null; 
       String result = null; 
       try { 
        HttpResponse response = httpclient.execute(httppost); 
        HttpEntity entity = response.getEntity(); 

        inputStream = entity.getContent(); 
        // json is UTF-8 by default 
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8); 
        StringBuilder sb = new StringBuilder(); 

        String line = null; 
        while ((line = reader.readLine()) != null) 
        { 
         sb.append(line + "\n"); 
        } 
        result = sb.toString(); 
       } catch (Exception e) { 
        // Oops 
       } 
       finally { 
        try{if(inputStream != null)inputStream.close();}catch(Exception squish){} 
       } 
       return result; 
      } 

      @Override 
      protected void onPostExecute(String result){ 
       myJSON=result; 
       showList(); 
      } 
     } 
     GetDataJSON g = new GetDataJSON(); 
     g.execute(); 
    } 
+0

설명은 확장 된 토론을위한 것이 아닙니다. 이 대화는 [채팅으로 이동되었습니다] (http://chat.stackoverflow.com/rooms/138537/discussion-on-answer-by-arun-mohan-i-cant-retrieve-data-from-server-to- 기계적 인조 인간). –

0

문제는 Content-Type 헤더의 응답에 설정되어 있지 않은지 당신의 섬기는 사람. Volley가 구문 분석 할 수 있으려면 헤더를 application/json으로 설정해야합니다.

show.php에 다음 줄을 추가합니다 :

header('Content-Type: application/json'); 

편집

을 위 변경 한 후에는 응답은

Screenshot

내가 볼 수있는 ... 이상한 것 같다 응답에서 이상한 문자가 발생하여 구문 분석 문제가 발생할 수 있습니다. 클라이언트 측.

+0

show.php에이 줄을 추가했지만 데이터가 응용 프로그램에 표시되지 않습니다. 이것은 PHP 파일의 스크린 샷입니다 https://drive.google.com/file/d/0B_9G3EhgCUpDbjhLdmxOZEtDU2c/view?usp=sharing – Amjad

+0

파일 상단에도 text/plain으로 설정되어 있습니다. 상단의 것을 제거하고 위에 올려 놓으십시오. –

+0

아무 것도 변경되지 않지만 마지막 것이 효과적입니다. –

1

당신은 발리

컴파일의 새로운 라이브러리로 대신 된 JSONObject의 StringRequest을 사용할 수 있습니다 'com.android.volley : 발리 : 1.0.0'

+0

답장을 보내 주셔서 감사합니다. jsonObject보다 문자열 요청을 사용하는 것이 더 쉽습니다. – Amjad