دریافت اطلاعات فایل txt از طریق url درآندروید
سوال : اگر بخوام مثلا عنوان رو از یه لینک متنی تو یه هاست ( http://www.name.com/file.txt ) بگیرم به چه صورت باید عمل کنم ؟
پاسخ : در ادامه با مثال ساده ای فایل txt رو از طریق url باز میکنیم و اطلاعات داخل فایل را در متغییر result ذخیره میکنیم و این نکته رو هم فراموش نکنید که دسترسی به اینترنت رو به برنامه اضافه کنید .
فایل Main.java :
package com.tooba.co; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.widget.EditText; import android.widget.Toast; import android.app.Activity; public class Main extends Activity { private EditText etResponse; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); etResponse = (EditText) findViewById(R.id.etResponse); new HttpAsyncTask().execute("http://192.168.0.152/index.txt"); } public static String GET(String url){ InputStream inputStream = null; String result = ""; try { HttpClient httpclient = new DefaultHttpClient(); HttpResponse httpResponse = httpclient.execute(new HttpGet(url)); inputStream = httpResponse.getEntity().getContent(); if(inputStream != null) result = convertInputStreamToString(inputStream); else result = "Did not work!"; } catch (Exception e) { Log.d("", e.getLocalizedMessage()); } return result; } private static String convertInputStreamToString(InputStream inputStream) throws IOException{ BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream)); String line = ""; StringBuilder result = new StringBuilder(); while((line = bufferedReader.readLine()) != null) result.append(line+"\n"); inputStream.close(); return result.toString(); } private class HttpAsyncTask extends AsyncTask<String, Void, String> { protected String doInBackground(String... urls) { return GET(urls[0]); } protected void onPostExecute(String result) { Toast.makeText(getBaseContext(), "Received!", Toast.LENGTH_LONG).show(); etResponse.setText(result); } } }
فایل main.xml :
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <EditText android:id="@+id/etResponse" android:layout_width="match_parent" android:layout_height="200dp" android:ems="10" android:layout_marginTop="10dp" android:inputType="textMultiLine" > <requestFocus /> </EditText> </LinearLayout>
فایل AndroidManifest.xml (دسترسی به اینترنت رو هم در این فایل اضافه کنید) :
<uses-permission android:name="android.permission.INTERNET" />
در لاین ۲۷ فایل Main.java آدرس فایل txt را تغییر بدهید .
-
علی رسالت - 1 اکتبر 2015
خیلی هم خوب هیچ مشکلی نداره
ممنون -
احسان کریمی - 22 مارس 2018
سلام خسته نباشید
من این کد ها رو تست کردم تو نسخه های قدیمی اندروید مشکلی نداره
اما الان این خطاها رو دریافت میکنمError:(145, 37) error: incompatible types: DefaultHttpClient cannot be converted to HttpClient
Error:(146, 51) error: cannot find symbol method execute(HttpGet)
Error:(306, 41) error: incompatible types: DefaultHttpClient cannot be converted to HttpClient
Error:(309, 55) error: cannot find symbol method execute(HttpGet,HttpContext)با استفاده از این کتابخونه ها
compile ‘org.apache.httpcomponents:httpcore:4.4.1’
compile ‘org.apache.httpcomponents:httpclient:4.5’
تونستم خطاهای قبلی رو بر طرف کنم
حتا اینم اضافه کردم
seLibrary ‘org.apache.http.legacy’
همه مشکلات تموم شد فقط این خطای بالا که درج کردم مونده راه حل چیه؟
میشه اموزش بالا و کدهاشو به روز کنید
که خطای این execute هم بر طرف بشه
ممنون