2017-08-31 3 views
0

私は、Androidサーバからリモートサーバのテキストファイルにあるコンテンツを読み込もうとしました。ファイルのURLは192.168.43.157:8080/apk/list.txtであり、PC上でブラウザを使用してサーバーがうまく動作し、アドレスバーにURLが貼り付けられていることをテストしました。Androidウェブからデータを取得

私は用途-権限を追加しました:

<uses-sdk 
    android:minSdkVersion="14" 
    android:targetSdkVersion="18" /> 
<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<application 
    ... 

そして、これは活動

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_test); 

    String listUrl = "http://192.168.43.157:8080/apk/list.txt"; 

    String response = getWebResponse(listUrl); 
    TextView textView = (TextView) findViewById(R.id.web_response); 
    textView.setText(response); 

} 

private String getWebResponse(String urlStr) { 
    try { 
     URL url = new URL(urlStr); 
     HttpURLConnection httpConn = (HttpURLConnection) url.openConnection(); 
     httpConn.setRequestMethod("GET"); 
     httpConn.setDoInput(true); 
     InputStream is = httpConn.getInputStream(); 
     InputStreamReader isr = new InputStreamReader(is, "UTF-8"); 
     BufferedReader br = new BufferedReader(isr); 
     StringBuilder response = new StringBuilder(); 
     String line = null; 
     while((line = br.readLine()) != null) { 
      response.append(line); 
     } 
     return response.toString(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return ""; 
    } 

} 

のコードである私はそれらのどちらもうまくいく、HttpURLConnectionURLConnectionを使用しようとしました。私はコードをチェックするためにデバッグを使用しています。プログラムはnullを返す保つ

private String getWebResponse(String urlStr) { 
    ... 
    InputStream is = httpConn.getInputStream(); 
    .... 
} 

httpConn.getInputStream()に失敗しました。

ここにフックを外してください!

+0

'ファイルのURLは「192.168.43.157:8080/apk/list.txt」です。いいえ、それはヌーURLです。 urlは 'http://192.168.43.157:8080/apk/list.txt'です。 – greenapps

+0

ありがとうございます。しかし、私が "http:"を取り除くならば。プログラムは "URL url =新しいURL(urlStr);"の例外を発生させます。元の例外は "InputStream is = httpConn.getInputStream();"です。 –

+0

誰がhttp://を取り除くように言ったのですか? – greenapps

答えて

0

私は(Googleが)volleyライブラリを使用して、たとえば それは簡単にいくつかのライブラリを使用することをアドバイス

例:

// Instantiate the RequestQueue. 
RequestQueue queue = Volley.newRequestQueue(this); 
String url ="http://www.google.com"; 

// Request a string response from the provided URL. 
StringRequest stringRequest = new StringRequest(Request.Method.GET, url, 
      new Response.Listener<String>() { 
    @Override 
    public void onResponse(String response) { 
     // get the response 
    } 
}, new Response.ErrorListener() { 
    @Override 
    public void onErrorResponse(VolleyError error) { 
     // error msg 
    } 
}); 
// Add the request to the RequestQueue. 
queue.add(stringRequest); 

と方法によって、あなたがしている場合エミュレータを使用して、あなたはこのipアドレスを置くべきです10.0.2.2

+0

私は実際にGoogleをブロックしている傷ついた国にいます。私はパッケージのボレーをインストールしていない。 –

0

このコードは私のために働く。

 URL url; 
     HttpURLConnection urlConnection = null; 
     StringBuilder result = new StringBuilder(); 
     BufferedReader reader = null; 

     urlConnection = (HttpURLConnection) url 
         .openConnection(); 
       urlConnection.connect(); 

       InputStream in = urlConnection.getInputStream(); 
       reader = new BufferedReader(new InputStreamReader(in)); 
       //InputStreamReader isw = new InputStreamReader(in); 
       StringBuffer buffer = new StringBuffer(); 
       String line =""; 
       while ((line = reader.readLine()) != null){ 
        buffer.append(line); 
       } 

       String finalJson = buffer.toString(); 
+0

私たちのコードの違いは、 "urlConnection.connect()"メソッドを呼び出したことです。私はそれを試みたが、プログラムはまだ "InputStreamの例外= urlConnection.getInputStream();" –

+0

はい、connect()を試してみましたか?うまく行かなかった? – Orvenito

+0

list.txtの内容は何ですか? – Orvenito

0

実際には、メインスレッドを使用してWebからコンテンツを取得することはできません。そのためには、「AsyncTask」を使用する必要があります。なぜそれが必要なのか分かりませんが、AsyncTaskクラス内でプロセスをラップした後、プログラムが動作します。私はサーバーにファイルをアップロードしようとしたときに同じ問題を抱えました。しかし、メインスレッドを使用してアップロードまたはダウンロードしようとすると、プログラムによって異なるエラーが発生します。

デンプンを含まない場合は、私が行ったことを貼り付けます。

public class TestActivity extends Activity { 

private TextView remoteContent; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_test); 

    String listUrl = "http://192.168.43.157:8080/apk/list.txt"; 
    remoteContent = (TextView) findViewById(R.id.web_response); 
    //String response = getWebResponse(listUrl); 
    //TextView textView = (TextView) findViewById(R.id.web_response); 
    //textView.setText(response); 

    GetApksListTask task = new GetApksListTask(); 
    task.execute(new String[]{listUrl}); 
} 


private class GetApksListTask extends AsyncTask<String, Void, String> { 

    @Override 
    protected String doInBackground(String... urls) { 
     try { 
      URL url = new URL(urls[0]); 
      HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
      conn.setDoInput(true); 
      conn.setRequestMethod("GET"); 
      InputStream is = conn.getInputStream(); 
      InputStreamReader isr = new InputStreamReader(is, "UTF-8"); 
      BufferedReader br = new BufferedReader(isr); 
      StringBuilder response = new StringBuilder(); 
      String line = null; 
      while((line = br.readLine()) != null) { 
       response.append(line); 
      } 
      return response.toString(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return ""; 
     } 
    } 

    @Override 
    protected void onPostExecute(String response) { 
     remoteContent.setText(response); 

     } 
    } 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.test, menu); 
     return true; 
    } 
} 
関連する問題