非常に奇妙なエラーが発生しました。以下のメソッドは、 nameValuePairs.add(new BasicNameValuePair("country", "USA"));を定義した場合にのみ、PHP Web サービスにデータを送信し、JSON でエンコードされたデータを取得できます。ただし、"USA" の代わりに文字列変数 country を使用すると、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;
}
データ「USA」を新しい BasicNameValuePair に直接渡す代わりに、文字列変数 country を使用すると、responsStr は null を返します。
new BasicNameValuePair("country", country)をnew BasicNameValuePair("country", country.toString())、およびnew BasicNameValuePair("country", country + "")に変更しようとしましたが 、残念ながら両方トリックは機能しませんでした。
追加情報 String country = "USA" を定義すると、onCreateView 内で、値 "Japan" が実際には getArguments によって国に割り当てられます。BasicNameValuePair("country", country) は値 "Japan" を無視しますが、元の値 "USA" を使用します。
なぜこの奇妙なことが起こるのか、誰もが知っていますか?
前もって感謝します。