我能够将json数据注册到我的服务器,我甚至得到了响应,但是无法在吐司中显示它并将其发送到其他活动(主要活动)。
我将响应转换为字符串并尝试使用getter发送到我的mainactivity但是我无法在Log.i
中看到它,即使是在我提到的吐司中也是如此。这是我的代码:
class SendJsonDataToServer extends AsyncTask<String, String, String> {
String j;
@Override
protected String doInBackground(String... params) {
String JsonResponse = "";
String JsonDATA = params[0];
HttpURLConnection urlConnection = null;
BufferedReader reader = null;
try {
URL url = new URL("http://gstedge.com/test/invoice/api.php?param=signup");
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setDoOutput(true);
// is output buffer writter
urlConnection.setRequestMethod("POST");
urlConnection.setRequestProperty("Content-Type", "application/json");
urlConnection.setRequestProperty("Accept", "application/json");
//set headers and method
Writer writer = new BufferedWriter(new OutputStreamWriter(urlConnection.getOutputStream(), "UTF-8"));
writer.write(JsonDATA);
// json data
writer.close();
InputStream inputStream = urlConnection.getInputStream();
//input stream
StringBuffer buffer = new StringBuffer();
if (inputStream == null) {
// Nothing to do.
return null;
}
reader = new BufferedReader(new InputStreamReader(inputStream));
String inputLine;
while ((inputLine = reader.readLine()) != null)
buffer.append(inputLine + "\n");
if (buffer.length() == 0) {
// Stream was empty. No point in parsing.
return null;
}
JsonResponse = buffer.toString();
j= JsonResponse;
//response data
Log.i("o/p:", JsonResponse);
//send to post execute
}
catch (IOException e) {
e.printStackTrace();
} finally {
if (urlConnection != null) {
urlConnection.disconnect();
}
if (reader != null) {
try {
reader.close();
} catch (final IOException e) {
Log.e("wtf", "Error closing stream", e);
}
}
}
return JsonResponse;
}
我无法在onpostexecute中获得响应,因此我将其删除并考虑将其转换为字符串并使用getter发送并在其他活动中解析它。我能够在代码中看到上面提到的log.i("o/p")
中的响应,但我不知道为什么它没有被发送。
这是我的主要活动代码:
public class MainActivity extends AppCompatActivity {
EditText emailview, numberview, pwview;
Button registerview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
emailview = (EditText) findViewById(R.id.et1);
numberview = (EditText) findViewById(R.id.et2);
pwview = (EditText) findViewById(R.id.et3);
registerview = (Button) findViewById(R.id.btn1);
}
public void hit(View v) {
String email = emailview.getText().toString();
String contact = numberview.getText().toString();
String pw = pwview.getText().toString();
JSONObject a = new JSONObject();
try {
a.put("mail", email);
a.put("num", contact);
a.put("pass", pw);
} catch (JSONException e) {
e.printStackTrace();
}
if (a.length() > 0) {
new SendJsonDataToServer().execute(String.valueOf(a));
}
SendJsonDataToServer S = new SendJsonDataToServer();
String Jr = S.getJR();
Log.i("out:",Jr);
Toast.makeText(MainActivity.this, Jr, Toast.LENGTH_LONG).show();
Intent i= new Intent(MainActivity.this,UserAreaActivity.class);
startActivity(i);
}
}
我看到的吐司是空的。
答案 0 :(得分:0)
<强>解释强>
因为您要创建两个SendJsonDataToServer
首先:
new SendJsonDataToServer().execute(String.valueOf(a));
第二
SendJsonDataToServer S = new SendJsonDataToServer();
因此这两个对象将获得不同的内存分配。当你得到这个代码的回复时
String Jr = S.getJR();
然后您将获得从您获得响应的对象在不同对象中创建的响应。所以Jr
显然是空的。这就是为什么你不能打印你期望的响应。
解决方案:
首先:
您需要执行
Toast.makeText(MainActivity.this, Jr, Toast.LENGTH_LONG).show();
in
@Override
protected void onPostExecute(String result) {
Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show();
}
您的AsyncTask
中的方法就像这样。
<强>第二强>
如果您想将此结果发送到第二个活动,那么您应该在onPostExecute
方法中编写这样的代码。
@Override
protected void onPostExecute(String result) {
Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show();
Intent i = new Intent(MainActivity.this, UserAreaActivity.class);
i.putExtra("result", result);
startActivity(i);
}
并使用onCreate()
UserAreaActivity
方法编写此代码
Bundle bundle = getIntent().getExtras();
String result = bundle.getString("result");
Toast.makeText(UserAreaActivity.this, result, Toast.LENGTH_LONG).show();
现在,您可以在此活动中使用结果。