2017-11-19 11 views
1

を解析...ここは、HttpURLConnectionのでJSONドキュメントを要求し、私はローカルサーバからJSONを要求するための責任があるクラスでアプリケーションを持ってそれを

が主な活動です:

public class Activity_main extends AppCompatActivity { 

    private ArrayList<StructAcount> netAcount = new ArrayList<StructAcount>(); 
    private TextView textView; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     textView = (TextView) findViewById(R.id.txtJSON); 

     WebService.readUrl("http://localhost/match_picture/service.php?action=read"); 

     String result = WebService.getResult(); 


     if (result != null) { 
      try { 
       JSONArray tasks = new JSONArray(result); 
       for (int i=0; i<tasks.length(); i++) { 
        StructAcount acount= new StructAcount(); 
        JSONObject object = tasks.getJSONObject(i); 
        acount.id = object.getLong("user_id"); 
        acount.name = object.getString("user_name"); 
        acount.email = object.getString("user_email"); 

        netAcount.add(acount); 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } else { 
      Toast.makeText(Activity_main.this, "hsh" , Toast.LENGTH_SHORT).show(); 
     } 

     for (StructAcount acount: netAcount) { 
      textView.setText(textView.getText() + "username: " + acount.name + " | " + "useremail: " + acount.email + "\n"); 
      Toast.makeText(Activity_main.this, "username: " + acount.name + "\n" + "useremail: " + acount.email , Toast.LENGTH_SHORT).show(); 
     } 
    } 

} 

。 ..ここにHTTPリクエストのクラスがあります:

public class WebService { 

    private static String result; 

    public static void readUrl(String server_url) { 
     class GetJson extends AsyncTask<String, Void, String> { 
      @Override 
      protected String doInBackground(String... params) { 
       BufferedReader bufferedReader = null; 
       String uri = params[0]; 
       try { 
        URL url = new URL(uri); 
        HttpURLConnection con = (HttpURLConnection) url.openConnection(); 
        StringBuilder sb = new StringBuilder(); 
        InputStream in = new BufferedInputStream(con.getInputStream()); 
        bufferedReader = new BufferedReader(new InputStreamReader(in)); 

        String json; 
        while ((json = bufferedReader.readLine()) != null) { 
         sb.append(json); 

        } 

        return sb.toString().trim(); 


       } catch (MalformedURLException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

       return null; 

      } 

      @Override 
      protected void onPostExecute(String s) { 
       super.onPostExecute(s); 
       WebService.set_result(s); 
      } 
     } 

     GetJson gj = new GetJson(); 
     gj.execute(server_url); 
    } 

    public static void set_result(String s) { 
     result = s; 
    } 

    public static String getResult() { 
     return result; 
    } 

} 

初めてアプリケーションを実行するときに、TextViewに何も設定されていませんでした。

のAppは、エミュレータの画面上に残っている

:私は小さな変更を行う場合、例えば、トーストメッセージのテキストを変更し、私は再びアプリケーションを実行し、TextViewののテキストはJSONの値によって設定された...

誰もこのような状況のための参照や解決策を指摘できますか?

+0

おそらく、最初の起動後にデータを保持する 'forループ'条件「netAcount」変数リストが考えられます。 OnCreateメソッドでnetAccountを初期化しようとします。 –

+0

AndroidMenifestファイルでインターネットを許可しましたか? –

+0

はい。私が言ったように、それは2番目の実行 – Akilla

答えて

0

研究目的のために、HttpUrlConnectionが有用である可能性があります。

実際には、Android Volleyライブラリの使用をお勧めします。

いくつかの便利なリンク:

また、HTTPSでAndroid Volleyを使用する場合は、SSL証明書を盗聴する必要はありません(しないでください)。

なぜですか?答えはhereです。

+0

のために働くので、私はHttpURLConnectionを必要としませんか? – Akilla

+0

私は、Googleが2013年にVolleyを立ち上げたので、HttpURLConnectionがAndroid用の良い選択ではないことを保証することができます:https://www.youtube.com/watch?v=yhv8l9F44qo。 – ivanleoncz

+0

ありがとう、私はそれを後に行くだろう一致します。私はこのアプリでは、私は接続を正しく作ったと思います。私はアルゴリズムと問題を解決しました。私はこのアルゴリズムの中で何が目立つのか知りたいですか? – Akilla

関連する問題