2017-11-19 2 views
0

私は5日、このローカルサーバからのJSON配列を取得しようとしていますとのアンドロイド6.0でローカルサーバからJSON配列を取得します:はHttpURLConnectionの

localhost/match_picture/service.php?action=read 

と私はそれを行うことはできません!

私はグーグルでそれを検索し、あまりにも多くのドキュメンテーションを読んでください!ここ

は私のコードです:

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.URL; 

public class WebService { 

    public static String readUrl(String server_url) { 
       BufferedReader bufferedReader = null; 
        try { 
         URL url = new URL(server_url); 
         HttpURLConnection con = (HttpURLConnection) url.openConnection(); 
         StringBuilder sb = new StringBuilder(); 
         bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream())); 

         String json; 
         while ((json = bufferedReader.readLine()) != null) { 
         sb.append(json+"\n"); 

        } 
        return sb.toString(); 

       }catch (Exception e) { 
        e.printStackTrace(); 
       } 

       return null; 

      } 
    } 

、それはMain_Activityだ:それはこのラインでエミュレータとクラッシュした上でruningてさ

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.Toast; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 
import java.util.ArrayList; 


public class Activity_main extends AppCompatActivity { 

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

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

     String result= WebService.readUrl("http://localhast/match_picture/service.php?action=read"); 
     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(); 
      } 
     } 

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

} 

bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream())); 

と私はなぜ知りません...

私は5日間を探しています!!!!

私はHttpClientを でそれを行うことができますが、私はMain_Activityでクラスを作成しますユーチューブでvidoeはAsyncTaskを拡張し、doInBackground(文字列...のparams)でconnenctionを作りました

を更新することにしたいです。私はそれを試して、それはcorrecly動作します。私はanoderクラス(WebService)でそれをやりたいので、Main_Activityにどのように結果を送ることができるのか分からないので、AsyncTaskから拡張したクラスを削除します。

あなたの助けのための感謝の 私の下手な英語

+0

私はRetrofitを使っています。これが言われて、私はあなたの質問が重要な情報を欠いていることを知りたがっています。 – sschrass

+0

あなたのアプリがクラッシュすることはありませんか? – greenapps

+0

あなたのアプリがどこで動いているのかわからないのはなぜですか?デバイスまたはエミュレータ?あなたは、PC上のサーバーに接続するために 'localhost'を使うことはできません。 – greenapps

答えて

0

のため申し訳ありませんが、そもそもNetworkOnMainThreadExceptionを持っています。

、アプリがクラッシュします。それを解決する方法

グーグル。

+0

私の質問を編集してください。 – Akilla

+0

'AsyncTaskとdoInBackground(String ... params)でconnenctionを行います。私はそれを試して、それはcorrecly動作します。私はanoderクラス(WebService)でそれをやりたいので、Main_Activityにどのように結果を送ることができるのか分からないので、AsyncTaskから拡張したクラスを削除します。いいえ。スレッドまたは非同期タスクを使用する必要があります。また、別のクラスにコードを、アクティビティに非同期タスクを持たせることができます。または、インタフェースまたはコールバックを使用します。 – greenapps

+0

asynctaskでインタフェースを使用して豊富な例を見つけることができます。グーグルやスタックオーバーフローのページを読む時間を過ごすだけです。 – greenapps