【问题标题】:load a variable to my android app from a URL从 URL 将变量加载到我的 android 应用程序
【发布时间】:2013-10-10 01:41:04
【问题描述】:

这可能真的很简单,但我对制作应用程序很陌生,事实上这是我的第一次尝试。

我想知道我应该如何为我的应用编写代码以访问我的网站、加载文本文件并将其存储为变量。

我有一个文件“text.txt”并上传到这里“http://my-test.com/app/” 但我不知道如何让我的应用程序将文本文件中的数据作为我可以使用的变量加载。所以我做了一些谷歌搜索并在这里查看。

这篇文章:How to read text file in android from web? 非常相关,我已经尝试关注它,这就是我已经走了多远

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);
}
}

【问题讨论】:

标签: android androidhttpclient


【解决方案1】:

您的代码中的httpclient HttpResponse response= httpclient.execute(httppost); 尚未定义,因此您需要定义它。我想看看你会想要使用 ApacheHttpClient 的代码,看看at this Vogella tutorial here 了解更多信息(你想要的行是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();
}

【讨论】:

  • 是的,这很有帮助,谢谢。现在还有一件事我不知道。也就是说,我如何从文件中调用数据?我认为这种情况不需要while循环,因为文件中只有一行16个字符,但是我如何在这里获取这些数据... static private final String MYTEXT = ???;这就是问号所在。
  • @user2865082 我不确定您文件中的数据是什么样的,但您现在应该以字符串形式拥有它,因此您应该能够从那里操作它。否则,如果您发布文件的结构,我可以尝试帮助您。如果对您的问题有帮助,请接受答案:)
  • .txt 文件中的数据看起来像这样 "ehcMexkVomYaFqoI" 无法对非静态字段总计进行静态引用是我的问题那么我应该将String line; 更改为static String line = ""; 吗?
  • 字段“total”不是静态的,但您尝试静态引用它,这是您的问题。我不认为字符串线有问题;。也许将您所有的代码发布在 OP 中,以便我们可以看到您正在尝试做什么?
猜你喜欢
  • 1970-01-01
  • 2021-06-19
  • 2012-03-09
  • 1970-01-01
  • 2015-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多