【问题标题】:android retrieve data from listview and send to server using namevaluepairandroid 从 listview 检索数据并使用 namevaluepair 发送到服务器
【发布时间】:2014-10-20 09:00:12
【问题描述】:

我想从列表视图中检索数据并使用名称值对发送到服务器。我想使用 listview 将电话号码从 listview 发送到服务器。 Listview 和 namevaluepair 在不同的类中。但我的应用程序因以下 logcat 错误而崩溃:

10-20 08:53:57.264: E/AndroidRuntime(1897): FATAL EXCEPTION: main
10-20 08:53:57.264: E/AndroidRuntime(1897): Process: com.zanqi.mainpage1, PID: 1897
10-20 08:53:57.264: E/AndroidRuntime(1897): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.zanqi.mainpage1/com.zanqi.mainpage1.ThreeButton}: java.lang.NullPointerException
10-20 08:53:57.264: E/AndroidRuntime(1897):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2121)
10-20 08:53:57.264: E/AndroidRuntime(1897):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
10-20 08:53:57.264: E/AndroidRuntime(1897):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
10-20 08:53:57.264: E/AndroidRuntime(1897):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
10-20 08:53:57.264: E/AndroidRuntime(1897):     at android.os.Handler.dispatchMessage(Handler.java:102)
10-20 08:53:57.264: E/AndroidRuntime(1897):     at android.os.Looper.loop(Looper.java:136)
10-20 08:53:57.264: E/AndroidRuntime(1897):     at android.app.ActivityThread.main(ActivityThread.java:5017)
10-20 08:53:57.264: E/AndroidRuntime(1897):     at java.lang.reflect.Method.invokeNative(Native Method)
10-20 08:53:57.264: E/AndroidRuntime(1897):     at java.lang.reflect.Method.invoke(Method.java:515)
10-20 08:53:57.264: E/AndroidRuntime(1897):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
10-20 08:53:57.264: E/AndroidRuntime(1897):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
10-20 08:53:57.264: E/AndroidRuntime(1897):     at dalvik.system.NativeStart.main(Native Method)
10-20 08:53:57.264: E/AndroidRuntime(1897): Caused by: java.lang.NullPointerException
10-20 08:53:57.264: E/AndroidRuntime(1897):     at com.zanqi.mainpage1.ThreeButton.<init>(ThreeButton.java:34)
10-20 08:53:57.264: E/AndroidRuntime(1897):     at java.lang.Class.newInstanceImpl(Native Method)
10-20 08:53:57.264: E/AndroidRuntime(1897):     at java.lang.Class.newInstance(Class.java:1208)
10-20 08:53:57.264: E/AndroidRuntime(1897):     at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
10-20 08:53:57.264: E/AndroidRuntime(1897):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2112)
10-20 08:53:57.264: E/AndroidRuntime(1897):     ... 11 more

这是我的列表视图代码: 公共类 TabActivityQueue 扩展片段 {

ListView list;
TextView number;
TextView info;
TextView remark;
TextView statuss;
Button Btngetdata;
ArrayList<HashMap<String, String>> oslist = new ArrayList<HashMap<String, String>>();

//URL to get JSON Array
private static String url = "http://172.22.125.201:8080/Qproject/servlet/Qaction?action_flag=find";

//JSON Node Names 
private static final String Table2 = "table2";
private static final String phonenumber = "phonenumber";
private static final String peoplenumber = "peoplenumber";
private static final String remarks = "remarks";
private static final String status = "status";

JSONArray table2 = null;



 public View onCreateView(LayoutInflater inflater, ViewGroup container, 
            Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            //This layout contains your list view 
                View view = inflater.inflate(R.layout.activity_tab_activity_queue, container, false);


             return view;
        }


@Override
public void onActivityCreated(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
     super.onActivityCreated(savedInstanceState);

oslist = new ArrayList<HashMap<String, String>>();
Btngetdata = (Button)getView().findViewById(R.id.getdata);
Btngetdata.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        new JSONParse().execute();  
    }
});

}

 private class JSONParse extends AsyncTask<String, String, JSONObject> {
     public ProgressDialog pDialog;
    @Override
    protected void onPreExecute() {
       super.onPreExecute();
       number = (TextView)getView().findViewById(R.id.number);
     info = (TextView)getView().findViewById(R.id.info);
     remark = (TextView)getView().findViewById(R.id.remark);
     statuss = (TextView)getView().findViewById(R.id.statuss);
   pDialog = new ProgressDialog(getActivity());
   pDialog.setMessage("Getting Data ...");
   pDialog.setIndeterminate(false);
   pDialog.setCancelable(true);
   pDialog.show();



}

    @Override
    public JSONObject doInBackground(String... args) {

    JSONParser jParser = new JSONParser();

    // Getting JSON from URL
    JSONObject json = jParser.getJSONFromUrl(url);
    return json;
}
 @Override
public void onPostExecute(JSONObject json) {
     pDialog.dismiss();
     try {
            // Getting JSON Array from URL
            table2 = json.getJSONArray(Table2);
            for(int i = 0; i < table2.length(); i++){
            JSONObject c = table2.getJSONObject(i);

            // Storing  JSON item in a Variable
            String number = c.getString(phonenumber);
            String info = c.getString(peoplenumber);
            String remark = c.getString(remarks);
            String statuss = c.getString(status);




            // Adding value HashMap key => value


            HashMap<String, String> map = new HashMap<String, String>();

            map.put(phonenumber, number);
            map.put(peoplenumber, info);
            map.put(remarks, remark);
            map.put(status, statuss);

            oslist.add(map);
            list=(ListView)getView().findViewById(R.id.list);





            ListAdapter adapter = new SimpleAdapter(getActivity(), oslist,
                    R.layout.list_view,
                    new String[] { phonenumber,peoplenumber, remarks,status }, new int[] {
                            R.id.number,R.id.info, R.id.remark,R.id.statuss});

            list.setAdapter(adapter);
            list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                                        int position, long id) {
                    //Toast.makeText(getActivity(), "You Clicked at "+oslist.get(+position).get("name"), Toast.LENGTH_SHORT).show();
                    String numberr = oslist.get(position).get("phonenumber");
                     Intent intent = new Intent(getActivity(), ThreeButton.class);
                     intent.putExtra("key1", numberr);
                     startActivity(intent);
                 } 
                }
            );

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


 }
 }
 }

