安卓中的问题,大家帮忙看看

问题描述

安卓中的问题,大家帮忙看看

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.StrictMode;
import android.util.Log;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONObject;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class LieBiao extends Activity {
ListView listView;
String [] titles={"汽车1","汽车2","汽车3","汽车4"};
String [] texts={"详细信息A","详细信息B","详细信息C","详细信息D"};
String [] mm={"1","2","2","2"};

// String [] titles2;
// String [] texts2;
// String [] mm2;

int [] resIds={R.drawable.mycar,R.drawable.mycar,R.drawable.mycar,R.drawable.mycar};

public String ServerUrl = "http://192.168.11.245:1234/sss/Remote/";

public ProgressDialog progressDialog1;
private SharedPreferences preferences;
private Editor editor;
private String loginName;

// public int test ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//防止线程阻塞
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()

.detectDiskReads().detectDiskWrites().detectNetwork()

.penaltyLog().build());

StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()

.detectLeakedSqlLiteObjects().detectLeakedClosableObjects()

.penaltyLog().penaltyDeath().build());

    progressDialog1 = ProgressDialog.show(LieBiao.this, "",
            "服务器连接中...", true, false);

    new Thread() {

        @Override
        public void run() {

            // 向handler发消息
            handler.sendEmptyMessage(0);
        }
    }.start();

// if (test == 1) {
// this.setTitle("您的汽车信息如下");
// //拿到listview对象
// listView=(ListView)this.findViewById(R.id.MyListView);
//

// //设置实时更新数据
//
// listView.setAdapter(new ListViewAdapter(titles,texts,resIds));
// for(int i=0;i<titles.length;i++){//循环数组,arr.length是数组长度
// System.out.println(titles[i]);//打印数组中的元素
// }
// }

    this.setTitle("您的汽车信息如下");
    //拿到listview对象
    listView=(ListView)this.findViewById(R.id.MyListView);

    //设置实时更新数据

    listView.setAdapter(new ListViewAdapter(titles,texts,resIds));
      for(int i=0;i<titles.length;i++){//循环数组,arr.length是数组长度
          System.out.println(titles[i]);//打印数组中的元素
        }
}

private Handler handler = new Handler() {

    @SuppressLint("HandlerLeak")
    @Override
    public void handleMessage(Message msg) {
        // 查询操作
        searchcar();

    }
};

private void searchcar() {
    String brand = null;
    String color = null;
    String style = null;
    String oilMass = null;
    String plateNumber = null;

    // 打开网络连接
    HttpClient client = new DefaultHttpClient();
    StringBuilder builder = new StringBuilder();

    // 服务器提交地址
    HttpGet myget = new HttpGet(ServerUrl
            + "MyCar.ashx?type=mycar&LoginName=123" //+ loginName
            //+ editText1.getText().toString()
            );
    try {

        HttpResponse response = client.execute(myget);
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                response.getEntity().getContent()));
        // 填充数据流
        for (String s = reader.readLine(); s != null; s = reader.readLine()) {
            builder.append(s);
        }
        Log.i("cat", ">>>>>>" + builder.toString());
        // 读取json返回数组
        JSONObject jsonObject = new JSONObject(builder.toString());
         JSONArray jsonArray = jsonObject.getJSONArray("rows");
         ArrayList<String> brandlist = new ArrayList<String>();
         ArrayList<String> colorlist = new ArrayList<String>();
         ArrayList<String> stylelist = new ArrayList<String>();
         ArrayList<String> oilMasslist = new ArrayList<String>();
         ArrayList<String> plateNumberlist = new ArrayList<String>();
         for(int i=0;i<jsonArray.length();i++){
             JSONObject jsonObject2 = (JSONObject)jsonArray.opt(i);
              brand = jsonObject2.getString("JSON_品牌");
              brandlist.add(brand);

              color = jsonObject2.getString("JSON_颜色");
              colorlist.add(color);

              style = jsonObject2.getString("JSON_车型");
              stylelist.add(style);

              oilMass = jsonObject2.getString("JSON_油量");
              oilMasslist.add(oilMass);

              plateNumber = jsonObject2.getString("JSON_车牌号");
              plateNumberlist.add(plateNumber);

         }
         Log.i("cat", ">>>>>>" + brandlist.toString());
         Log.i("cat", ">>>>>>" + colorlist.toString());
         Log.i("cat", ">>>>>>" + stylelist.toString());
         Log.i("cat", ">>>>>>" + oilMasslist.toString());
         Log.i("cat", ">>>>>>" + plateNumberlist.toString()); 

         titles = (String[]) brandlist.toArray(new String[brandlist.size()]);
         texts  = (String[]) colorlist.toArray(new String[colorlist.size()]);
          mm = (String[]) stylelist.toArray(new String[stylelist.size()]);

          for(int i=0;i<titles.length;i++){//循环数组,arr.length是数组长度
              System.out.println(titles[i]);//打印数组中的元素
            }

            Toast.makeText(LieBiao.this, "查询成功", Toast.LENGTH_SHORT)
            .show();

