我遇到了一个非常奇怪的错误。只有在我定义 nameValuePairs.add(new BasicNameValuePair(“country”,“USA”))时,下面的方法才能将数据发布到我的PHP Web服务并检索JSON编码数据; 但是,如果我使用String变量country而不是“USA”,我将从我的Web服务中获取null。我检查了String country的值,它不是null。以下是我的代码
我的字符串国家/地区定义如下:
public class Countries extends SupportMapFragment implements
LocationListener, LocationSource
{
private GoogleMap map;
private OnLocationChangedListener mListener;
private LocationManager locationManager;
double mLatitude = 0;
double mLongitude = 0;
String country = "";
.......
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
.......
}
字符串国家/地区通过Bundle对象获取上一个活动的值。该值不为空
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View root = super.onCreateView(inflater, container, savedInstanceState);
Bundle bundle = new Bundle();
bundle = getArguments();
if(bundle == null)
Toast.makeText(getActivity(), "Country is NULL",
Toast.LENGTH_LONG).show();
else
{
country = getArguments().getString("countryName");
}
map = getMap();
return root;
}
这是我的发布数据方法。
private String postCountryType()
{
String responseStr = "";
try
{
// url where the data will be posted
String postReceiverUrl = "http://.../country.php";
// HttpClient
HttpClient httpClient = new DefaultHttpClient();
// post header
HttpPost httpPost = new HttpPost(postReceiverUrl);
// add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("country", country));
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// execute HTTP post request
HttpResponse response = httpClient.execute(httpPost);
HttpEntity resEntity = response.getEntity();
if(resEntity != null)
{
responseStr = EntityUtils.toString(resEntity).trim();
// you can add an if statement here and do other actions based
// on the response
}
}
catch (ClientProtocolException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
return responseStr;
}
当我使用String变量country而不是将数据“USA”直接传递给新的BasicNameValuePair时,responsStr返回null。
我尝试将新的BasicNameValuePair(“country”,country)修改为 new BasicNameValuePair(“country”,country.toString()),以及, new BasicNameValuePair(“country”,country +“”) 但不幸的是,这两种技巧都没有用。
其他信息 但是,如果我定义String country =“USA”,则在onCreateView中,值“Japan”实际上是通过getArguments分配给country。 BasicNameValuePair(“country”,country)将忽略值“Japan”,但使用原始值“USA”。
任何人都知道为什么会发生这种奇怪的事情?
提前致谢。
答案 0 :(得分:1)
country
可能不为null,但您是否检查过它是否为空字符串""
?这就是它在Countries
课程中初始化的内容。我会做Log.d("debugging", country)
,并检查LogCat以查看您创建NameValuePair
时国家/地区的实际情况。
答案 1 :(得分:0)
问题解决了。我用onActivityCreated()替换了onCreate()。根据片段的生命周期,将在片段onActivityCreated()之前检索String country的值。