Java 在textview(android)上打印数组值

Java 在textview(android)上打印数组值,java,android,arrays,string,textview,Java,Android,Arrays,String,Textview,我试图在文本视图中打印目标地址及其与原点的距离。但是,我不断得到错误,或者只是显示最后一个值。我不希望文本视图得到更新,我希望在新值下打印新值 这是我的密码 public class MainActivity extends Activity { private static final String TAG_ROWS = "rows"; private static final String TAG_ELEMENTS = "elements"; private

我试图在文本视图中打印目标地址及其与原点的距离。但是,我不断得到错误,或者只是显示最后一个值。我不希望文本视图得到更新,我希望在新值下打印新值 这是我的密码

public class MainActivity extends Activity {
        private static final String TAG_ROWS = "rows";
    private static final String TAG_ELEMENTS = "elements";
    private static final String TAG_DISTANCE = "distance";
    private static final String TAG_VALUE = "value";
    private static final String TAG_ADDRESS = "destination_addresses";
    String Addresses[]= {"2906+west+Broadway+Vancouver+BC","4750+Kingsway+Burnaby+BC","2633+Sweden+Way+110+Richmond","943+Marine+Dr+North+Vancouver","4567+Lougheed+Hwy+Burnaby"};

    String data;
    HttpClient client;
    double minDistance=0;
    static JSONObject jObj = null;
    String destination_addresses;
    JSONArray rows;
    String destination;
    String distanceStr;
    String[] value_destination;
    String value;
    final static String URL= "http://maps.googleapis.com/maps/api/distancematrix/json?";
    TextView result;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                result = (TextView) findViewById(R.id.text1);
                result.setText("Distace from the location" + destination + " is :" + distanceStr );

          new TestGoogleMaps().execute("");

        }
        public class TestGoogleMaps extends AsyncTask<String, Void, String>{
                @Override
                protected String doInBackground(String... params) {
                        // TODO Auto-generated method stub
                        try {
                    try {
                        ClosestObject();
                    } catch (ClientProtocolException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (JSONException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                finally {

                }
                        return null;
                }
                @Override
                protected void onPostExecute(String resuls) {
                        // TODO Auto-generated method stub
                        super.onPostExecute(resuls);
                 }
        }
        public void ClosestObject() throws JSONException, ClientProtocolException, IOException {

        // Creating JSON Parser instance
    StringBuilder url = new StringBuilder(URL);
    client=new DefaultHttpClient();
    for (int index=0; index<Addresses.length; index++){
    String str_parameters = "origins="+ URLEncoder.encode("1359+Richards+Street+Vancouver+BC","UTF-8")+"&destinations="+ URLEncoder.encode(Addresses[index],"UTF-8")+"&mode=driving&language="+ URLEncoder.encode("en-FR","UTF-8")+"&sensor=false";
    System.out.println("URL URl :: "+url+str_parameters);
   HttpGet get = new HttpGet(url+str_parameters);
   get.setHeader("Accept", "application/json");
   get.setHeader("Content-type", "application/json");
    HttpResponse r = client.execute(get);
    HttpEntity en = r.getEntity();
    data = EntityUtils.toString(en);
   System.out.println("ClosestObject Response :: "+data);


    try {
           jObj = new JSONObject(data);

            destination = jObj.getString("destination_addresses");
            // printing the destination and checking wheather parsed correctly
            Log.v("Destination", destination);

            JSONArray jarRow = jObj.getJSONArray("rows");
            for(int i=0;i<jarRow.length(); i++){
                // creating an object first
                JSONObject ElementsObj = jarRow.getJSONObject(i);
                // and getting the array out of the object
                JSONArray jarElements = ElementsObj.getJSONArray("elements");
                for(int j=0; j<jarElements.length(); j++){
                    JSONObject distanceObj = jarElements.getJSONObject(j).getJSONObject("distance");
                    distanceStr = distanceObj.getString("value");
                    Log.v("finally getting distance : ", distanceStr);

                }           }

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

        }     

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

}
公共类MainActivity扩展活动{
私有静态最终字符串标记_ROWS=“ROWS”;
私有静态最终字符串标记_ELEMENTS=“ELEMENTS”;
私有静态最终字符串标记_DISTANCE=“DISTANCE”;
私有静态最终字符串标记_VALUE=“VALUE”;
私有静态最终字符串TAG_ADDRESS=“destination_addresses”;
字符串地址[]={“2906+西部+百老汇+温哥华+不列颠哥伦比亚省”,“4750+金斯韦+本纳比+不列颠哥伦比亚省”,“2633+瑞典+路+110+里士满”,“943+海军陆战队+Dr+北部+温哥华”,“4567+洛黑德+Hwy+本纳比”};
字符串数据;
HttpClient;
双心距=0;
静态JSONObject jObj=null;
字符串目的地址;
JSONArray行;
字符串目的地;
弦远祖;
字符串[]值\目的地;
字符串值;
最终静态字符串URL=”http://maps.googleapis.com/maps/api/distancematrix/json?";
文本视图结果;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
结果=(TextView)findViewById(R.id.text1);
result.setText(“与位置的距离”+目的地+”为:“+distconstes”);
新建TestGoogleMaps().execute(“”);
}
公共类TestGoogleMaps扩展异步任务{
@凌驾
受保护的字符串doInBackground(字符串…参数){
//TODO自动生成的方法存根
试一试{
试一试{
ClosestObject();
}捕获(客户端协议例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(JSONException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
最后{
}
返回null;
}
@凌驾
受保护的void onPostExecute(字符串结果){
//TODO自动生成的方法存根
super.onPostExecute(results);
}
}
public void ClosestObject()抛出JSONException、ClientProtocolException、IOException{
//创建JSON解析器实例
StringBuilder url=新的StringBuilder(url);
client=新的DefaultHttpClient();
对于(int index=0;index尝试以下方法:

MainActivity.this.runOnUiThread(new Runnable() {
    public void run() {
        result.setText(result.getText().toString() + "\n" + distanceStr);
    }
});
您必须更新UI线程上的
TextView
,如图所示,因为JSON响应是在与
AsyncTask
不同的线程中接收的,否则您将收到从错误线程异常调用的

我希望在新值下打印新值

因此,如果您想将所有目的地打印到
TextView
中,最有效的方法是使用
StringBuffer
创建最终分配给TextView的整个字符串

我建议您将ClosestObject方法的返回类型更改为StringBuffer(或Builder),并在循环中向其追加数据。同时将AsyncTask的第三个参数更改为StringBuffer

伪代码:

@Override
protected StringBuffer doInBackround() {
    ...
    StringBuffer buff = ClosestObject();
    return buff;
}
在ClosesObject方法中:

StringBuffer buff = new StringBuffer();
for (int i = 0; i < arr.length(); i++) {
   // getting values from JSON
   buff.append(value).append("\n"); // buff.append(value1 + "," + value2 + "\n")
}
...
return buff;
注:
不要忘记,通过Java中的命名约定,方法的签名应该以小写字母而不是大写字母开头。

abstract
textView.setText(textView.getText()+“\n”+newTextString)
yourTextView.setText(result.toString());