Загрузить переменную в мое приложение для 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();
}
Другие вопросы по тегам