Загрузить переменную в мое приложение для Android из URL
Это, наверное, очень просто, но я очень новичок в создании приложений, на самом деле это моя первая попытка.
Я хочу знать, как мне написать код для моего приложения, чтобы перейти на мой сайт, загрузить текстовый файл и сохранить его как переменную.
У меня есть файл "text.txt", и я загружаю его сюда " http://my-test.com/app/", но я не знаю, как заставить мое приложение загружать данные из текстового файла в качестве переменной что я могу использовать. Поэтому я сделал несколько поисков в Google и посмотрел здесь.
Этот пост: Как читать текстовые файлы в Android из Интернета? Это очень актуально, и я пытался следовать этому, и вот как далеко я получил
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.entity.BufferedHttpEntity;
HttpGet httppost = new HttpGet("http://my-test.com/app/text.txt");
HttpResponse response = httpclient.execute(httppost);
HttpEntity ht = response.getEntity();
BufferedHttpEntity buf = new BufferedHttpEntity(ht);
InputStream is = buf.getContent();
BufferedReader r = new BufferedReader(new InputStreamReader(is));
StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
total.append(line + "\n");
}
Я не знаю почему, но программа, которую я использую (eclipse), все еще дает мне лампочку и красный крест сбоя, и он любезно говорит: "httpclient не может быть решен". Это нужно решить? как мне решить это? и будет ли это работать?
Весь код
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.entity.BufferedHttpEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import com.google.android.youtube.player.YouTubeBaseActivity;
import com.google.android.youtube.player.YouTubeInitializationResult;
import com.google.android.youtube.player.YouTubePlayer;
import com.google.android.youtube.player.YouTubePlayerView;
import com.google.android.youtube.player.YouTubePlayer.Provider;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends YouTubeBaseActivity implements
YouTubePlayer.OnInitializedListener {
HttpClient httpclient = new DefaultHttpClient();
HttpGet httppost = new HttpGet("http://my-test.com/app/text.txt");
HttpResponse response = httpclient.execute(httppost);
HttpEntity ht = response.getEntity();
BufferedHttpEntity buf = new BufferedHttpEntity(ht);
InputStream is = buf.getContent();
BufferedReader r = new BufferedReader(new InputStreamReader(is));
StringBuilder total = new StringBuilder();
static String line = ""
while ((line = r.readLine()) != null) {
total.append(line + "\n");
}
static private final String DEVELOPER_KEY = "";
private static final String VIDEO = line;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
YouTubePlayerView youTubeView = (YouTubePlayerView)
findViewById(R.id.youtube_view);
youTubeView.initialize(DEVELOPER_KEY, this);
}
@Override
public void onInitializationFailure(Provider provider,
YouTubeInitializationResult error) {
Toast.makeText(this, "Oh no! "+error.toString(),
Toast.LENGTH_LONG).show();
}
@Override
public void onInitializationSuccess(Provider provider, YouTubePlayer player,
boolean wasRestored) {
player.loadVideo(VIDEO);
}
}
1 ответ
httpclient
в вашем коде HttpResponse response= httpclient.execute(httppost);
еще не был определен, поэтому вам нужно определить это. Я думаю, что глядя на код, который вы захотите использовать ApacheHttpClient, посмотрите этот учебник Vogella здесь для получения дополнительной информации ( нужная вам строка HttpClient httpclient = new DefaultHttpClient()
РЕДАКТИРОВАТЬ:
на ваш второй вопрос, весь этот код здесь
HttpClient httpclient = new DefaultHttpClient();
HttpGet httppost = new HttpGet("http://my-test.com/app/text.txt");
HttpResponse response = httpclient.execute(httppost);
HttpEntity ht = response.getEntity();
BufferedHttpEntity buf = new BufferedHttpEntity(ht);
InputStream is = buf.getContent();
BufferedReader r = new BufferedReader(new InputStreamReader(is));
StringBuilder total = new StringBuilder();
String line = ""
while ((line = r.readLine()) != null) {
total.append(line + "\n");
}
должен быть внутри вызова метода. В данный момент это вызывается, когда класс инициализируется, что означает, что вы заблокируете поток, когда httpclient.execute(httppost);
называется. если вы положите его в сторону нового метода, а затем вызвать этот метод из onResume()
тогда вам повезет больше, возможно, вот так:
private String requestData(String url){
HttpClient httpclient = new DefaultHttpClient();
HttpGet httppost = new HttpGet("http://my-test.com/app/text.txt");
// this should be done in a background thread (or AsyncTask), but we'll leave it for now
HttpResponse response = httpclient.execute(httppost);
HttpEntity ht = response.getEntity();
BufferedHttpEntity buf = new BufferedHttpEntity(ht);
InputStream is = buf.getContent();
BufferedReader r = new BufferedReader(new InputStreamReader(is));
StringBuilder total = new StringBuilder();
String line = ""
while ((line = r.readLine()) != null) {
total.append(line + "\n");
}
// return the data we received to our caller
return total.toString();
}