2017-03-19 4 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ファイルのリンクはWebブラウザで正常に実行されます。 アプリケーションでデータを表示する方法や、オンラインでデータ形式を取得するために使用する別のコードやライブラリがありますか?

+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

ファイルの上部にもテキスト/プレーンとして設定されています。上のものを取り除き、上に置きます。 –

+0

これは何も変わらないが、最後のものは効果的である。 –

1

あなたはボレー

コンパイルの新しいライブラリに代わりjsonObjectのStringRequestを使用することができます 'com.android.volley:ボレー:1.0.0'

+0

ご回答ありがとうございます。jsonObjectよりも文字列リクエストを使用する方が簡単です – Amjad

関連する問題