这是我的 namevaluepair 发送数据的代码:

public class ThreeButton extends Activity implements OnClickListener {

private Button cnfrm;
private Button absnt;
private Button ntfy;
private ProgressBar pb;
String numberr =getIntent().getStringExtra("key1");


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_three_button);

cnfrm =(Button)findViewById(R.id.button1);
absnt =(Button)findViewById(R.id.button2);
ntfy =(Button)findViewById(R.id.button3);
pb=(ProgressBar)findViewById(R.id.progressBar2);
pb.setVisibility(View.GONE);
cnfrm.setOnClickListener(this);
absnt.setOnClickListener(this);
ntfy.setOnClickListener(this);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
return true;
}

public void onClick(View v) {

    // TODO Auto-generated method stub
    switch(v.getId())
    {
    case R.id.button1 :
        pb.setVisibility(View.VISIBLE);
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        nameValuePairs.add(new BasicNameValuePair("RestaurantID","0002"));
        nameValuePairs.add(new BasicNameValuePair("UserID",numberr));
        nameValuePairs.add(new BasicNameValuePair("Check In","1"));
        nameValuePairs.add(new BasicNameValuePair("Absent","0"));
        nameValuePairs.add(new BasicNameValuePair("Notify","0"));
        new MyAsyncTask(nameValuePairs).execute(toString());  
        break;
    case R.id.button2 :
        pb.setVisibility(View.VISIBLE);
        List<NameValuePair> nameValuePairs1 = new ArrayList<NameValuePair>();
        nameValuePairs1.add(new BasicNameValuePair("RestaurantID","0002"));
        nameValuePairs1.add(new BasicNameValuePair("UserID","6585001342"));
        nameValuePairs1.add(new BasicNameValuePair("Check In","0"));
        nameValuePairs1.add(new BasicNameValuePair("Absent","1"));
        nameValuePairs1.add(new BasicNameValuePair("Notify","0"));
        new MyAsyncTask(nameValuePairs1).execute(toString());  
        break;
    case R.id.button3 :
        pb.setVisibility(View.VISIBLE);
        List<NameValuePair> nameValuePairs2 = new ArrayList<NameValuePair>();
        nameValuePairs2.add(new BasicNameValuePair("RestaurantID","0002"));
        nameValuePairs2.add(new BasicNameValuePair("UserID","6585001342"));
        nameValuePairs2.add(new BasicNameValuePair("Check In","0"));
        nameValuePairs2.add(new BasicNameValuePair("Absent","0"));
        nameValuePairs2.add(new BasicNameValuePair("Notify","1"));
        new MyAsyncTask(nameValuePairs2).execute(toString());  
    break;

    }

}

private class MyAsyncTask extends AsyncTask<String, Integer, Double>{
    List<NameValuePair> nameValuePairs;
    public MyAsyncTask(List<NameValuePair> nameValuePairs) {
        this.nameValuePairs=nameValuePairs;
    }

@Override
protected Double doInBackground(String... params) {
    String numberr = params[0];// TODO Auto-generated method stub
    postData(null);
return null;
}

protected void onPostExecute(Double result){
    pb.setVisibility(View.GONE);
    Toast.makeText(getApplicationContext(), "command sent", Toast.LENGTH_SHORT).show();
    }
    protected void onProgressUpdate(Integer... progress){
    pb.setProgress(progress[0]);

}

public void postData(String valueIWantToSend) {
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://172.20.154.8:8080/Server/ChangeStatus");

try {
    // Add your data
    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

    // Execute HTTP Post Request
        HttpResponse response = httpclient.execute(httppost);

    } catch (ClientProtocolException e) {
    // TODO Auto-generated catch block
    } catch (IOException e) {
    // TODO Auto-generated catch block
    } }}}

【问题讨论】:

  • 我实际上只是通过放置 String numberr =getIntent().getStringExtra("key1"); 解决了这个问题在 onClick 下

标签: android listview android-activity


【解决方案1】:

这是你的问题:

String numberr =getIntent().getStringExtra("key1");

intent 为空,因为该行将在 Activity 正确初始化之前被调用。将您的 String 声明为成员变量,但仅在 onCreate 中分配值并测试 null :

public class ThreeButton extends Activity implements OnClickListener {
    // other member variables
    String numberr;

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Intent intent = getIntent();
    if (intent != null){
        numberr = intent.getStringExtra("key1");
    // the rest of the code
    }
}

【讨论】:

    【解决方案2】:

    我认为问题出在String numberr =getIntent().getStringExtra("key1");。尝试在 onCreate 回调中执行此操作。

    【讨论】:

      猜你喜欢
      • 2015-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-11
      • 1970-01-01
      相关资源
      最近更新 更多