android - 使用 okHttp 从 URL 获取文本时出现逻辑错误

标签 android android-asynctask okhttp

我正在尝试编写一个应用程序来从这样的 url 中读取文本文件“http://chemvaaj.xzn.ir/test/words.txt” 这似乎是正确的,但它没有返回它应该返回的内容:\

这是我的代码:

   public  String DL (){
    OkHttpHandler handler = new OkHttpHandler();
     String text ="";
    try {
        text = handler.execute().get();


        if (text!= null && text.length()> 0){

            System.out.println("not empty");

            return text;
        }

    } catch (Exception e) {
            text= "empty !!";
    }
    return text;
}

这是 OkHttpHandler 类:

public class OkHttpHandler extends AsyncTask<Void, Void, String> {

private final String DB_URL = "http://chemvaaj.xzn.ir/test/words.txt";

OkHttpClient httpClient = new OkHttpClient();

@Override
protected String doInBackground(Void... params) {

    Request.Builder builder = new Request.Builder();
    builder.url(DB_URL);

    Request request = builder.build();

    try {

        Response response = httpClient.newCall(request).execute();
        return response.body().toString();

    } catch (Exception e) {
        e.printStackTrace();
    }

    return null;
}

@Override
protected void onPostExecute(String s) {
    super.onPostExecute(s);
    Log.e("ANSWER", "" + s);
}
}

这是我调用 DL() 函数后的 logcat:

10-28 00:23:25.167 17288-17288/erfan.bagheri.chemvaaj E/ANSWER:com.squareup.okhttp.internal.http.RealResponseBody@423bc6b8

最佳答案

您应该将 return response.body().toString(); 替换为 return response.body().string();

请引用我下面的工作示例代码:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTextView = (TextView) findViewById(R.id.textView);
        new GetFileRequest().execute();
    }
...
private class GetFileRequest extends AsyncTask<Void, Void, String> {
        @Override
        protected String doInBackground(Void... voids) {
            try {
                OkHttpClient client = new OkHttpClient();
                Request request = new Request.Builder()
                        .url("http://chemvaaj.xzn.ir/test/words.txt")
                        .build();
                Response response = client.newCall(request).execute();
                return response.body().string();
            } catch (IOException e) {
                e.printStackTrace();
                return e.toString();
            }
        }
        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            if (mTextView != null && result != null) {
                mTextView.setText(result);
            }
        }
    }

这是截图

BNK's screenshot

希望这对您有所帮助!

关于android - 使用 okHttp 从 URL 获取文本时出现逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33378516/

相关文章:

java - 使用 gridview 时进度条显示错误的进度

java - 如何在 OkHttp 中保持连接或维护 session

android - 在android中将JsonArray转换为byte[]数组

java - 我们应该在 HTTP/2 中使用连接池吗

android - FrameLayout 不适合它的空间

android - 我怎么知道以编程方式在Android设备上激活了google sync?

android - Firebase 条件列表数据检索 android

android - 从 AsyncTask 安全刷新 Activity 详细信息

java - 调用ASyncTask进行通知

android - AsyncTask 中的 ProgressDialog 抛出 NullPointerException?