在使用新的API android进行测试兼容性时获取空数据

时间:2015-04-19 10:22:22

标签: android json okhttp

我构建了一个消耗JSON数据的应用程序,我在android设备API上做了测试16,我使用库'okhttp'连接到服务器,当我使用API​​ 16时,所有这些都很顺利,但是当我使用它时API 17和19,数据无法显示,只显示错误日志,如下所示:

04-19 16:17:38.394  14379-14411/com.example.mnafian.gambar E/Err IO﹕ java.net.UnknownHostException: http://

这是我为检索数据而编写的代码示例:

package com.example.mnafian.gambar;

import android.media.Image;
import android.os.AsyncTask;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ImageView;
import android.widget.TextView;

import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.HashMap;


public class MainActivity extends ActionBarActivity {

    TextView tv1, tv2;
    OkHttpClient clientRest = new OkHttpClient();
    String list[] = new String[100];

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv1 = (TextView) findViewById(R.id.header_view);
        tv2 = (TextView) findViewById(R.id.detail_view);

        new LoadText().execute();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    public class LoadText extends
            AsyncTask<String, Void, String[]> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();

        }

        @Override
        protected String[] doInBackground(String... params) {
            String list[] = new String[100];
            try {
                String url = "http://www.samplesite.net/omahnyewo/servicelist.php?type=kontrakan&lat=-7.9425479&long=112.6043546";

                Request request = new Request.Builder().url(url)
                        .build();

                Response response = clientRest.newCall(request).execute();
                String responsedata = response.body().string();
                JSONArray callData = new JSONArray(responsedata);

                if (callData != null) {
                    for (int i = 0; i < callData.length(); i++) {
                        JSONObject objData = callData.getJSONObject(i);
                        String tv1 = objData.getString("nama");
                        String tv2 = objData.getString("harga");
                        list[0] = tv1;
                        list[1] = tv2;
                    }
                }


            } catch (JSONException eex) {
                Log.e("Err JSON", eex.toString());
            } catch (IOException eex) {
                Log.e("Err IO", eex.toString());
            }
            return list;
        }

        @Override
        protected void onPostExecute(String[] strings) {
            super.onPostExecute(strings);
            list = strings;

            if (list.length>0){
                tv1.setText(list[0]);
                tv2.setText(list[1]);
            }
        }
    }
}

上面的代码没有收到任何数据,我使用2.2.0版本的库okhttp。

我创建的代码中是否有错误?

1 个答案:

答案 0 :(得分:1)

从错误日志中,我们可以推断出您尝试访问的API主机无法识别/到达(可能已死)。您的互联网连接或DNS服务器可能存在问题。但是,如果您使用的是本地计算机,请阅读thisthis。我的建议是,首先尝试使用内部浏览器检查您使用的URI。