【发布时间】: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