// test = 1;

        progressDialog1.dismiss();

    } catch (Exception e) {
        //Log.v("url返回", "false");
        e.printStackTrace();
        Toast.makeText(LieBiao.this, "服务器数据查询失败", Toast.LENGTH_SHORT)
                .show();
        progressDialog1.dismiss();
    }
}   

//定义适配器
public class ListViewAdapter extends BaseAdapter{
    View [] itemViews;
    public ListViewAdapter(String [] itemTitles, String [] itemTexts,
            int [] itemImageRes){
        itemViews = new View[itemTitles.length];

        for (int i=0; i<itemViews.length; ++i){
            itemViews[i] = makeItemView(itemTitles[i], itemTexts[i],
                    itemImageRes[i]);
        }
    }

    public int getCount()   {
        return itemViews.length;
    }

    public View getItem(int position)   {
        return itemViews[position];
    }

    public long getItemId(int position) {
        return position;
    }

    private View makeItemView(String strTitle, String strText, int resId) {
        LayoutInflater inflater = (LayoutInflater)LieBiao.this
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        // 使用View的对象itemView与R.layout.item关联
        View itemView = inflater.inflate(R.layout.listview_item, null);

        // 通过findViewById()方法实例R.layout.item内各组件
        TextView title = (TextView)itemView.findViewById(R.id.text0);
        title.setText(strTitle);
        TextView text = (TextView)itemView.findViewById(R.id.text1);
        text.setText(strText);
        ImageView image = (ImageView)itemView.findViewById(R.id.mycar);
        image.setImageResource(resId);

        return itemView;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null)
            return itemViews[position];
        return convertView;
    }
}

}

我想问一下titles数组在这一句
titles = (String[]) brandlist.toArray(new String[brandlist.size()]);
我又重新赋值了,为什么这一句

listView.setAdapter(new ListViewAdapter(titles,texts,resIds));
里面的titles的值还是一开始赋的值 String [] titles={"汽车1","汽车2","汽车3","汽车4"};

到底是什么问题,我不清楚,新人求教各位大神!

谢谢

解决方案


1、titles = (String[]) brandlist.toArray(new String[brandlist.size()]);重新赋值,对adatper中的itemTitles是不会产生任何影响的,改变titles后,这2个变量指向2个不同的数组。
2、itemViews[i] = makeItemView(itemTitles[i],在传入数组后,还没getView,直接生产了TextView数组,实际已经抛弃了itemViews,即使titles不改变指向,只改变里面的元素,对界面也没有影响。

改改
activity中声明一个ListViewAdapter lstAdapter;
 listView.setAdapter(new ListViewAdapter(titles,texts,resIds));
 改成
 lstAdapter = new ListViewAdapter(titles,texts,resIds);
 listView.setAdapter(lstAdapter);

 ListViewAdapter改
 public class ListViewAdapter extends BaseAdapter{
    View [] itemViews;
    public ListViewAdapter(String [] itemTitles, String [] itemTexts,
            int [] itemImageRes){
            init(itemTitles,itemTexts,itemImageRes);
    }
    public void init(String [] itemTitles, String [] itemTexts,
            int [] itemImageRes){//增加这个方法
        itemViews = new View[itemTitles.length];

        for (int i=0; i<itemViews.length; ++i){
            itemViews[i] = makeItemView(itemTitles[i], itemTexts[i],
                    itemImageRes[i]);
        }
    }
    public int getCount()   {
        return itemViews.length;
    }

    public View getItem(int position)   {
        return itemViews[position];
    }

    public long getItemId(int position) {
        return position;
    }

    private View makeItemView(String strTitle, String strText, int resId) {
        LayoutInflater inflater = (LayoutInflater)LieBiao.this
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        // 使用View的对象itemView与R.layout.item关联
        View itemView = inflater.inflate(R.layout.listview_item, null);

        // 通过findViewById()方法实例R.layout.item内各组件
        TextView title = (TextView)itemView.findViewById(R.id.text0);
        title.setText(strTitle);
        TextView text = (TextView)itemView.findViewById(R.id.text1);
        text.setText(strText);
        ImageView image = (ImageView)itemView.findViewById(R.id.mycar);
        image.setImageResource(resId);

        return itemView;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null)
            return itemViews[position];
        return convertView;
    }
}
}

在
titles = (String[]) brandlist.toArray(new String[brandlist.size()]);
         texts  = (String[]) colorlist.toArray(new String[colorlist.size()]);
          mm = (String[]) stylelist.toArray(new String[stylelist.size()]);
                    增加
                    lstAdapter.init(titles,texts,mm);//更新值
                    listAdapter.notifyDataSetChanged();//触发更新事件
时间: 2024-09-23 01:28:10

安卓中的问题,大家帮忙看看的相关文章

安卓中解析json出现问题,大家帮忙看看

问题描述 安卓中解析json出现问题,大家帮忙看看 05-07 01:24:03.837: W/System.err(1349): org.json.JSONException: Unterminated string at character 30 of {"Result":"1","LoginPwd":"456} 05-07 01:24:03.837: W/System.err(1349): at org.json.JSONToke

android-关于安卓中的IMPORTANCE_FOREGROUND的问题

问题描述 关于安卓中的IMPORTANCE_FOREGROUND的问题 需要实现的效果是,判断出多个应用中,目前显示在屏幕上的是哪一个. 使用IMPORTANCE FOREGROUND作为判断条件,仍然不能获得满意效果. 求大神帮忙指点. 解决方案 https://segmentfault.com/q/1010000000687701

android-在安卓中创建出折叠效果的textview

问题描述 在安卓中创建出折叠效果的textview 我要把textView弄成像上面图一样的效果,我有9个图片 但是不知道怎么样把这种PNG图片转换为textView的折叠背景.希望大家帮忙,一起解决一下. 解决方案 解决方法如下: <TextViewandroid:id=""@+id/yourTextViewWidget""android:layout_width=""wrap_content""android:lay

java的awt中的方法在安卓中如何对应?

问题描述 java的awt中的方法在安卓中如何对应? import java.awt.Frame; import java.awt.Image; import java.awt.MediaTracker; import java.awt.image.PixelGrabber; 在安卓中这些都是报错的,请求大神帮忙解决 解决方案 android中没有awt的包,也无法运行awt. 根据界面重新写布局xml文件.

安卓中登录界面的用户名传递到下一个界面

问题描述 安卓中登录界面的用户名传递到下一个界面 大家帮忙看看啊 怎么传递loginName啊 解决方案 感觉很奇怪.你的Bundle里面的数据是传到并不是MyCarActivity,那应该是没办法从MainActivity里面读取到Bundle里面的LoginName的.你应该要把MyCarActivity改为MainActivity吧 解决方案二: 通过intent,打开一个activity,都需要这个的 解决方案三: 直接通过intent去put值,对方接收时,用getintent获取并g

安卓 应用开发-安卓中如何获取http请求头?

问题描述 安卓中如何获取http请求头? 如题,最近在整免流.求大神解答如何用代码获取http请求头.............. 解决方案 HttpClient工具提供了设置和获取请求.响应头的方法的,详细参考:http://blog.csdn.net/z69183787/article/details/42966829 解决方案二: 例子: public void run() {7 //用HttpClient发送请求,分为五步8 HttpClient httpCient = new Defau

Android安卓中循环录像并检测内存卡容量

 这篇文章主要介绍了Android安卓中循环录像并检测内存卡容量,当内存卡空间已满时,本文还实现自动删除视频列表里面的第一个文件,需要的朋友可以参考下     ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 /** * 循环录像,当内存卡容量少于300M时,自动删除视频列表里面的第一个文件 */ private void xunhuanl

ios-IOS中如何实现类似安卓中startActivityForResult的效果?

问题描述 IOS中如何实现类似安卓中startActivityForResult的效果? 我要在IOS版本开发一个应用,但是我是安卓开发的,如何在IOS中实现一个类似startActivityForResult的效果?需要展示一个新的view controller,然后在新view controller关闭时候向当前view controller返回一个control.同时还需要触发一个回调方法. 如何在ios中实现这些? 解决方案 有很多种方法实现. 首先,在应用的delegate中建立一个导

swiper js滑块幻灯片-swiper.js写的一个滑块,在安卓中不能滑动

问题描述 swiper.js写的一个滑块,在安卓中不能滑动 在IOS上显示正常, 安卓4.1 .4.2不能运行,5.0的可以.现在怎么样可以让安卓手机能正常显示. 解决方案 没有涉猎过,不是很清楚 解决方案二: 同问,不过在我的是在手机浏览器上可以,但是通过微信和QQ打开就不能滚动了,如果解决望分享 解决方案三: 同问,不过在我的是在手机浏览器上可以,但是通过微信和QQ打开就不能滚动了,如果解决望分享 解决方案四: 同问,不过在我的是在手机浏览器上可以,但是通过微信和QQ打开就不能滚动了,如果解